- 1 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 01:35:28 ]
- 過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド98【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1171787388/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝なく存じます。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 次スレは>>980あたりで。
- 554 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:26:54 ]
- めんどいから、これでいいじゃん
FileWriter fw = new FileWriter("test02.txt", true);
- 555 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:42:22 ]
- >>553
BufferedReader b = null ; FileWriter fw = null; try { b = new BufferedReader(new FileReader("test01.txt")); fw = new FileWriter("test02.txt"); String s; while((s = b.readLine())!=null){ // 略 fw.write(st[0]+","+st[1]+","+nu4); } b.close(); b = null; fw.close(); fw = null ; }catch(Exception e){ System.out.println("ファイル読み込み失敗"); }finally{ try{if(b!=null)b.close()}catch(Exception e){} try{if(fw!=null)fw.close()}catch(Exception e){} } Exceptionのハンドリングは適当だし、動作は確認してないぞ
- 556 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:49:32 ]
- >>554
ファイルがなかったらExceptionがThrowされなかったけ?
- 557 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 14:58:15 ]
- あそっか。じゃあ先頭にorg.apache.commons.io.FileUtils.touch("test02.txt")
かなんかで空ファイル作成追加
- 558 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 16:13:07 ]
- ものすごい勢いで本末転倒だなw
- 559 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 20:31:36 ]
- JMSの仕様について勉強できるサイトや本ってないですか?
できれば日本語で・・・。 オライリーのJavaメッセージサービスは所持してます。
- 560 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 20:43:49 ]
- クラスローダを独自に用意すれば、並行処理で同じstatic変数にアクセスしても値が違う
みたいなことが出来るのでしょうか?
- 561 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 20:51:40 ]
- >>559
仕様はSUNのAPI仕様読むのが一番じゃないでしょうか。 仕様そのものはシンプルでキレイだけど 実装によるクセが大きいので、勉強はそこそこに 実装の調査に入った方が良い気がします。
- 562 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 21:16:56 ]
- >561
利用する側でなく、JMSプロバイダを作る側なため、 仕様をきちんと理解してからでないときついかなと思った次第です。 オープンソースとか参考にするのがいいんですかねぇ・・・。
- 563 名前:デフォルトの名無しさん [2007/03/17(土) 21:16:56 ]
- VISTAでJAVAは使えますか?
- 564 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 21:20:54 ]
- とりあえず使えます
- 565 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 21:31:18 ]
- >>562
であるならなおのことSpecification読むしかないのでは。 あれが最終にして完全(であるべき)ですから。 差しさわりがなければMQ作ることになった理由を聞かせて欲すぃ・・
- 566 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 21:39:02 ]
- > であるならなおのこと
おとこのこなら に読めてしまったので眼科行ってくる
- 567 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 21:42:51 ]
- アッー!
- 568 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:13:19 ]
- SwingでBeanを編集するためのよいバインドツールみたいなものはありませんか?
- 569 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:36:53 ]
- 仕事関係です。SOAという言葉が大好きな人がいまして・・・。
まあまだ作ると決まったわけではないんですが。 英語大嫌いなんでキツイ(;´Д`)
- 570 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:41:34 ]
- SOAと英語にどういう関係が、つーか誤爆か?
- 571 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:43:18 ]
- そあー大変だな
てか別に英語関係なくね?
- 572 名前:デフォルトの名無しさん [2007/03/18(日) 14:45:12 ]
- kajuhome.com/tomcat5.shtmlを見てTomcatをセットアップしているのですが、起動時にはTomcatが起動していません。
起動後、コマンドラインから/etc/rc.d/init.d/tomcat5 start(中でcatalina.sh startを呼んでいます)で起動すると問題なく起動します。 catalina.outを見ると、停止時に 致命的: プロトコルハンドラの一時停止に失敗しました java.net.SocketException: Network is unreachable というエラーが出ています。また、起動時の表示を見ていると、上記のtomcat5より先にhttpdが起動しています。 上記URLには「必ずtomcat→apacheの順で起動すること」とありますので、ここも気になるところです。 以上二点、何かお気付きの点があれば御指摘ください。よろしくお願いします。ちなみに環境は ・CentOS 4.4 ・jdk-1_5_0_11-linux-i586-rpm.binからインストールしたJDK1.5.0_11 ・apache-tomcat-5.5.23.tar.gzから解凍したtomcat5.5.23 ・jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gzからmakeしたmod_jk2.0.4 です。他に必要な情報があれば御指摘ください。
- 573 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:09:04 ]
- >>572
CATALINA_HOMEとかが読まれてないんじゃないか? しかし、/etc/profileを更新するとは強引だな あと、jk2は終わってるぞ
- 574 名前:デフォルトの名無しさん [2007/03/18(日) 15:23:40 ]
- JAVA勉強してるのですが、将来的にもLG3Dを取り敢えずインスコしといたほうがいいですか?それともBistaにしとく?
- 575 名前:572 [2007/03/18(日) 15:29:14 ]
- >CATALINA_HOMEとかが読まれてないんじゃないか?
> >しかし、/etc/profileを更新するとは強引だな 解決策&お勧めの方法などありましたら、「ここを見ろ」でOKですのでご教授ください(;´∀`) ちなみにmod_jkも試してみたのですが、まったく同じ問題が出たのでクリーンインストールしなおしたとです……。
- 576 名前:デフォルトの名無しさん [2007/03/18(日) 15:32:46 ]
- 今eclipseでdbを利用した簡単なアプリケーションを作っているのですが、
eclipseにhsql pluginを導入しました。しかし、 作ったアプリケーションをいざプラウザで表示しようとすると HTTP????? 500 - -------------------------------------------------------------------------------- type ?????? ????? ?? The server encountered an internal error () that prevented it from fulfilling this request. ?? javax.servlet.ServletException: org.hsqldb.jdbcDriver ってエラーが出るのですが。ちなみにDBへの接続は別のクラスがやるようになってます。 解決策分かる方、教えてください。お願いします。
- 577 名前:デフォルトの名無しさん [2007/03/18(日) 15:41:48 ]
- その別クラスからのDBへの接続は大丈夫でした
- 578 名前:569 mailto:sage [2007/03/18(日) 15:56:03 ]
- >570-571
565への返信です。 SOA→JMSという流れらしくて・・・。 で、JMSの仕様書英語しかなさそうなんで面倒だなと。
- 579 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:57:47 ]
- ならまぁ、「SOAだから」じゃなくて単に英語苦手だからだな。
つ エール
- 580 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 16:01:17 ]
- >>576
pc11.2ch.net/test/read.cgi/tech/1147444414/771
- 581 名前:デフォルトの名無しさん mailto:age [2007/03/18(日) 16:13:55 ]
- 今 Sun のサイトから
jdk-1_5_0_11-windows-i586-p.exe をダウンロードしてインストールしたのですが、 bin フォルダ内に javac コマンドがありません。 何か変更があったのですか? javac に替わるコンパイルコマンドはどれでしょうか。
- 582 名前: mailto:sage [2007/03/18(日) 16:26:28 ]
- キーボードから任意の数値nを入力させて、1からnまでの和を表示させるプログラムです。
たとえばnが7であれば、「1+2+3+4+5+6+7 = 28」という具合に表示させます。 本に載っている模範解答だと、この処理部分を int sum = 0; for (int i = 1; i <= n; i++) { System.out.print(i + " + "); sum += i; // sumにiを加える } System.out.println("= " + sum); としているのですが、これだと「1+2+3+4+5+6+7+ = 28」になって、最後の余計な"+"が入っちゃうと思うんです。 そこで、この処理部分を int sum = 0; for (int i = 1; i <= n; i++){ if (i != n){ sum += i; System.out.print(i + "+"); } else{ sum += i; System.out.print(i); } } System.out.println("=" + sum); というふうに修正してみたんですが、これって一般的な方法と言えるんでしょうか?
- 583 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 16:30:10 ]
- Project Looking Glassに参加してる方は2chなんかにいないですよね?
- 584 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 16:41:17 ]
- 仮に居たとしても会話したくないだろうな
- 585 名前:581 mailto:sage [2007/03/18(日) 17:05:34 ]
- JDK のインストールの後の JRE のインストール先を JDK と同じフォルダにしたため
bin が上書きされてしまっていました。 失礼ぶっこきました。
- 586 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 17:38:47 ]
- >>575
解決策はエスパーでもない限りわからん スクリプトにechoでも埋め込んで確認するとかで調べるとかして原因を特定 お薦めは ttp://ichimura.chi.its.hiroshima-cu.ac.jp/webdb/tomcat.html の方法 ただし、内容は少し古いから適時読みかえること jsvcのマニュアルも読んで適切にスクリプトを書き換えること
- 587 名前:572 mailto:sage [2007/03/18(日) 18:45:18 ]
- >>586
アドバイスありがとうございました。結論からいうと >CATALINA_HOMEとかが読まれてないんじゃないか? で大当たりでした。 /etc/rc.d/init.d/tomcat5の先頭にechoを入れると、起動時に環境変数まわりのエラーメッセージがドカンと表示されたので、 先頭に(/etc/profileとはまた別に、フルパス直書きで)環境変数を設定したところ、うまく起動できました。 また、念のためinit.dによる自動起動を停止し、/etc/rc.d/rc.localに記述する方法で明示的にtomcat→httpdと起動するようにしておきました。 大変助かりました。アドバイス、ありがとうございました。
- 588 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 22:02:10 ]
- >>587
RH系なら、起動スクリプトの「# chkconfig」の行に、起動する順番を書けばいいでしょ。 「linux chkconfig 順番」でググってみたら?とりあえず1件見つけてみた。 ttp://www.geocities.co.jp/SiliconValley-Cupertino/9120/startup.html
- 589 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 22:06:08 ]
- >>582
sum+=i;が重複してるからif-elseの外に出した方がいいな。 けどそれ以外はみんなそんな感じに書くと思うぞ。 逆に変態的な書き方があったらぜひ教えて欲しいもんだ。
- 590 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 22:12:10 ]
- for (int i = 1; i <= n; i++) {
sum += i; System.out.print(i); if (i != n) { System.out.print("+"); } }
- 591 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 22:19:27 ]
- java -jar foo.jar としたときにシステムプロパティ java.class.path って
確実に実行モジュールである foo.jar のみが表示されるのかな? 仕様や実行結果を見るにどうもそうらしいんだけど。 絶対パスならそのまま、相対パスなら user.dir を付加すれば Win32 のGetModulePath の代わりになる?
- 592 名前:582 mailto:sage [2007/03/19(月) 00:42:19 ]
- >>589-590
そうですね。その方がスマートですね。 ありがとうございました!
- 593 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 01:44:21 ]
- >>582
まぁ、あえて違う書き方をしたいと思ったら、 int sum = 1; System.out.print(1); for(int i = 2; i <= n; i++ ) { sum += i; System.out.print(i + "+"); } System.out.print(" = " + sum); ぐらいかな? あまりこういう書き方はしないと思うけど・・・。
- 594 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 01:45:29 ]
- ごめん間違った
> System.out.print(i + "+"); System.out.print(" +" + i); に修正
- 595 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 02:16:02 ]
- >>589
普通に for (int i = 1; i <= n; i++) { sum += i; System.out.print(i + (i != n ? " + " : " = ")); } System.out.println(sum); みたいなのを考えたけど、希望してるのならこんなの for (int i = 1; i <= n; i++) { System.out.print(i + " + "); sum += i; } System.out.println("\b\b= " + sum);
- 596 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 09:22:24 ]
- >>595
\bとはマニアックな・・・。 けどこうしてみるとifもないしスマートに見えるな。 機会があれば使ってみよう。
- 597 名前:デフォルトの名無しさん [2007/03/19(月) 14:01:53 ]
- 開発はユニクソ?リヌクス?の方が多い?
- 598 名前:572 mailto:sage [2007/03/19(月) 15:25:20 ]
- >>588
フォロー、ありがとうございます。これでinit.dの下で管理できそうですね。 大変参考になりました。重ねて御礼申し上げます。
- 599 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 21:11:24 ]
- 新人教育でJavaを教えることになりました
知らないやつを基準に変数からクラス、オブジェクトまで教えるのですが これだとすでにJavaやプログラミングを知っている人が退屈してしまうので そいつらむけの適当な自習課題を用意しようと思います。 (簡単なゲームとかメモ帳作成とか) 参考になりそうなページはないですか?
- 600 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 21:40:06 ]
- お前が作れよ
- 601 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:01:06 ]
- ゲームとかメモ帳ってGUI方面だろ。
Webアプリ作らせたほうが実用的かと。
- 602 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:24:57 ]
- Java知ってるやつにはDB使ったアプリを教えろ
- 603 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:29:40 ]
- >>601
知らないやつ基準ということなのでそういう人が大多数という前提だと、 新人研修の自習でWebアプリ作るほどの力があるならそのまま現場投入で たたき上げた方がよほど本人及び会社の為ではないかと
- 604 名前:603 mailto:sage [2007/03/19(月) 22:50:47 ]
- あ、現場投入云々はあくまで技術者として、ね。
社会人としてどうとかはまた別の話。
- 605 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:59:07 ]
- >>599
java.cs.vt.edu/dev/javasound/api/javax/media/sound/sampled/package-tree.html の javax.media.sound.sampled 使った何か
- 606 名前:1/2 mailto:sage [2007/03/20(火) 00:17:04 ]
- import java.awt.*;
import java.awt.event.*; class Awt10{ Frame frame; Button button; TextField text; public Awt10(){ frame = new Frame( "フレーム" ); button = new Button( "クリックするとダイアログ表示" ); text = new TextField(); button.addActionListener( new ActionListener() { public void actionPeformed(ActionEvent e){ new Dialog01( frame ); } } ); frame.add( button, BorderLayout.NORTH ); frame.add( text, BorderLayout.SOUTH ); frame.pack(); frame.setVisible( true ); } public static void main( String[] args ){ Awt10 awt10 = new Awt10(); } }
- 607 名前:1/2 mailto:sage [2007/03/20(火) 00:21:12 ]
- class Dialog01{
Dialog dialog; public Dialog01( Frame frame ){ dialog = new Dialog( frame, "ダイアログ", true ); Label label = new Label( "ラベル" ); dialog.add( label ); dialog.pack(); dialog.setVisible( true ); } } これでコンパイルすると、 Awt10.java:15: <anonymous Awt10$1> は abstract でなく、java.awt.event.ActionList ener 内の abstract メソッド actionPerformed(java.awt.event.ActionEvent) をオーバ ーライドしません。 public void actionPeformed(ActionEvent e){ こういうエラーが出てきてしまいます。 javaの入門本のコードそのまま打ち込んでいるんですが、どうしたらいいんですか?
- 608 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 00:26:22 ]
- > actionPeformed
performed?
- 609 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 00:36:55 ]
- >>607
>class Awt10{ これ本当?コピペ間違ってない? このソースであのエラーが出るとは思えんが…
- 610 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 00:40:10 ]
- うわーありがとうございました。
performedのスペルが間違ってました。恥ずかしい。 >>609さん コピペは間違いはないと思います。。。 こういうエラー見たことなかったのでスペルちゃんと見てませんでした
- 611 名前:609 mailto:sage [2007/03/20(火) 00:49:21 ]
- すまん。勘違いだった(汗)
普段の自分のコーディングスタイルと違うので(と言い訳してみる)
- 612 名前:デフォルトの名無しさん [2007/03/20(火) 10:26:06 ]
- *=ってどういう意味?
- 613 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:27:42 ]
- a = a * b; と a *= b; が同じ
- 614 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:38:18 ]
- さんくす。
- 615 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 11:38:00 ]
- a *= bってスタックに積む数が少ないから実行速度a = a * bより早いのかな?
- 616 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 11:44:40 ]
- >>615
> スタックに積む数が少ない そもそも、この違いがない、はず。
- 617 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 12:44:50 ]
- 単なる表記法の違いだよね…?
- 618 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 13:04:47 ]
- a #= b と a = a # b の違いは、aが評価される回数。
x[func()] += y; と x[func()] = x[func()] + y; だとfunc()の性能によっては大きな速度差が出ることがあるし、 func()が副作用を持つ場合は動き自体が違う可能性もある。
- 619 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 13:18:13 ]
- a, b をメタ変数と考えるなw
- 620 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 14:37:53 ]
- 完全なインタープリタならいざ知らず、バイトコードまではコンパイルしてるのだから
式の評価順の解析(スタックや逆ポーランドといった)はコンパイル時におわってる。 より短くコードを書くことを良しとしていたCの文法を受け継いでるだけだ。
- 621 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 16:16:30 ]
- >>620
要するにコンパイラが勝手に最適化するから気にするなでおk?
- 622 名前:デフォルトの名無しさん [2007/03/20(火) 19:12:20 ]
- WebappClassLoaderをサーブレット側から手動で動かすにはどうしたらいいですか?
- 623 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:48:28 ]
- eclipseでワークスペース使ってコンソールから窓を開いて3DCGを表示するアプリ作ったのですが
それをアプレットに落とし込むにはどうしたらいいでしょか。 やり方教えて下しア
- 624 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:52:01 ]
- C/C++ だと _ で始まる名前や場所を問わず __ を含む名前はシステムで予約されてるけど、Javaではどうなん?
- 625 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 21:09:19 ]
- _については制限なし。
$も使えるが、機械生成されたものなど、用途を制限されている。 ただし、「それが望ましい」程度の縛り。
- 626 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 21:09:25 ]
- >>624
Character#isJavaIdentifierStart も Character#isJavaIdentifierPart も true を返すから '_' 自体は使える。 _ で始まる名前とか __ で始まる名前とかで、予約はされてないはず。 コーディング規約で使わないのを推奨してたか、は忘れた。
- 627 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 21:16:04 ]
- >>625-626
サンクス。自分でそんな名前を進んで使うつもりはないけど、 いま弄ってるソースでバンバンそんな名前が使われてたから気になってた。
- 628 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 21:41:28 ]
- >>617
どこにレスを付けるのか迷ったけど、ここにレス付けるわ。 例A short x = 0; int i = 123456; x += i; // エラーなし x = x+ i; // エラー 精度が落ちている可能性 例B Object o = "Hoge"; String s = "Test"; o = o + s;// エラーなし o += s; // エラー 互換性のない型 元ネタ 書籍「Java Puzzlers」
- 629 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:06:08 ]
- >x += i; // エラーなし
なんで?
- 630 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:18:46 ]
- JLS15.26.2を読んでみた。
前者は、複合代入演算 E1 op= E2 の意味するところは E1 = E1 op E2 ではなく、 E1 = (T)(E1 op E2) // TはE1の型 すなわち、複合代入演算子は暗黙のうちに代入される側の方へのキャストを 行うというのがポイント。 後者は、複合代入演算子が使えるのはプリミティブ型/そのラッパー型、そして +=については左辺がStringの場合のみ、文字列連結が行われる。 (右辺はどんな型でもよい)
- 631 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:22:58 ]
- >>629
例えば byte b = 0; b += 2; // 2 は int型 とかがコンパイルエラーになったらウザいでしょ。
- 632 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 23:34:47 ]
- JPanelにCanvasをはりつけてCanvasにイメージを描画しようと思ってます。
JPanel内に↓のようなMyCanvasクラスを定義してpaint()を実装しました。 private class MyCanvas extends Canvas { public void paint(Graphics g) { g.drawImage(resultImage, 0, 0, null); // resultImageはJPanelのインスタンス変数 } } JPanelでresultImageが変更されたときにmyCanvas.repaint()を呼んでいるのですが Canvasのイメージが更新されません(一度、最小化して戻すと表示されてます) 再描画がうまくいってないようなのですがどのようにすればよいでしょうか。
- 633 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 23:39:03 ]
- - MyCanvasはCanvas(AWTコンポネント)を継承せず、代わりにJPanelを継承
- paintではなくpaintComponentをオーバーライド でどうか?
- 634 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 23:51:18 ]
- アドバイスありがとうございます。
ただそれでもだめでした。 paintComponent()でSystem.out.println()やるとちゃんと表示されてるのでrepaint()で メソッドは呼び出されてはいるようです。 ただはりつけたJPanelに表示はされません・・・ もとのパネル(MainPanel)では setLayout(new BorderLayout()); imagePanel= new MyPanel(); add(imageCanvas, BorderLayout.CENTER); ではりつけてます。
- 635 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 23:52:10 ]
- add(imagePanel, BorderLayout.CENTER)
の間違いでした
- 636 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 23:58:52 ]
- 自己レスです
はりつけたMyPanelのpaintComponent()にsuper.repaint()を入れたらすぐ再描画されました。 貼り付け元のJPanelも再描画する必要があるってことでしょうか・・・
- 637 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:02:58 ]
- 関係ないかもしれないけど、
paintComponentでsuper.paintComponentは呼んでる?
- 638 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:19:55 ]
- 呼んでます・・・
JFrameの上にJPanelを貼り付けた場合は、paintComponent()ですぐ再描画されてたんですが、今度はJPanelの上にJPanelを貼り付けたからかと疑ってるんですが、関係ないかな。
- 639 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:25:58 ]
- 超初心者です。
本を見ると 「swingはAWTと異なり、コンテンペインを取得し、そこにコンテンツを配置する。」 というように書いております。 で、そのとおりgetContentPane()してaddしたらもちろん上手くいきました。 流れとしてはこんな感じで。→new JFrame().getContentPane().add(new JPanel()); その後もしかしてと思って、 new JFrame.add(new JPanel()) ってやっても普通にうまくいきました。 コンテンツペインを取得する必要ってあるんでしょうか?
- 640 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:35:17 ]
- >>638
自己レスですが g.drawImage(resultImage, 0, 0, this); で解決したようです。null->thisにしました。
- 641 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:37:44 ]
- >>639
最近のJFrameでは不要。必要に応じて内部でgetContentPane()した先に 要求をたらい回ししてくれる。
- 642 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 00:41:07 ]
- java.sun.com/j2se/1.5.0/ja/docs/ja/guide/swing/1.5/index.html#swingMajor
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4753342 だな。
- 643 名前:639 mailto:sage [2007/03/21(水) 00:48:04 ]
- おお、、ありがとうございます。
getContentPane()は面倒だけどswingの構造を理解するのに役立ってたので ちょっと複雑な気分です。
- 644 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 13:28:38 ]
- jarファイルからカレントディレクトリにある任意のJDBCドライバを読み込ませるようにしたいのですが、
MANIFESTのクラスパスには何と記述すればよいのでしょうか? .や*.jarでは認識しませんでした。 直接名前指定 or jre/lib/extにドライバを格納するしかないのでしょうか?
- 645 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 13:39:51 ]
- 記述部さらしてみ
- 646 名前:644 mailto:sage [2007/03/21(水) 13:49:58 ]
- Manifest-Version: 1.0
省略 Class-Path: *.jar xxxx.jar xxxx.jar Manifest-Version: 1.0 省略 Class-Path: . xxxx.jar xxxx.jar という感じです。記述の仕方に問題ありますか?
- 647 名前:ひょこたんだお(^ω^ ◆E9k1wjKgHI mailto:age [2007/03/21(水) 16:21:36 ]
- ごめんなすm(^ω^#)m
static Class forName(String className) の使い方がわかんなひ(;ω;)おっおっお 簡単なソースをいくつかキボンヌッ (#^ω^)ノたのんだうお
- 648 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 16:43:35 ]
- >>644
必要なものを明示的に指定するという観点から、 ワイルドカードは使えないんじゃないのかねぇ。 java.sun.com/javase/ja/6/docs/ja/technotes/guides/jar/jar.html#Main%20Attributes 使えるとは書いてない。使えないとも書いてない。
- 649 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 03:33:29 ]
- >>647
ここの ttp://blog.goo.ne.jp/akubi_2005/m/200601 Mainクラスがいっぱいの時 にソースがあった。
- 650 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 10:34:01 ]
- 独学で苦戦している超初心者です。
自分でもいろいろ調べてみたのですが、困り果てて皆さんのお力に頼ることになりました。 今、コマンドラインに数字を一行で 10,24,35,40 のような形で入力させてそれぞれの数字を表示させるものを作っているのですが、コンパイルをして実行までは出来るのですが、数字を入力したあとにエラーが出ます。 エラーメッセージをググってみたのですが、検索には引っかかるものの「これだ!」というものが見つからなかったのでココに質問させていただきました。 以下にコードの一部とエラーメッセージを記載します。 public static void main(String[] args) throws IOException { int input[]; System.out.println("数列はカンマ区切りの文字列で入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String numbers[] = str.split(","); int i=0; input = new int[i]; while(i < numbers.length){ input[i] = Integer.parseInt(numbers[i]); System.out.println(i + "つめは" + input[i]+ "です。"); i++; } } 以下エラーです。 java.lang.ArrayIndexOutOfBoundsException: 0 at Test.main(Test.java:28) Exception in thread "main" *ココでいう28というのがコードの28行目であれば input[i] = Integer.parseInt(numbers[i]);が28行目にあたります。 どなたか、お助けください。
- 651 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 10:39:17 ]
- > int i=0;
> input = new int[i]; だれが見てもここだ
- 652 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 10:40:31 ]
- >650
右辺の numbers[i] ではなく、恐らく input[i] から出ている例外かと。 int i=0; input = new int[i]; この時点で input[] の要素数はゼロになっているが それ以降 input[] の要素数を増やしていない以上 input[] の要素数はゼロのままだ。 input = new int[i]; を input = new int[numbers.length]; にしてみたら?
- 653 名前:650 mailto:sage [2007/03/22(木) 11:07:57 ]
- >>652
どうもありがとうございます!解決しました! 答えだけでなく、どこがどのように間違っているかまで答えていただいて 大変勉強になりました。
- 654 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 13:47:44 ]
- これってどうよ?
ja.wikibooks.org/wiki/Java
|

|