[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/12 09:33 / Filesize : 268 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

 【初心者】Java質問・相談スレッド118【歓迎】



1 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 18:21:51 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド116【歓迎】
pc11.2ch.net/test/read.cgi/tech/1213347130/
次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
www.wikiroom.com/java/


116 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:14:07 ]
>>115
縮めてみた。
import java.util.*;
import java.util.concurrent.*;
import java.text.SimpleDateFormat;

public class TestA implements Callable<Object> {
private ScheduledFuture<?> future;
private ScheduledThreadPoolExecutor pool = (ScheduledThreadPoolExecutor)Executors.newScheduledThreadPool(1);
public static void main(String[] argv) {new TestA().start();}
public void start() {future = pool.schedule(this, 1, TimeUnit.MILLISECONDS);}
public Object call() throws Exception {
System.out.println(sdf.format(new Date()) + ": running");
ScheduledFuture<?> future2 = pool.schedule(this, 1, TimeUnit.MILLISECONDS);
return future;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" , Locale.JAPAN);
}

遅延を0にすればとまらないのだから、デッドロックと言うことは無いだろう。
時刻に達したら制止が外れるようなので、
1,2秒さかのぼった程度なら、問題にならないだろうけど、
夏時間とかはどうなるだろ。

また、時計を巻き戻して、処理が止まってから、時計を戻してみた。
すると、1分間ほど経ってから処理が再開した。

117 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 23:45:02 ]
ThreadGroupのactiveCount()でグループに属するスレッドの数が取得できないのですが
これは仕様ですか?

// スレッドグループツリーの作成
ThreadGroup g1 = new ThreadGroup("g1");
Thread t1 = new Thread(g1, "t1");
Thread t2 = new Thread(g1, "t2");
ThreadGroup g2 = new ThreadGroup(g1, "g2");
ThreadGroup g3 = new ThreadGroup(g1, "g3");
Thread t3 = new Thread(g2, "t3");
ThreadGroup g4 = new ThreadGroup(g2, "g4");
Thread t4 = new Thread(g4, "t4");

// g1スレッドグループに含まれるスレッドの数
System.out.println("g1.activeCount() = " + g1.activeCount());

上記のプログラムを実行すると
g1.activeCount() = 0
と表示されます。

参考書を見ると
g1.activeCount() = 4
と表示されるとなっています

ご教授お願いします

118 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 23:47:41 ]
startしていないthreadはカウントされない

119 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 23:48:33 ]
>>118
ありがとうございます

もう一度試してみます

120 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:07:48 ]
宣伝しにきたよ。
■■みんなでサイトつくろうぜwwwwwwww■■

「お前ら一緒にサイト作ろうぜwwwww」
「2ちゃん越えるサイト作ろうぜww」

「仕事無いんだ・・・・・・」

「やろうぜ!」

「みんなでサイトつくろうぜwwwww」

gacco.o0o0.jp/
ex14.vip2ch.com/test/read.cgi/part4vip/1218612197/
今日トップ絵作ったんだぜ!
興味沸いたらきてください!

121 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:09:23 ]
みんなでサイトつくろうぜwwwwwwwwww

みんなで本気でつくる気です。 がんばりましょう。
サイトのイメージはSNS×学校みたいな感じ。
サイトデザイン(案)
ttp://www36.atwiki.jp/vipvipschool?cmd=upload&act=open&pageid=12&file=title.jpg
ttp://www36.atwiki.jp/vipvipschool?cmd=upload&act=open&pageid=12&file=viploader744102.jpg
ttp://www.vipper.org/vip900611.png

技術を持ってる人はパー速へ!
ttp://ex14.vip2ch.com/test/read.cgi/part4vip/1218612197/

wiki:

vipでサイトつくろーぜ
ttp://www26.atwiki.jp/netschool/


詳細はwiki参照


122 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:15:41 ]
宣伝しにきたよ。
■■みんなでサイトつくろうぜwwwwwwww■■

