1 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:09:54 ] プログラミング言語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質問・相談スレッド120【歓迎】 pc11.2ch.net/test/read.cgi/tech/1223603727/ 次スレは>>990 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/
477 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 06:44:36 ] TreeMap<Integer, Integer> treemap = new TreeMap<Integer, Integer>(); for(〜){ treemap.put(keyl, val); } int j = treemap.size(); int[] order = new int[j]; for (Map.Entry<Integer, Integer> in : treemap.entrySet()) { order[--j] = in.getValue(); System.out.println("j:"+j); System.out.println("Key:" + in.getKey()); System.out.println("Val:" + order[j]); } このようにtereemapの要素を配列に降順にいれようとしたのですが、treemapの要素がマイナスのとき それがサイズとしてカウントされませんでした。 例: 1,6,33,7,-1,-9 のときのサイズは4つ これは何故こうなるのでしょうか? というかそもそもこれよりも簡単綺麗に降順にして配列にいれる方法ありましたら教えてください
478 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 09:57:10 ] >>477 >というかそもそもこれよりも簡単綺麗に降順にして配列にいれる方法ありましたら教えてください 降順にするならComparatorを実装したクラス一個作ってそれを使ってtreemapを コンストラクトした上で treemap.values().toArray()で配列を取り出すとかすればいけそうな気はする
479 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:03:16 ] >>478 ありがとうございます 今試しにやってみたところtreemapの精度が正確ではないのか ソートがところどころ順番がおかしくなっていました 2つの要素i,jがありそれぞれをセットとして、iで降順にソートし、その順番でjを配列に格納するにはどうしたらいいのでしょうか? i , j 4 , 43 675, 23 262, 5 を 675, 23 262, 5 4 , 43 とソートしたいと思っています int [][]ar = new int[64][2]; //無駄な配列ができますが、ループが終わるまで要素数がわからないので・・・ int j; for(int i =0;i<64;i++){ if(iがある条件なら){ j= getKey(〜); } ar[i][0] = j; ar[i][1] = i; } そしてこのarをar[i][0]の降順にソート int ar2 = new int[ar.length]; for(int i=0; i<ar.length;i++){ ar2[i] = ar[i][1]; } return ar2;
480 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 15:26:07 ] >treemapの精度が正確ではないのか うけたw
481 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:46:47 ] >>479 どこから突っ込めばいいんだ・・・
482 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:33:21 ] >>479 やっつけで作ってみたけど、やりたいのはこゆこと? import java.util.*; public class Test{ public static void main(String args[]){ TreeMap<Integer, Integer> treemap = new TreeMap<Integer, Integer>(new TestCmp()); treemap.put(Integer.valueOf(4),Integer.valueOf(43)); treemap.put(Integer.valueOf(675),Integer.valueOf(23)); treemap.put(Integer.valueOf(262),Integer.valueOf(5)); Object[] keys = treemap.keySet().toArray(); Object[][] result = new Object[keys.length][2]; int i=0; for(Object key:keys){ result[i][0]=key; result[i][1]=treemap.get(key); System.out.println("key="+result[i][0]+":val="+result[i][1]); i++; } } } class TestCmp implements Comparator{ public int compare(Object i1, Object i2){ if((Integer)i1<(Integer)i2){return 1;} if((Integer)i1>(Integer)i2){return -1;} return 0; } public boolean equals(Object o){ if(o.equals(this)){return true;} return false; } }
483 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:45:56 ] Comparatorを書かなくても元々キーの昇順にソートするComparatorを持っているからそれを逆にすればいい。 TreeMap<Integer, Integer> treemap = new TreeMap<Integer, Integer>(); treemap.put(4 , 43); treemap.put(675 , 23); treemap.put(262 , 5); TreeMap<Integer, Integer> reversemap = new TreeMap<Integer, Integer>(Collections.reverseOrder(treemap.comparator())); reversemap.putAll(treemap); System.out.println(treemap); System.out.println(reversemap); 配列に代入するところまでは書かない。
484 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:49:26 ] 進捗バーについての質問です。ご教授ください。 for文で約30レコードのデータをオラクルから持ってきていていまして、 そのデータのロードがあまりにも遅いために進捗バーを設定したんですけど、 for文内でsetValue()で値を随時セットしているようにしても、バーは正しく動作せず、 パッと突然0%から100%に変わってしまいます。どうやらfor文の中で値を設定しても バーの表示が変わるのはfor文を抜けた直後なのが原因だそうですが、 だとすれば、一体どのようにすれば進捗バーはちゃんと動作してくれるのでしょうか? Eclipseを利用して画面を作成しています。
485 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:49:58 ] treemapが最初にありきの場合なので、 最初から逆順ソートのComparatorを持つTreeMapを作って、 それにputしていくのならこれは関係ないね。
486 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 17:55:26 ] >>484 バーが正しく動作しないのではなくバーを正しく動作させていないのでは ここらへんを参考に ttp://java.sun.com/docs/books/tutorial/uiswing/components/progress.html
487 名前:デフォルトの名無しさん [2008/11/29(土) 19:24:40 ] JNI使って、 int[] を返す native な関数をつくり、 DLLを C/C++ で実装し、 malloc とかしてメモリ確保してそのポインタをして返しやったりした場合、 Java 側ではガベージコレクションされなくなるんでしょうか? (new したものしかガベージコレクション対象にならない?) また、free するような関数も DLL で実装して、 int[] (jintarray になるのかな?) を渡して 開放とかってできるんでしょうか? DLL で画像処理させたい(MMXとかを使う)ので、 メモリアライメントがとれてる配列を使いたいので、、、 スレ違いかもしれませんが、よろしくお願いします。
488 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 20:36:14 ] Serializableで、プリミティブ基本型と配列型が自動で直列化されるということは、 もし全てのクラスでSerializableを実装していると cloneみたく自分でコピーのコード書かなくてもデープコピーになるってことでしょうか?
489 名前:デフォルトの名無しさん [2008/11/29(土) 21:07:17 ] StringのindexOfメソッドの引数は何故charではなくintなのでしょうか?
490 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:10:16 ] >>489 charだろ
491 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:22:12 ] >>487 とりあえずJNIスレはこの板にあるのでそちらで聞いた方が良いだろう、 という事と、JNIに準じたコードを素で実装するよりSWIGを利用した方が 色々と楽が出来ると思います。 それこそガベージコレクタ周りもサポートありますし。
492 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:48:50 ] わからないからってすぐすれ違いにするなよ
493 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:10:41 ] >>487 malloc で確保したメモリを返しても int[] にはならんよ。 1.4以降の NewDirectByteBuffer 使うとか? pc11.2ch.net/test/read.cgi/tech/1033795664/587-596 あたりに出てるけど ネイティブ側で確保したメモリは、JVMのガベコレは解放してくれないので 自前で解放する必要があるみたいね。
494 名前:デフォルトの名無しさん [2008/11/29(土) 22:11:15 ] いや、そういうわけじゃないんだけどね。 普通はByteBuffer.allocateDirectをつかう。 この関数は、要望が多かったから、君がやりたいようなことをそのままJVMでサポートした関数だから。 これも使いたくないって言うなら、ちゃんとAPIドキュメント(JNI)を読むこったw
495 名前:デフォルトの名無しさん [2008/11/29(土) 22:15:38 ] >>492 分かったら、ちゃんと仏様って呼ぶんだぞ
496 名前:487 [2008/11/29(土) 22:32:12 ] >>491 ありがとうございます。ただ、色々と複雑な画像処理をするので、 自分で細かくカスタマイズできるレベルが希望なんです。 >>493 うおー、勉強になりました。 ちょっとこれでやってみます。ありがとうございます。
497 名前:デフォルトの名無しさん [2008/11/29(土) 22:37:24 ] APIも読んでない野郎はカス
498 名前:デフォルトの名無しさん [2008/11/29(土) 22:42:36 ] JavaってIO関連のAPIの頭の中の整理がいまいちつかないんだけど 俺の頭が悪いのか、皆そうなのか・・・ なんどやってもだめ。すぐ忘れる。
499 名前:デフォルトの名無しさん [2008/11/29(土) 22:44:19 ] こんなやつ>>492 に親切に答えてやるな。 どうせAPIも読まない独学だし、こういうカスが調子に乗ったらどうすんの? こういうのがそのうち祟り神(荒らし)になっちゃんだしな・・
500 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:46:08 ] >>498 そのうち慣れるよ 俺も昔はインプットストリームだバッファーなんたらだって頭がおかしくなりそうだったが 最近は見慣れたし、1度書いたコードをコピペしてシャキーンと直せば解決したりもする
501 名前:デフォルトの名無しさん [2008/11/29(土) 22:58:47 ] シャキーンもなにも、JNIスレも探してないしすぐ発狂するし、こういう奴は見込みないよ。やめとけ、やめとけ。
502 名前:デフォルトの名無しさん [2008/11/29(土) 23:00:27 ] >>500 ていうか、おまえは人様が作ったパッケージを使ってるだけだろ? 自分で作ったこともないクセに偉そうにするな。おっさんw
503 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:04:24 ] >>498 ここはおまえの日記帳じゃないからとっとと消えろw
504 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:10:15 ] >>502 人様が作ったから頭にはいらねーんだよボケが 自分で作ったらいくらなんでも覚えとるわい! しかし、IDついてないのにみんなよく特定できるな
505 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:15:31 ] ソースにはIDあるよ
506 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:20:23 ] >>504 雑魚w
507 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:21:53 ] >>505 まじか! 俺なんて、自分が書き込んだIDもわからんぜよ
508 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 23:45:47 ] >>482-483 ありがとうございます 無事実現したいことができました
509 名前:498 mailto:sage [2008/11/30(日) 00:20:36 ] >>500 ありがとう。わけわからんくなるよね?本当に。 >>502 市ね。ごみ屑。
510 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 00:23:47 ] コンストラクタの処理を途中で数秒間止めてから その後コンストラクタの続きの処理を動かすにはどうすればいいでしょうか? public コンストラクタ(){ System.out.println("1"); ここで数秒処理を止める System.out.println("2"); } このような処理にしたいのですが
511 名前:デフォルトの名無しさん [2008/11/30(日) 01:06:50 ] eclipseで動かしてるプログラムなんですが下記のエラーが出ます。 データを読み取って新たにファイルを作り出すプログラムなのですが・・・ 何が原因でしょうか? java.lang.IntrnalError: fillbuf at org.apache.crimson.parser.InputEntity.parsedContent(InputEntity.java:545) at org.apache.crimson.parser.Parser2.content(Parser2.java:1871) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552) at org.apache.crimson.parser.Parser2.content(Parser2.java:1824) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552) at org.apache.crimson.parser.Parser2.content(Parser2.java:1824) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552) at org.apache.crimson.parser.Parser2.content(Parser2.java:1824) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1552) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:534) at org.apache.crimson.parser.Parser2.parse(Parser2.java:318) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442) at org.jdom.input.SAXBuilder.build(SAXBuilder.java:287) at org.jdom.input.SAXBuilder.build(SAXBuilder.java:650)
512 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 01:27:40 ] >>511 多分、eclipse ではなくプログラムの方に問題がある感じだね。
513 名前:デフォルトの名無しさん [2008/11/30(日) 09:16:51 ] ランダムにリンクが飛ぶスクリプトを拾ったんですが、 新ウィンドウでリンクを開く場合はどうしたらいいでしょうか。 アドレスのあとにtarget="_blank"と入れてもだめでした・・・。 <form> <input type=button onClick="jump()" value="ランダムリンク"> </form> <script> url = new Array(); /* リンク先のURLを好きなだけ記述 */ url[0] = "test0.html"; url[1] = "test1.html"; function jump() { p = Math.round(Math.random() * (url.length - 1)); parent.top.document.location = url[p]; } </script>
514 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 09:30:01 ] >>513 それJavaScriptじゃ。。。 該当スレで聞いて下さい
515 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 09:32:08 ] すれ違いでしたか、すみませんでした。
516 名前:デフォルトの名無しさん [2008/11/30(日) 12:22:00 ] >>509 スレが汚れるだけだからこういうの止めてくれないか?
517 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 16:21:25 ] 汚れるといってもあなたの陰金には負けます
518 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 17:13:56 ] Unix環境などX Windowがない環境でグラフィック処理を行うと エラーになるため、以下の環境変数を指定して実行すると正常に動作するというのを見つけました。 java -Djava.awt.headless=true hogehoge そこで質問させてください。 awtの処理でOSに依存するネイティブな処理が走るけど、 グラフィックをサポートしていないOSではエラーとなるため 上記の設定が必要だと思ってます。 では、上記設定を行うとネイティブで行ってた処理を誰が行ってくれるのでしょうか? Java側にネイティブのグラフィック処理に変わる実装があり、 そちらで処理してくれるのでしょうか? それでしたら、そもそもネイティブな処理を呼び出す必要がないですよね? java.awt.headless=true を指定すると 正常に処理される内部のメカニズムを教えてくださいm(__)m
519 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 18:04:54 ] 内部の実装に興味持つならJAVAやる意味はないな。 SUNの方針だと、一度ソフト上で実装(レファレンス実装)してからshippingするからなんかあるんじゃないか? しかしもともとハードであるものをソフトでやる(エミュレーション)だから速度は遅くても、一応どこでも動くってこと。
520 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 18:13:08 ] java.sun.com/javase/ja/6/docs/ja/technotes/guides/awt/AWTChanges.html#headless
521 名前:デフォルトの名無しさん [2008/11/30(日) 19:37:07 ] すみません。自分自身の限界が来たので質問させてください。 Javaで非常にシンプルなボタンの作成をしてみました。 なぜだか、5番目のボタンだけキャプションが表示されません。 環境はWin+eclipseです。 トラブルシュート、ログはたくさん見たのでその他のなにか考えなければならないヒントなどいただけると た す か り ま す public class Test { public void method(){ int i; Button h[]=new Button [9]; int dx[]={1,2,3,4,5,6,7,8,9}; int dy[]={1,1,1,1,1,1,1,1,1}; String st[]={"aa","ii","uu","ee","oo","か","き","く","け"}; Display display = new Display(); Shell shell=new Shell(display); shell.open(); for(i=0; i<9; i++){ h[i]=new Button(shell,SWT.BORDER); h[i].setBounds(dx[i]*50,dy[i]*30,50,30); if(i!=4){h[i].setText(st[i]);}} while(!shell.isDisposed()){if(!display.readAndDispatch()){display.sleep();}} display.dispose();} public static void main(String[] args){ Test test = new Test(); test.method();}}
522 名前:デフォルトの名無しさん [2008/11/30(日) 19:40:31 ] >>521 追加です。 これは、問題があったコードを非常にシンプルにしたもので、 元のコードは1000行位あるものです。 特段お金儲け関係ではないので(ただの勉強)必死でいつまで、とかの要望はありませんが、 あまりにもシンプルすぎて調べようも無くなったのでお力拝借したいと。 ちなみにC# のスレに誤爆&非礼をわびておきました。 よろしくお願いします。 #てか、どこに問題があるんだろ。Javaのバージョンかなぁ。
523 名前:デフォルトの名無しさん [2008/11/30(日) 19:45:42 ] をっと。利用しているのはSWTです。以下importを import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;
524 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 19:52:26 ] >>521 > if(i!=4){h[i].setText(st[i]);} これじゃね?
525 名前:デフォルトの名無しさん [2008/11/30(日) 21:32:11 ] >>524 www
526 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 21:56:05 ] >>524 激しくわろたw 自分自身の限界が来たって大げさ過ぎw
527 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 21:59:28 ] こんな時代もあったよね と懐かしい気持ちになりました
528 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 01:11:18 ] >>486 ありがとうございます。 どうやらswingWorkerを使用する必要があるそうです。 ここでもうひとつ疑問なんですが、swingWorker<T, V>の、 <>の中身は一体なにを表しているのでしょうか。 swingWorker以外にもどこかで見たことがあるんですけど・・・。
529 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 03:17:25 ] 「Java ジェネリックス」で調べてみて下さい。JDK5からの新文法です。
530 名前:デフォルトの名無しさん [2008/12/01(月) 09:58:16 ] 再帰呼び出しで static int f(int n) if n==0 return 1 else return n*f(n-1) というのを作ってn=3のとき最後の returnに1、2,3と返すと思うんですけど 2や3はf(2)やf(1)の値がコンピュータに記憶されてるの?
531 名前:デフォルトの名無しさん [2008/12/01(月) 12:34:42 ] 俺のコンピュータは意地でも改行しないつもりかwww.... ort final Display display = new Display(); final Shell shell = new Shell(display); String separator = System.getProperty("line.separator"); shell.open(); Text t = new Text(shell, SWT.BORDER); t.setBounds(10, 10, 100, 100); t.append("Hello world\n" + separator + '\n'); t.append("Hello world\n" + separator + '\n');
532 名前:デフォルトの名無しさん [2008/12/01(月) 13:36:37 ] 質問です。 StringクラスのreplaceAll()メソッドに関してなんですが、 正規表現で、特定の文字集合にマッチした場合、 マッチした文字の後ろに特殊な記号を加えたいのです。 replaceAll(pattern, "特殊な記号"); とすると、元の文字を完全に消してしまうので これはどのようにすればいいのでしょうか? 具体的には replaceAll("[abcd]","特殊な記号") で 文字列が、"apple"だった場合 "a特殊な記号pple" となるようにしたいのです。
533 名前:デフォルトの名無しさん [2008/12/01(月) 13:38:12 ] replaceAll("([abcd])", "\\1特殊な記号");
534 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:10:36 ] 正規表現はどこに行けばマスターできますか?
535 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:17:36 ] JDK5.0のWindows版しか使えない状態なのですが、Windowsサービスとして 起動しているアプリケーションに、外部からスレッドダンプを取得する 方法はあるでしょうか。以下の方法までは思いついたのですが、いずれも トレードオフが現在取れない状態になってしまっています。 1. jstack を使う → JDK5.0 では、Linux 版しか無い様でした。 2. jmxremote オプションを付けて jconsole でアタッチ → 取得できるのですが、jconsole の UI の仕様上、全部のスレッドダンプを 取りづらい(左のスレッドを選ぶとその情報が取れる)ので、一度に特定 プロセスのダンプが取れる方法を探しています。 3. StackTrace と言うアプリケーションを使う → adaptj と言う会社の StackTrace を使うと、まさに希望したものが取れるの ですが、実行したい環境がインターネットに繋がらない環境であるため、 使用できないでいます。 できる範囲は、VM の起動引数に変更を加えるまでは可能です。
536 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:21:23 ] ありません。
537 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:33:21 ] VMの起動引数を変えれるんなら、メインクラスを変えられるということだ 自前のメインクラスから専用のスレッドを起動しておき、 何かのトリガに反応して Thread#getAllStackTraces() を出力するようにしておけばいいのではないか
538 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:48:08 ] >>536 そうですか...Linuxだと簡単なのに意外に苦戦して参っています。 >>537 ありがとうございます。 Thread#getAllStackTraces を出力する案は、 別途サーバに手を入れてしまうのが許される場合の案として 次善策にしていました。 この場合はどうせ手が入るからってことで、 サーバアプリなのでそのまま口を設けて出力する案で検討していま
539 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:49:51 ] いまどきLinuxはねーよw
540 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 15:31:49 ] linuxが許されるのは年金もらうまでだよね
541 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 15:58:42 ] なら、おまえらはなに使ってんだよ?
542 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 16:17:43 ] もちろんWindows
543 名前:デフォルトの名無しさん [2008/12/01(月) 16:33:03 ] >>534 www.hellohiro.com/regex.htm
544 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 16:38:18 ] そのサイト、おおお!〜ましたね!っていうのがイヤだ
545 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 18:06:01 ] >>544 てか、 Java初心者向けサイトのほとんどがそんな感じじゃね?
546 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 18:15:56 ] 念願の、Genericとアノテーションとenumに対応したEffective Java第2版が 出たそうですが、おぬしらの中の読んだ方で、感想はいかがですかな? 前書きに書いてある通りの内容ですかな? すでに第1版をenumあたりまで読んでいるのじゃが、 これは第2版に鞍替えして読み直したほうがよろしいかな?
547 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 18:45:16 ] >>545 そんなバナナ
548 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 20:14:44 ] struts2って結構使われてるんでしょうか? 今、一番安定しているフレームワークって何?
549 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:17:35 ] ところでおまいらEclipseとか使いこなせてるの? おれは全然わかんねぇ、普通にプロジェクト作ってコード書いて実行ならできるんだが 全然使いこなしてる感じがしない、というかしてないが。 開発環境って多機能すぎる
550 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:22:04 ] お前らSE、PG?????? やっていけてんの??????
551 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 22:19:57 ] 俺は>>550 が一番心配だ。
552 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 22:20:01 ] >>546 すれ違い?
553 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:23:34 ] >>535 とにかく Ctrl+Break を送ればスレッドダンプするらしいので、Win32 SDK の GenerateConsoleCtrlEvent 関数 で CTRL_BREAK_EVENT を送ればいいはず。 ただしサービスとして起動している java プログラムの標準出力に出ちゃうから、標準出力をファイルか何かに リダイレクトする必要がある。 ここまで書いたけど、そこまでするなら JDK6 にしてもらえるように説得したほうが楽そうだな。
554 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:51:37 ] 式言語の意義とは何なんでしょうか? seacer2の勉強してたらOGNLという言語が出てきました。 調べてみるとJavaEEに出てくるEL式などの仲間で式言語というらしいのですが、 文法見ても目的が理解できません。 web開発において式言語を使う意味というのは JSPでアクションやサーブレットから受け取ったオブジェクトの情報を出力しやすくするため に限ったことですか?
555 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:51:48 ] 以下のオブジェクトをシリアライズしてネットワークで他のパソコンに転送、計算を行い結果を返送させるプログラムを作成しています。 public class Element implements Serializable { double start; double end; int cut; double d; int sigma; int mode; }
556 名前:555 mailto:sage [2008/12/01(月) 23:54:35 ] 続き 送信メソッド try { sock = new Socket(host, Integer.parseInt(port)); } catch (NumberFormatException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } ObjectOutputStream out = null; try { out = new ObjectOutputStream(sock.getOutputStream()); out.writeObject(element); out.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); sock.close(); } catch (Exception e) { e.printStackTrace(); }
557 名前:555 mailto:sage [2008/12/01(月) 23:58:02 ] 以下のメソッドで受信を行っているのですが、EOFExceptionが発生してしまいます。 理由がさっぱりわからず困っています。どのようにすればよいのでしょうか。 try { ois = new ObjectInputStream(sock.getInputStream()); if(ois.readObject() instanceof Element) //計算する要素を受け取った場合 { Element element = (Element)ois.readObject(); element.apply(simu.getRects()); Receive.this.simu.calc(); //計算 } } catch(Exception e) { e.printStackTrace(); } finally { try { if(ois != null) ois.close(); } catch(IOException e) { e.printStackTrace(); } } }
558 名前:デフォルトの名無しさん [2008/12/02(火) 00:02:21 ] ここ if(ois.readObject() instanceof Element) //計算する要素を受け取った場合
559 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:03:04 ] >>555 ois.readObject() instanceof Element の行で オブジェクトを読み込んでるのに その下の行でさらに読み込もうとしてるから
560 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:12:18 ] public static final Object CONS=new Object(); でオブジェクトのインスタンスを定数のように使いたいのですが、 直列化するとインスタンスのメモリアドレスが変わってしまい if (arg==CONS);で比較しても上手くいきません。 古いjdkのためenumを使えずどうすれば良いでしょうか。
561 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:24:45 ] >>560 enumが欲しいならEffective Javaを読んでenumを実装する
562 名前:555 mailto:sage [2008/12/02(火) 00:26:58 ] >>558 >>559 出来ました、有難うございます。
563 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:31:48 ] >>561 その教科書は持ってないんですけど、enumなんてどうやれば実装できるんですか!
564 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:32:48 ] うざいなぁ
565 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:37:15 ] Enumでなくてもフィールドがオブジェクトで定数(final)で一意であればいいので 例えばStringでやってみようかと思ってるのですが難しいです(;ω;)
566 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:50:22 ] >>560 readResolve を実装しろ
567 名前:546 mailto:sage [2008/12/02(火) 02:05:41 ] >>552 なぜスレ違いなのじゃ? Eclipseの話をするほうがよっぽどスレ違いではないかい? うーむ、Effective Java第2版を実際に読んでみた者は まだこのスレに現れないか。
568 名前:546 mailto:sage [2008/12/02(火) 02:08:03 ] >>563 Effective Java第一版に実装する方法が載っているようじゃ。 Type Safe enumでもググって見るとよいぞ。Eclipseのプラグインでも そのようなものが存在するのじゃ。
569 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 02:10:06 ] 読んでる最中。Genericsの境界ワイルドカードは説明読んでもさっぱりだ。 <T extends Comparable<? super T>>って何ぞ……。
570 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 02:15:37 ] Tもしくはそのスーパークラスと比較可能なT Integer (Comparable<Integer>) とか java.sql.Date (Comparable<java.util.Date>) が該当する
571 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 02:24:39 ] <? super T>って if(foo instanceof Bar){ //hoge } みたいな条件分岐がいらなくなるくらいしか思いつかないんだが・・・
572 名前:569 mailto:sage [2008/12/02(火) 02:25:37 ] うーん、わかるようなわからんような。 interface I {} class A implements I, Comparable<I> {...} class B implements I, Comparable<I> {...} static <T extends Comparalbe<? super T>> int compare1(T a, T b) {...} static <T extends Comparalbe<T>> int compare2(T a, T b) {...} void func() { A a = new A(); B b = new B(); compare1(a, b); // OK compare2(a, b); // NG } 既存の定義はなんとか読み解けても、1から自分で定義できなさそーな気が……。
573 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 02:35:19 ] >>567 注文して、到着待ち。俺の国に届くのはいつの日だよorz >>571 実行時じゃなくてコンパイル時に怒られるから良いんじゃないのかな。 Generics使い始めると意地でもキャストを無くしたくなる。
574 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 12:16:35 ] >>570 片方がsqlでもう片方がutilであるぞ
575 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 12:20:06 ] >>572 ドキュメントをよく読むんだ。入門サイトもどこかにある。 Effective Javaを読む前に先にGenerics入門らしきサイトを先に 読んだほうがいいのでは。 たしかに、けっこう混乱するとは思う。 自分で作るの大変だ
576 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 17:22:44 ] >>566 あの〜 意味が分からないですけど
577 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 17:34:05 ] アプレットで六角形を描きたいのですが、drawPolygonメソッドがint型の配列しか引数に 取れないようなのでどうすればいいかわかりません。以下のコードをどう修正したらいいですか import java.applet.*; import java.awt.*; public class hexagon extends Applet { public void paint(Graphics g) { double sqr3 = Math.sqrt(3.0); double[] xPoints = {5, 15, 20, 15, 5, 0}; double[] yPoints = {0, 0, (5*sqr3), (10*sqr3), (10*sqr3), (5*sqr3)}; int nPoints = 6; g.drawPolygon(xPoints, yPoints, nPoints); } }