「お前ら一緒にサイト作ろうぜwwwww」
「2ちゃん越えるサイト作ろうぜww」

「仕事無いんだ・・・・・・」

「やろうぜ!」

「みんなでサイトつくろうぜwwwww」

gacco.o0o0.jp/
ex14.vip2ch.com/test/read.cgi/part4vip/1218612197/
今日トップ絵作ったんだぜ!
興味沸いたらきてください!

123 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:16:29 ]
>>120
あれ。。俺がいる。
ホントすまなかった。

124 名前:デフォルトの名無しさん [2008/08/14(木) 01:54:38 ]
相変わらずキモイな
C#と同じくどんどん糞スレになってくれ



125 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:01:18 ]
掲示板を作ってるのですが、書き込んだ日時としてデータベースに
Calendar#getTimeInMillis()で取れる値を入れて、
そのlong値を取得して何月何日何時何分何秒に書き込んだか表示したいのですが、
Calendar cal=Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR));
cal.setTimeInMillis(//データベースから取得したlong値);
System.out.println(cal.get(Calendar.YEAR));
で比較すると後者のprintlnで表示される値が何を入れても常に1970になります。
setTimeInMillisをAPIドキュメントで見ると
>Calendar の現在時刻を、指定された long 値から設定します。
と書いてあるのでこれで良いかと思ったのですが、これはどこを間違っているのでしょうか??

126 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:24:21 ]
>>125
データベースから取得したlong値は正しい値で取得されている?
秒単位でなくてミリ秒単位だからだいたい 31500000000 より小さい値なら1970年になる。

127 名前:デフォルトの名無しさん [2008/08/14(木) 03:39:42 ]
アクセス修飾子について質問です。

protected:
 同一クラスのインスタンス、またはそのクラスを継承したクラスのインスタンスからアクセス可能。

なし(デフォルト):
 そのインスタンス、または同一パッケージに所属するクラスのインスタンスからアクセス可能。

となっていますが、メンバが「なし(デフォルト)」の場合には、異なるパッケージに存在するサブクラスの
インスタンスからは、アクセスすることができないのですか?

128 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:42:45 ]
うん

129 名前:デフォルトの名無しさん [2008/08/14(木) 03:48:49 ]
では、アクセス就職子の序列が

public > なし(デフォルト) > protected > private

となっている参考書は間違いなのですか?

「protected」の場合にアクセスできるものに
「なし(デフォルト)」の場合にアクセスできないので。

130 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:49:10 ]
>>127
protectedは同一パッケージ内のクラスからもアクセス可能。

131 名前:デフォルトの名無しさん [2008/08/14(木) 03:50:59 ]
protectedの説明が
> 同一クラスのインスタンス、またはそのクラスを継承したクラスのインスタンスからアクセス可能。
になっているのなら、その参考書の説明は間違い。

132 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:53:18 ]
あー逆だ
public > protected >> なし(デフォルト) private
が正しい。
protectedの方が公開の範囲が広い。

133 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 03:58:09 ]
public > protected >> なし(デフォルト) private
は、
public > protected > なし(デフォルト)> private
ね。だから、
> となっている参考書は間違いなのですか?
は間違いで正しい。
まとめると、
> となっていますが、メンバが「なし(デフォルト)」の場合には、異なるパッケージに存在するサブクラスの
> インスタンスからは、アクセスすることができないのですか?
は正しい。
> public > なし(デフォルト) > protected > private
> となっている参考書は間違いなのですか?
も正しい。つまり間違ってる。

134 名前:デフォルトの名無しさん [2008/08/14(木) 04:13:16 ]
>>130-133
了解です!
ありがとうございます!



135 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 04:22:01 ]
そんな糞参考書は窓から投げておk

136 名前:デフォルトの名無しさん [2008/08/14(木) 05:11:35 ]
糞はおまえw

137 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 06:24:30 ]
会話が成り立っていない

138 名前:105 mailto:sage [2008/08/14(木) 10:10:40 ]
>>115
書き込みが入りきるよう縮めていたら消していました。
使い方おかしいですか?
やりたいのはその都度実行する遅延を計算しなおしたいのです。
ここでは止まるのを確認するのに1msで常にやってます。

>>116
printlnでIOがブロック?と書きましたが違ったようです。
↓のように、止まるのは遅延を待機しているのではないかと。
ただその遅延が指定したものでなく、
おっしゃるように戻した時間が経過して戻す以前の時間+遅延になると動くようです。
もしかしたら遅延を指定しているにも関わらず、
内部で時刻を取得し直して計算しているのかとも思うのですが。

スレッド [pool-1-thread-1] (中断中)
Unsafe.park(boolean, long) 行: 使用不可 [ネイティブ・メソッド]
LockSupport.parkNanos(long) 行: 使用不可
AbstractQueuedSynchronizer$ConditionObject.awaitNanos(long) 行: 使用不可
DelayQueue<E>.take() 行: 使用不可
ScheduledThreadPoolExecutor$DelayedWorkQueue.take() 行: 使用不可
ScheduledThreadPoolExecutor$DelayedWorkQueue.take() 行: 使用不可
ScheduledThreadPoolExecutor(ThreadPoolExecutor).getTask() 行: 使用不可
ThreadPoolExecutor$Worker.run() 行: 使用不可
Thread.run() 行: 使用不可


139 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 10:52:28 ]
どなたか>>52(>>99)をお願いします…
何か質問の仕方マズかったでしょうか

140 名前:デフォルトの名無しさん [2008/08/14(木) 12:35:08 ]
やっぱ"Ruby"ですよ!

141 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 13:04:24 ]
>>139
1.2以前でっていう限定がきつい。
古すぎてだれも答えられないと思う。

142 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 13:10:54 ]
>>141
初心者の宿題出なければ、appletを作っているやつ自体いないのでは

143 名前:デフォルトの名無しさん [2008/08/14(木) 13:43:41 ]
■■みんなでサイトつくろうぜwwwwwwwwwwwwwwww■■
「お前ら一緒にサイト作ろうぜwwwwwwwwww」
「2ちゃん越えるサイト作ろうぜwwww」
「仕事無いんだ・・・・・・」
「やろうぜ!」
「みんなでサイトつくろうぜwwwwwwwwww」
gacco.o0o0.jp/
yutori.2ch.net/test/read.cgi/news4vip/1218673130/
ex14.vip2ch.com/test/read.cgi/part4vip/1218612197/
興味沸いたらきてください!
======================!! 人材募集中 !!======================
■プログラムを組んでくれる人
 *サーバー側
  言語はRubyかPerlの予定ですが、Perlが有力候補。
  ・チャット
   定期的にクライアントから着信があり、それに対して更新されたチャットのメッセージを返信する程度の能力。じゃなくて機能。
   通信するときのフォーマットは未定。
  ・ログイン・アカウント管理
   ログイン認証、各アカウントの点数などの管理。データベースは未定。
  ・お絵描き
   未定。とりあえず鯖に負担がかからない程度にたまに画像を送信してあげるって感じで
 *クライアント側
  はっきり言って俺もわからね。Ajaxだとかflashだとかjavaだとか。
■機能提案(正しくは人材ではなく、意見?)
 「こんな機能があったら良い!」「こうするともっと楽しくなる!」などの意見募集中。
 挨拶とか気にせずスレにどんどん書き込んでくれればおk
■デザイン
 サイトのデザインを考えてくれる人、作ってくれる人募集中。
 できればphotoshop illustrator使える人(プロジェクト共有しやすいので)


144 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 14:09:09 ]
>>139
1) java.util.zip 使って外部アーカイブを読める自前の URLStreamHandler 作って、
URL.setURLStreamHandlerFactory してみるとか……
セキュリティマネージャに怒られてダメかもしれんが。

2) 1.1レベルでは互換性の高そうな標準API使う方法だと
1)のアプローチぐらいしかないので、それがダメなら
外部jar使うの諦めるか、互換性諦めるか、音出す事を諦めるか選ぶしかないと思うぞ。



145 名前:デフォルトの名無しさん [2008/08/14(木) 14:20:42 ]
たぶんwebで公開のappletじゃないと思うけど、Class.getResouceAsInputStream()とかかな。
javaのデスクトップは、アプレットに適したライブラリが全くなかった他の技術に先を越されたけど、それを補うように進化してきたから、1.2以前だといろいろ出来るわけじゃないよ。


146 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:47:14 ]
回答ありがとうございます!

>>141,142,145
うーんやっぱ今時Appletでしかも1.1縛りなあたりがネックですよねぇ。
自分としては1.2以降のAPI使いたいんですが、MRJに対応しなくてはならない事情があるものでして。
無理そうなら環境によって動作切り替える方向で進めてみようと思います。

>>144
なるほど、URLStreamHandlerは今まで全く見てませんでした。
URL指定をメモリ内のByteArrayInputStreamにリダイレクトできればあるいは、のような感じですね。
光明が見えたような気がしてきました。この方向で色々トライしてみます。

147 名前:デフォルトの名無しさん [2008/08/14(木) 16:47:01 ]
ライブラリは進化してきたといってるのに、自作しちゃう人がまた一人・・

148 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:54:55 ]
実行中にアプリから、あるインスタンスがどこから参照されているかを確認する術はあるでしょうか?

149 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:08:10 ]
プロファイラで辿れない?

150 名前:デフォルトの名無しさん [2008/08/14(木) 17:28:42 ]
このままライブラリ、というか、部品化が進んでいったら、
やがてプログラマが必要なくなるのではなかろうか?
部品をちょちょいと選択すればプログラムができてしまわないだろうか?
そのとき、元プログラマの人は、どうやって食っていくのだろうか?

151 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:35:50 ]
>>149
稼動サーバーでのみリークが発生するようで、アプリ内で何とかしろといわれているので、
JDTとか見たんですけどまったく理解できずに断念です。
やはりツールを使用しないと無理ですかね・・・

152 名前:デフォルトの名無しさん [2008/08/14(木) 17:50:19 ]
日頃の勉強と技術力しだいだなw

153 名前:デフォルトの名無しさん [2008/08/14(木) 18:06:26 ]
Swingにベクタ画像(psとかeps)なんかを表示するものはありますか?
探しても見つからなかったので…
ない場合、何らかの形でJPanel辺りに貼り付けて表示する方法はあるのでしょうか?

154 名前:デフォルトの名無しさん [2008/08/14(木) 18:07:30 ]
2chで質問するほどだなんて、ひでー職場だな。



155 名前:デフォルトの名無しさん [2008/08/14(木) 18:12:13 ]
>>154
俺の職場、それしかなかったけど。。

色々掲示板みてると俺のいた職場がよほどくそだったことがよくわかる。
ここで揶揄されてることが俺の職場ではまさにデフォルトだった。

ろくに経験もないうちから研修(実務にまったく役に立たない)と称して独力(上司は単なる営業社員)でつくらされて
現場にいっても俺みたいなど素人がもう一人。。できるわけねえだろ。。

156 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 18:47:47 ]
>>110
そりゃあソースコードが複雑で読みにくいという

157 名前:デフォルトの名無しさん [2008/08/14(木) 19:56:43 ]
みんなそれでやってきたんだし、おまえの技術力が低いだけじゃね?

158 名前:デフォルトの名無しさん [2008/08/14(木) 19:58:43 ]
>>155
おまえが糞だってことが良く分かった

159 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:09:30 ]
匿名メソッドのメリットがいまいち分からないのですが、
コーディング量が少し減ることと、
そのメソッドへ他からアクセスできないこと以外で
何かメリットってあるのでしょうか?
よろしくお願いします。

160 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:10:15 ]
匿名メソッドなんてあったっけ?

161 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:15:04 ]
匿名クラスでした、すみません

162 名前:デフォルトの名無しさん [2008/08/14(木) 20:42:09 ]
>>155
それは職場が糞なんじゃなくて、お前が糞なんじゃないの?
なんかお前にはVBの方が向いてるような・・・

163 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 20:46:24 ]
そういう話はマ板でどうぞ

164 名前:デフォルトの名無しさん [2008/08/14(木) 21:44:18 ]
相変わらず、糞だらけのスレですね(^^



165 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 22:40:07 ]
>>159
・いちいち名前を考えずに済む
・普通の内部クラスは書く場所と使う場所が離れていてわかりにくい

166 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 23:53:02 ]
fileChooserを利用して、選択したクラスファイルを取得したいのですが

File file = fileChooser.getSelectedFile();
Class cls = file.getClass();

これではうまくできません。
どのようにすれば良いか、どなたか教えてくれませんか?

167 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 00:32:35 ]
クラスファイルをロードしたいってことか?
class MyClassLoader extends ClassLoader {
public Class<?> loadClassfile(File file) throws いろいろ {
byte[] data = new byte[(int)file.length()];
FileInputStream in = new FileInputStream(file);
new DataInputStream(in).readFully(data);
in.close();
Class<?> cls = defineClass(null, data, 0, data.length);
resolveClass(cls);
return cls;
}
}
という独自クラスローダを作って、
Class<?> cls = new MyClassLoader().loadClassfile(file);
でどうよ

168 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 00:50:39 ]
>>167
クラスを取得してコンストラクタの分析などをリフレクションを用いて実現させたいんです。

File file = fileChooser.getSelectedFile();
Class cls = Class.forName(file.toString());

とかも試したんですけどうまくいきませんでした…
なにぶん初心者なもので、根本的なことが間違ってる気がしてならないですorz

169 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 01:44:09 ]
>>168
Class.forNameで渡すのはFileとかのクラスファイルの場所ではなくてクラス名そのもの。
クラスファイルをクラスパスの通っているところから参照できる場所に置いておけばクラス名から探してくれる。
クラス名がfoo.bar.Hogeならクラスパスの通っているところのサブディレクトリとしてfoo、その下にbarという
ディレクトリがあって、その中にHoge.classがあればClass.forName("foo.bar.Hoge")でClassインスタンスが得られる。
クラスパスとは無関係にクラスをロードしたいのならURLClassLoaderを使うのが楽かも。
URLClassLoaderでぐぐればサンプルはいくらでもある。

170 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 04:09:03 ]
>>167
readFully(data); を使うのは単に趣味ですか?
read(data);とどう違うのかAPI Docs上から分からないんですがご存知でしょうか。

171 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 04:57:34 ]
readは指定したバイト数全部を読み込むことは保証されていない
1バイトでも読めれば、読み込めたバイト数を返す

readFullyは指定したバイト数全部読み込む
読み込めなければEOFException

172 名前:デフォルトの名無しさん [2008/08/15(金) 05:35:43 ]
秒妙な違いですけど、引数がFileなのでreadFullyはやらないほうがいいのでは?
間違ってはないけど、そこで使うのはDataInputの設計目的と微妙に違うような…


173 名前:デフォルトの名無しさん [2008/08/15(金) 09:19:21 ]
いつも来ていた糞野郎は死んだか?

174 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 10:29:51 ]
Thread.currentThread().getStackTrace()でスタック情報が取得できますが、引数インスタンスは取得できません。
引数インスタンスを取得する方法はあるでしょうか?



175 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 10:39:16 ]
>>174
caller の引数に触りたいって話ならデバッガ使えば?

176 名前:デフォルトの名無しさん [2008/08/15(金) 14:05:49 ]
糞はドブに流れていってしまったが?

177 名前:デフォルトの名無しさん [2008/08/15(金) 19:18:11 ]
テストについて質問です。
値を返すメソッドなら期待される値と実際の値を比較しますが、
値を返さないメソッドはどのようにテストをすればいいのでしょう。
DBに書き込むメソッドとかなら書き込まれた値をチェックできますが、
例えば以下のようなものです。
・メールを送信するメソッド
・コンソールに文字を出力するメソッド

178 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 19:46:12 ]
mainって普通プログラムの中でどういう部分を書くものなのでしょうか?
staticだから長いプログラムを書くと面倒になる部分が多いので
mainでは自分のクラスのコンストラクタをnewするくらいにしか使わなくて、
そのコンストラクタの方で色々書くようにしているのですが、どうなんでしょう?



179 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 19:49:06 ]
テストの基本は事前条件と事後条件が正しいことを確認すること
・メールを送信するメソッド
メールを送信するクラスが正しく呼び出されたかをチェックする

・コンソールに文字を出力するメソッド
これは難しいのでやらない
やる場合は、特定の文字を出力するメソッドのテストとしておいて、
Writerはsetterで設定できるようにしておく
どちらにせよコード中にSystem.outがあるのはウンコ

180 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 19:51:46 ]
>178
いわゆるエントリポイントってやつだから、外部から起動する時に必要な範囲の処理を行うのが正しい
なので、コンストラクタの方で色々やっているのは正しいよ。
mainに書くべき処理といえば、後はプログラムの実行引数のチェックやデフォルト値の設定。
バグで落ちたときにどうするかの処理とか、そんな感じだろうな

181 名前:177 mailto:sage [2008/08/15(金) 20:12:33 ]
>>179
> メールを送信するクラスが正しく呼び出されたかをチェックする
これ、もうちょい詳しく解説してくれるとうれしいです。

> Writerはsetterで設定できるようにしておく
なるほど。それなら結構簡単にテストできそうですね。

182 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 20:22:42 ]
>>177
テストアドレスに送信して、受信して、その内容をチェックすれば良いだけでは

183 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 21:40:47 ]
>>181
方法は幾つかあるけど、インターフェイスをきってテスト用のオブジェクト(モック)でテストを実行する。
モックなんで実際にはメールを投げずに内部的なステータスを変化させるだけ
テストとしてはステータスが変わった(目的のメソッドが実行された)ことを確認する

完全にJavaMailを使っている箇所などをテストする場合は面倒だけど、EasyMockなんかを利用するしかない。
単体テストで再帰的にやるならばこんな感じ。

後は本当に動くかどうかは開発中は動作確認レベルで済ませてシステムテストでやる

184 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 22:20:58 ]
ネットワークプログラミングを勉強中なのですが、
サーバ側
public static void main(String[] args){
ServerSocket ss=new ServerSocket(7777);
Socket sock=ss.accept();
BufferedReader br=new BufferedReader(new InputStreamReader(sock.getInputStream()));
System.out.println(br.readLine());
br.close();
sock.close();
ss.close();
}

クライアント側
public static void main(String[]  args){
Socket sock=new Sock(コンピュータ名,7777);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream));
bw.write(br.readLine());
bw.close();
br.close();
sock.close();
}

この二つを実行するとサーバ側で何も表示されません。
クライアント側のBufferedReaderの件を全部消してbw.write("hoge");
とかに直すと、ちゃんとサーバ側のPCでhogeと表示されるのですが、
何がいけないのでしょうか?



185 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 22:23:09 ]
closeしちゃダメだろ

186 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 23:50:37 ]
JNIを使ってJavaの引数にクラスを指定し、
C側でクラス内のString型のフィールドにデータを入れようと以下のようなプログラムを書きました。
そしたら半角カナに濁点の文字が文字化けしてしまいました。
こういった場合どのように対処したらいいのでしょうか、ご教授ください!

C側↓
JNIEXPORT jlong JNICALL Java_Test(JNIEnv *env, jclass, jobject obj){
jclass cs = env->GetObjectClass(obj);
jfieldID fid = env->GetFieldID(cs,"strParam" , "Ljava/lang/String;");
env->SetObjectField(obj, fid, env->NewStringUTF("サブキー");
return 0;
}

java側↓
HogeClass hoge = new HogeClass();
 Main.Test(hoge);
System.out.println(
new String( hoge.strParam.getBytes("iso-8859-1"), "MS932")
);


187 名前:もう泣きそう mailto:sage [2008/08/16(土) 01:30:05 ]
UNIXの環境変数受け渡しについて
教えて下さい。

シェルスクリプトで設定した環境変数は、JAVA(jarのクラス)側で
読み取れると思いますが、その逆は可能なのでしょうか?

以下を想定しています。
もし可能なら、メソッド名とかを教えて下さい。

-----------------------------------------
#!/bin/bash
export AAA=a.txt

java classA -xm=512m・・・

echo KEKKA1=$KEKKA1 ←これが可能でしょうか?
echo KEKKA2=$KEKKA2 ←これが可能でしょうか?
-----------------------------------------

public void class cassA {
  String aaa = system.getenv("AAA");
  String kekka1 = "data1"; ←これを返したいのです。
  String kekka2 = "data2"; ←これを返したいのです。
  (設定するロジックというかメソッド名・・・)
}

JAVA側の変数をシェルで読み取れれば良いのですが、
もし可能なら、メソッド名とか簡単でもいいのでサンプル例等を
教えて下さい。
もう泣きそうです・・(;-;)

188 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 01:38:01 ]
何か良くわからんけどファイルに書き出せば良いじゃん
でシェルで読み込めば

189 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 02:03:52 ]
>>187
通常、子プロセスは親プロセスの環境変数を変えられない。

190 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 05:21:40 ]
JDBC での Oracle との連携を勉強しようとしていたら
Oracle のサイトに Java関連の Tips が大量に合って助かったのですが
逆に .NET でのサンプルが皆無だったので気になりました
Oracle と Java って何か深い繋がりがあるのでしょうか?
それとも Oracle が Java を一方的に支持してる感じ?

191 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 07:40:40 ]
>>186
半角かな以外は化けないか確認した?
半角英数はともかく、漢字は化けると思うが。

> env->SetObjectField(obj, fid, env->NewStringUTF("サブキー");
これ UTF-8 渡してるのか?
VisualC++ とかなら env->NewString(L"サブキー", 5) とかした方が。

> new String( hoge.strParam.getBytes("iso-8859-1"), "MS932")
これやると確実に化けるんじゃね?

192 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 08:49:08 ]
>186
JNI を使ってJavaクラスのパラメータをいじる方法は良く分からんですが、
半角カナというのは、どの文字符号化方式で定義されているものを使うのですかね。

String 内部は UTF-16 (char) 配列です。

193 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 09:43:02 ]
a

194 名前:デフォルトの名無しさん [2008/08/16(土) 11:03:24 ]
interfaceは多重に継承できるんですけど、もしスーパー・インタフェイスと
メソッド名やシグニチャがかぶったら継承できないんですか。
特に他の人が使ったインタフェイスで、
戻り値がかぶったり、戻り値がlongとかだったらどうするのでしょうか。

どうやって回避するんでしょうか?



195 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 11:27:09 ]
>>194
シグニチャ同じで戻り値型違うのは無理。
シグニチャ同じで戻り値型同じなら実装できるけど、
各interface が別々の振る舞いを期待してる場合は無理。

メソッド名付ける時点で被らないように気をつけるぐらいしかないね。

196 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 11:30:12 ]
>>194
インターフェースはそもそもシグネチャしか定義しない(定数定義もあるけどここでは無視)ので、多重定義になっても問題はない。
何故なら、同じ名前、同じ引数、同じ返り値を持っている、ということ以外の情報は定義されないから。
実装側で、同じシグネチャなのに異なるインターフェースでアクセスされると違う動作をしなければならない、ということであれば、それは設計が間違っている。

197 名前:デフォルトの名無しさん [2008/08/16(土) 11:38:24 ]
>>196
そういう問題じゃなくて、AppendableとStringBuffer.appendのような話をしてるんですけど…

それもjdk1.4以前だとどうやって回避してたんでしょうか。



198 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 11:41:59 ]
> AppendableとStringBuffer.appendのような話
このケースって、なんか問題あんの?

199 名前:デフォルトの名無しさん [2008/08/16(土) 11:48:01 ]
jdk1.4以前

200 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 11:49:53 ]
1.4以前は Appendableないから問題ないよ。

201 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 12:02:47 ]
>>197
何が疑問なのかわからん。その例ってインターフェースの多重継承とは何の関係もないじゃん。
一応書いとくけど、インターフェースの多重継承って、
interfece SuperInterfaceA { int hoge(int x); }
interface SuperInterfaceB { int hoge(int x); }
interface SubInterface extends SuperInterfaceA, SuperInterfaceB {}
というものだぞ。

202 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 12:25:23 ]
>194
こんなのでどうさ。

ttp://www.y-adagio.com/public/standards/tr_javalang2/interfaces.doc.html#40247

203 名前:デフォルトの名無しさん [2008/08/16(土) 12:50:00 ]
classと同じでinterfaceをextends出来るけど、継承」の意味が少し違うようですね。

本当は、自作のインタフェイス interface My_interface{
My_interface append(My_interface); 
}
例えば引数assertチェックありで、
class StringBufferも引数My_interfaceに参加させたいんですけど、
class StringBufferは当然他人が作ったライブラリなので、My_interfaceを実装できません。

今のところifで分岐してるんですけど、こういうときは、どうやれば自作インタフェイスにくわえられるんでしょうか。




204 名前:デフォルトの名無しさん [2008/08/16(土) 12:52:20 ]
例えば引数assertチェックありとかの実装で。



205 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 12:58:17 ]
アダプタパターン

206 名前:デフォルトの名無しさん [2008/08/16(土) 13:45:32 ]
アダプタよりもデコレータ・パタンかな

207 名前:デフォルトの名無しさん [2008/08/16(土) 13:47:28 ]
>>200
例えばで出してみたんですけど、分かりませんか?
自作したインタフェイスの話しなんですけど・・・

208 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 13:53:32 ]
なんかでラップすりゃいいじゃん

209 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 14:15:28 ]
>>203
まず、Javaでは原則として既存のクラスやインターフェースに手を加えることはできない。
該当のクラスがfinalでなければ、サブクラスを作ってそこでimplementsする手はある。
該当のクラスがfinalであれば、自作のクラスでラップするしかない。

210 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 16:38:08 ]
Listのキャストはエレメントを個別にキャストするしかありませんか?

211 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 16:38:53 ]
generics 使えば?

212 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 16:47:37 ]
どうするんですか?

(List<MyClass>)list
のようなキャストが失敗します。

213 名前:デフォルトの名無しさん [2008/08/16(土) 16:54:48 ]
自作したインタフェイスを使ってライブラリ作ってんるんですけど、
そこに他人が作ったクラスも参加させるのはどうするんでしょうか?

とういことなんですけど、これだけじゃ何言ってるかわからないと思いませんか。

214 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 16:57:22 ]
>>213
共有ライブラリとかプラグインとかリフレクションの世界のことかと思った。



215 名前:デフォルトの名無しさん [2008/08/16(土) 18:33:05 ]
class MyBig extends BigDecimal {
    MyBig(String v){super(v);}
    public MyBig abs(){return this;}
}

BigDecima.abs()をオーバライドしたいのですが、1.4以前ではどうやるんでしょうか。
negate()と同じく、メソッド名に意味があるので名前を変更できないので何かよい方法はないでしょうか?

216 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 18:54:57 ]
eclipse の JDT を使ってみようと思ってるんですが,eclipse 上で,
import org.eclipse.jdt.core.dom.*;
などど打っても org.eclipse が見つかりませんというエラーが出てしまいます.

どうすれば解決できますか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<268KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef