1 名前:デフォルトの名無しさん [2008/01/13(日) 00:25:22 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下の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質問・相談スレッド110【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1197710566/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980 あたりで。
652 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:13:19 ] IE だと何が動かないと?
653 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:14:05 ] IEってLiveConnect使えなかったっけか?
654 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:21:40 ] >>645 AppletContext#showDoculent(URL, String) で、 ターゲットに "_self" 使えば再読み込みできんじゃね?
655 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:25:06 ] ≫ doculent
656 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:17:51 ] IEはActiveXScripting。NNはLiveConnect。
657 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:48:06 ] ActiveXScripting て単なるスクリプティング環境で接続仕様じゃないんだけど。 Sun の Java Plug-in ドキュメントでも使い分けてないし、ベースが Netscape の LiveConnectにあわせたインターフェースなんだから LiveConnect で良いじゃん。
658 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:55:51 ] AWT で言うところの Canvas って Swing で JPanel 使えば良いんですかね? コンポーネント配置するんじゃなくて自分で描画する奴。
659 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:28:02 ] JPanelでもいいがJComponentでもいい paintじゃなくてpaintComponentをオーバーライドすること
660 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:39:07 ] >>657 一人でそう思っとけばいいだろ、いちいち騒ぐことでもない
661 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:40:09 ] (´,_ゝ`)プッ
662 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 19:54:28 ] 言語仕様3版から導入されたコンストラクタ終了時のfinalフィールドの可視性の保証は、 this が漏洩されると保証されなくなるって聞いたけど、 コンストラクタがオーバライド可能なメソッドを呼び出すことについては、どう扱われているん? おしえてエロイ人
663 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 20:01:06 ] 普通に未初期化の null とか 0 とかの値で参照してしまうだけじゃね。
664 名前:デフォルトの名無しさん [2008/02/02(土) 02:12:51 ] JNDIについてわかりやすいサイトがあればおしえてくれませんか。 EJBの勉強で別サーバで動くEJBを動かしたいんですが、JNDIの設定 がわからなくてエラーがでます。
665 名前:デフォルトの名無しさん [2008/02/02(土) 02:47:54 ] >>664 もうちょっとエラーの内容を細かく書いてみるべし。
666 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 04:10:02 ] 昔の Java からどう変わってきたかざっくり書いてある HP ないですか?
667 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 04:24:20 ] >>666 こんなん? まぁキーワードから先は自分で調べれ lab.moyo.biz/references/java/version.xsp lab.moyo.biz/references/java/history.xsp
668 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 11:21:11 ] 質問なんですけど・・・アメーバビジョンとかの GOOD やら BAD を選ぶフォームあるじゃないですか? あれで押しても動画の視聴が遮られないで反映するのって何で実装してるのですか?
669 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 11:23:59 ] web板池
670 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:16:17 ] そうします。失礼スマスタm (_ _) m
671 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:52:45 ] iアプリスレから誘導されました iアプリでTextBoxに入力する時には一度決定キーで文字入力状態にしますが、 KeyPressedでキーの数字を順次読み込ませてTextBoxに入力させたいのですが、 方法がいまいち分かりません。 public void KeyPressed(int key) { text.setText(text.getText() + (key)); } で良いのでしょうか?ご教示願います。
672 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:28:49 ] 固有のAPIはここに誘導してもどうしようもないと思うんだが。
673 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:40:39 ] >>671 int key が数字ボタンに表示されてる数字(1とか2とか)ならそれで大丈夫。 iアプリのAPIについては良くわからないので別の問題なら私は無理。 というか、〇〇で大丈夫ですか? と聞くぐらいなら、試せばいいじゃないか、と。 「△△になるはずだったんだけど、□□と表示されてしまう」というなら、 解決法なり誘導なり、色々手伝えることがあるとは思うのだが…
674 名前:671 mailto:sage [2008/02/02(土) 16:16:25 ] >>673 質問の仕方が悪く、大変申し訳ありませんでした。 上記のソースを使って編集不可に設定したTextBoxに 入力できるようにしているつもりなのですが、 TextBoxには数字が入力されません。 どうすればよいのでしょうか。
675 名前:デフォルトの名無しさん [2008/02/02(土) 16:34:08 ] Javaアプリケーションを実行形式で配布する方法ってありますか? どこかのスレで話し合われていたら、誘導お願いします。 なんか、過去ログにはあったんですが、 現行スレなさそうで・・・。
676 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 16:50:47 ] >>675 ダブルクリッカブルでいいのかそれともネイティブな実行可能ファイルを吐きたいのかによる。 ダブルクリッカブルでいいならjar生成するときにマニフェストでMain-Class指定。 ネイティブならjava, exeなどで検索。
677 名前:デフォルトの名無しさん [2008/02/02(土) 17:22:24 ] 最近、ここ一年くらいJava使ってないんだが、 最近のJavaの近況ってどうよ? SpringとかAjax周りとかO/Rマッピングとか、StrutsとかRoRのJava版とか 昔聞いた記憶があるんだが そのほか新しいトピックがあるとしたら今は何よ?
678 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:29:28 ] WicketいいよWicket
679 名前:デフォルトの名無しさん [2008/02/02(土) 17:31:28 ] 劇団四季のあの芝居か?
680 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:28:36 ] ちょいとパッケージについて質問したいのだがコンパイラ時に classファイルが1つしか出てこないのだが(5つのファイルで構成されている) これは何故なのだろうか・・・。ちなみにコンパイルは通った。 packageの名前が違うというジョークは無い。 ちなみに参考書についていたパッケージのプログラム(4つのファイルで構成) は普通に通って4つ分のclassファイルが出来たのだが。
681 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:41:53 ] >>680 javac だと、コンパイルしたクラスが直接使用してない 無関係なクラスは自動的にはコンパイルされないけど、 そーゆー話じゃなくて?
682 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:59:55 ] >>681 あ、もしかしたらそれかもしれない。回答thx。
683 名前:デフォルトの名無しさん [2008/02/02(土) 21:08:36 ] 例えば計算アルゴリズムを作ってランチャー形式で計算させるようなアプリケーションを作る場合 追加のアルゴリズムをモジュールのように取り込んで別々の計算をさせるようにするには全体をどんな構造にすれば いいのか 何かコツみたいなものあります?
684 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:12:27 ] ttp://www.raw-paradise.com/
685 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:41:23 ] どうでもいいことで恐縮なんですが、java.util.CalendarのMonthって、なぜ0からなんでしょう? 年はおろか、日すら1から始まるのに、月だけ0-11にしたのかわかりません。 一通り調べたのですが、なかなか出てこなかったので、知っている方いらっしゃれば教えてください。
686 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:48:12 ] >>685 月は数字じゃなくて、名前がついてるからじゃね? 曜日も0からだし。
687 名前:685 mailto:sage [2008/02/02(土) 23:49:24 ] と、書いた矢先にそのものズバリの答えを見つけました。 スレ汚し失礼しました。 # 以下チラ裏 # 後続のために念のため見つけたURL書いときます # JavaFAQ: Date / Calendar # ttp://javafaq.jp/S100.html
688 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:50:29 ] >>686 すいません、回答ありがとうございます。 その通りでした。
689 名前:デフォルトの名無しさん [2008/02/03(日) 01:40:07 ] >>679 それはウィキッド
690 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 04:20:11 ] わかりにくいボケにわざわざ突っ込んであげる>>689 に全俺が感動。
691 名前:デフォルトの名無しさん [2008/02/03(日) 16:03:37 ] 664です。質問内容がが不明瞭でした。 EJBを使用する際に、 ObjHome objHome = (ObjHome)context.lookup("java:comp/env/ejb/test.ObjHome"); でhomeを取得してくるのですが、 これってリモートでEJBをCALLするときにEJBが存在するサーバIPや ポートの指定などしていないのですが、何故callできるんでしょうか。
692 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:30:23 ] >>691 ・InitialContext.lookup()の引数に環境情報を渡す ・jndi.propertiesにホスト情報を記述する ・APサーバのJNDIサービスにエイリアスを設定する 上記のどれか。 何もなければ同一ホストから検索される。
693 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:26:01 ] 質問させて下さい。 Object obj = new Object() { ... } こういう文法が理解できません。 中括弧の中では、何をしているのでしょうか。 コンストラクタを定義するのと同時に、 インスタンスを作成している感じでしょうか? メソッドに与えられるのは引数だけだと思っていたので、 それ以外の何かを同時にしているというのがよくわかりません。 この書き方の概念を教えてください。 出来れば言語仕様上で、こういう記法がどこに書いてあるかの ポインタも合わせて教えていただけると嬉しいです。 (さらに言えば、日本語で) こういう書き方をなんと呼ぶのかも知らないので、検索もできず……。 この書き方は、例えば ThreadLocal クラスの API の 1.4 以降で、使い方の説明に出てきます。 sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/ThreadLocal.html
694 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:28:20 ] >>693 匿名クラスでググれ
695 名前:693 mailto:sage [2008/02/03(日) 17:33:48 ] >>694 ありがとうございます! ぐぐって無事に正体がわかりました!
696 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:34:30 ] >>676 ありがとうございます。 ダブルクリックで起動できればいいかなと思っていますので、 ちょっと試してみます。 .batファイルを作ったり、 ショートカットで作ったりしていましたが、 それって、環境変わったらだめくさいきがしまして・・・。
697 名前:868 mailto:sage [2008/02/03(日) 19:50:23 ] >>869 回答ありがとうございます。 ProjectはBuild automatically clean にチェックが入っています。 しかし新しく作成したディレクトリがTomcatで表示されません。 webapp直下にjsp-xxxというフォルダを作ったのですが。
698 名前:868 mailto:sage [2008/02/03(日) 20:00:04 ] 誤爆しましたorz
699 名前:697 mailto:sage [2008/02/03(日) 20:16:20 ] 697の質問ってどこですればいいのでしょうか?orz 質問先でスレ違いといわれてしまいました。
700 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 20:32:45 ] それだけで状況が解るエスパーを探しているのかい?
701 名前:697 mailto:sage [2008/02/03(日) 20:52:24 ] >>700 回答ありがとうございます。 あと何を書いたらよいでしょうか?
702 名前:697 mailto:sage [2008/02/03(日) 21:38:08 ] くだスレで聞いてみます。
703 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:56:30 ] エスパー頼りならどこで聞いても同じだろ
704 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 22:25:39 ] >>703 あとは何を書いたらいいのかわかりません。 何を書いたらよろしいでしょうか?
705 名前:デフォルトの名無しさん [2008/02/03(日) 23:52:19 ] java.lang.Process#waitFor()で永久ブロックになってしまうことがあるので タイムアウトを設定して回避したいのですが、 タイムアウト付のwaitFor代替の方法ってあるのでしょうか? いちいちTimer設定して破棄するしかないのだろうか・・・
706 名前:デフォルトの名無しさん [2008/02/04(月) 00:22:23 ] >>687 Java FAQも古いな。 Java5以降になってから解決した問題が未だに載っている。 Java5以降の開発では有用性が弱冠下がっている。 Java6以降の対応版Java FAQを作るべき時期に来ているのだろうか? それとも、すでにそれに相当するサイトによって置き換えられてしまったか?
707 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:22:26 ] final Process proc = Runtime.getRuntime().exec("/bin/shine"); Thread t = new Thread(){ public void run(){ try{ proc.waitFor(); } catch(InterruptedException ex){/* */}} }; t.start(); t.join(5 * 1000); if(t.isAlive()){ proc.destroy();}
708 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:24:31 ] >>690 www.shiki.gr.jp/applause/wicked/ こいつよ >>678 はWicket 劇団四季でやってるのはWicked スペルが一つ違い。 これは面白いミュージカルなんだろーか >>678 のおかげで見たくなってきた
709 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:27:08 ] >>702 誤爆してるっていうから、レス番が>>898 と未来へ飛んでるわけな? 今のところ、>>898 のレスが無いから、 元の質問も今の君の質問からも、君が何をしたいのか わからないんだ。情報を出してもらわないことには、質問には 答えられない。エスパーする以外では
710 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:29:17 ] >>707 ありがとうございます。 結局waitForのタイムアウト指定版っていうのはないみたいですね…
711 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:36:30 ] >>706 こういうまとめ系って Wiki とかじゃないと管理人がヘタったら終わりなんだよね。 他人が勝手にコピペして引き継ぐわけに行かないし。Wiki 立てるのって簡単なのかな? サーバリソース余ってるからやっても良いんだけど。
712 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:52:55 ] すみません。 >>709 アドバイスありがとうございます。そのとおりですね。 apache-tomcatとEclipseを使っています。 EclipseにSeaser2プラグインを入れました。 Churaプロジェクトを新規作成、 デフォルトのindex.jspがtomcatで表示されることを確認(localhost) で、webapp直下にディレクトリを作成してファイルを置きました。 でコンテクスト定義の更新をかけたのですが、 作成したディレクトリが見えません。 ProjectはBuild automatically clean にチェックが入っています。 おそらくweb.xmlを直さないといけないのでしょうが どこを直したらいいか見当がつきません。 ネットも探してみましたが分かりませんでした。 よろしくお願いいたします。
713 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:57:20 ] Eclipseの外でディレクトリ作って、Eclipse側で更新かけてないというオチは俺は良くやる。
714 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 01:03:09 ] このスレのWikiの更新具合も微妙
715 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 01:20:40 ] >>713 回答ありがとうございます。 Eclipseの中でディレクトリを作っています。
716 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 03:36:48 ] 質問ですノ リファレンスの本ってあったほうがいいでしょうか? ワザあり!逆引き速引きリファレンスJavaってのがいいって聞いたのですが どうなんでしょうか?
717 名前:デフォルトの名無しさん [2008/02/04(月) 10:11:33 ] それくらい自分で考えろ。人に聞くことじゃない
718 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:30:47 ] >>711 Wikihouseに立てるのは簡単だよ。 これ使う手もあり ja.wikibooks.org/wiki/
719 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 17:32:20 ] >>716 まず本屋でパラパラその本を捲ってみろ。
720 名前:デフォルトの名無しさん [2008/02/04(月) 19:44:11 ] パラパラの本か 見た事無いなあ
721 名前:デフォルトの名無しさん [2008/02/04(月) 19:50:11 ] >>692 サンクスです。 リモート呼び出しでも何の設定もしていなければ同一サーバ上のEJBを探しにいく ということですね。 同一サーバ上で動かしていますが、 Context initial = new InitialContext(); Object objref = initial.lookup("NewSessionRemote"); で、lookupのところで javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial が出ます。何か設定しろということらしいのですが・・・
722 名前:デフォルトの名無しさん [2008/02/04(月) 21:05:25 ] 初めまして。Javaを最近になって勉強し始めた者です。 サンプルプログラムを探していて、このようなサイトにたどり着きました。 www.catch.jp/program/java/ ページ上部の「021: 10個の点が3-Dで移動する」のソースコードをコンパイルすると classファイルが3つ出現しました。 使い方がわからなかったので、検索してみると「jar」コマンドで複数のclassファイルを結合できると知り、 試してみたのですがなかなかうまくいかないので、皆様のお力をお借りしたいです。 jarファイル作成についてはこのサイトを参考にさせていただきました。 www.tohoho-web.com/java/other.htm このような場合にブラウザでアプレットとして動かすにはどうすればよいのでしょうか。 よろしくお願い致します。
723 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:05:25 ] 失礼します。 for(int i=0;i<numChips;i++){ mapChipImages[i]=createImage(chipSize,chipSize); int x=i%numChipsInRow; int y=i/numChipsInRow; Graphics g=mapChipImages[i].getGraphics(); g.drawImage(mapChipImage,0,0,chipSize,chipSize,x*chipSize,y*chipSize,x*chipSize+chipSize,y*chipSize+chipSize,null); } numChips=64,chipSize=32,numChipsInRow=8です。 と、このようなものがあるのですがこちらの5行目(Graphics g=...)にて Exception in thread "main" java.lang.NullPointerException というエラーが発生してしまい困っております。 ttp://javagame.main.jp/index.php?FrontPage#rd9af24b こちらのマップエディタの描画処理をrepaint();ではなく基礎-アクティブレンダリングで紹介されているものに 置き換えようとしたのですが上手く行かず困っています。 よろしくお願いします。
724 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:18:51 ] マップエディタをアクティブレンダリングにして何の意味があるんだ?
725 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:25:43 ] >>724 ごめんなさい。しっかりと書くべきでした。 ttp://javagame.main.jp/index.php?FrontPage#rd9af24b で紹介されているマリオ風アクションゲームにてマップエディタを使い記録したものを 読み込ませるために使いたいのです。なので本来はマップエディタのマップを読み込み 描画するというところだけを抜き出せばよいハズなのですがどうも上手く動かなかったので 質問した次第です。ご迷惑をお掛け申し訳ありません。
726 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:27:21 ] ついでに答えるか。 javaはパッシブレンダリングだからアクティブレンダリングするときは自分でバッファ管理しないとNPE出るけどそれじゃない? ttp://homepage1.nifty.com/algafield/JavaGUIFaq19j.html#three4
727 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:30:29 ] >>725 表示させるだけならアクティブレンダリングの意味ない
728 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:43:42 ] >>726 まだ、私は日が浅いため理解するのに時間はかかりそうですが 頑張って理解してみようと思います。 >>727 そうなのですか。しかし、そうだとしても一枚のグラフィックを複数に分けて 使用するというのは今後も使いそうなのでできれば習得しておきたいと考えたのです。 実際、使う画像を一枚一枚分けて保存していては管理も大変だと思ったので。
729 名前:デフォルトの名無しさん [2008/02/05(火) 00:31:24 ] 解放したら自動的にnullになりますか? これまでずっとCだったので、JAVAはよく分かりません。 www.asahi-net.or.jp/~ns9k-mr/csproject/jdbc_source/mvc.html の }finally{ try{ if(rs != null) rs.close(); の部分です。 rsにnullを代入している記述は見つかりませんでした。 JAVAでは一般的に、*.close()すると、*はnullになるように クラスが設計されているのでしょうか?
730 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:43:22 ] >>729 > JAVAでは一般的に、*.close()すると、*はnullになるように ならないよ。
731 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:47:27 ] >>729 * がnullになる、という状態が上手く理解できていないので、Javaの方だけ説明します。 closeの内部で何をしているかについては実装しだいですが、 API の説明を見る限りでは、「JDBCリソース」を直ちに解放するようです。 try文の外、宣言部分で null 代入してます。 nullチェックをしているのは、値が入る前に例外が発生した時を想定しています。 ヒープからの解放は、GCにお任せなので、制御できません。
732 名前:デフォルトの名無しさん [2008/02/05(火) 01:13:45 ] >>730 >>731 それならfinallyで if(rs != null) rs.close(); こんなことが書いてあるということは、処理がうまくいった場合は rs.close();が実行されて、その後にtryを抜けるところで finallyによってもう一度rs.close();が実行されようとする悪いソースなのでしょうか?
733 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:26:31 ] close() は 2 回以上呼んでも問題ないという Connection の仕様だから問題ない。 ただそのサイトのソースの書き方 }finally{ try{ if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close(); }catch(SQLException se){ se.printStackTrace(); } } とか文字列連結で SQL パラメータ追加したりとかウンコすぎ。
734 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:29:19 ] >>733 >}finally{ >try{ >if(rs != null) rs.close(); >if(stmt != null) stmt.close(); >if(con != null) con.close(); >}catch(SQLException se){ >se.printStackTrace(); >} >} なにがいけないの? 一個目で例外が出ると全部コケる所?
735 名前:デフォルトの名無しさん [2008/02/05(火) 02:04:48 ] >>733 Cでよくあるclose()のように、そのclose()も2回呼んでもエラーにならないと 想像してはいましたが、Cやってる人なら普通はclose()したらその直後にNULL入れるから そういうソース見るとウンコかと。 でもJAVA知らないのでclose()の内部でnullする処理があるのか気になりました。
736 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:15:09 ] > Cやってる人なら普通はclose()したらその直後にNULL入れる そんなことしたことない。
737 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:22:06 ] 文字列を返すというクラスbを作りました。 bは引数が1つあって、引数に与えられた文字の手前に"f"を挿入した文字を返します。 結果は"fh"となることを期待しました。 期待通りになるように修正していただけませんか? public class a { public static void main (String args[]) { String g = b("h"); System.out.println("Hello World!!"); } } public class b { b(String c){ d(c); } private String d(String c) { String e = new String("f" + c); return e; } }
738 名前:デフォルトの名無しさん [2008/02/05(火) 02:25:07 ] >>735 それぞれの変数に値入れる前に例外発生してfinallyブロックに行く可能性があるからそういうコードになる。
739 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:25:30 ] Javaの人でも close 直後に null を入れて大丈夫です。 但し、最終的な解放は GC 任せですので、あしからず。 Javaの場合は、裏でOSネイティブなリソースを使ってる場合があって、 明示的に解放してあげないと、何時までも占有する可能性がある。 特に、close はそういうことに関係してるかと。
740 名前:デフォルトの名無しさん [2008/02/05(火) 02:27:28 ] >>737 まずコンパイル通せよ。 まぁそのままだと実行しても"Hello World!"としか表示されないだろうが。
741 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:30:15 ] ローカル変数なら、nullを入れてもあまり意味がない。 フィールドや、外部に晒した変数なら、nullを入れるのもいいかもしれない。
742 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:32:36 ] >>734 その通り。トランザクションの不整合などで rs.close() が例外になるとステートメントや コネクションがクローズされない。 >>735 大きな try-finally 節の中で何度もオープン/クローズを繰り返すような時はクローズ後に null を代入して、finally 節の close() は例外発生時の大域的な保障と位置づけることも あるが、そのソースのように最後に 1 度だけやれば良いようなときは最後の finally に 任せてわざわざ try 節内ではクローズしない。一回目の close() で失敗したときの予備 としてもう一度試行する意図かもしれないが、DB の問題はもう一度やってうまく行くという ものでもないし。つーかそのページの趣旨は JDBC コーディングどうあるべきかじゃない んだからそんなお作法的なところは適当に読め。
743 名前:デフォルトの名無しさん [2008/02/05(火) 02:36:15 ] >>738 それはエラーが発生した場合ですよね。 正常な場合にclose()を2回実行しようとするのはウンコだと思います。 >>739 JAVAは解放をGCがやってくれるらしいですが、Cと違って やってくれるのはnewに対する解放のみなんでしょうか?
744 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:39:57 ] >>743 スタックには参照しか置けねーよ アホ
745 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:42:28 ] >>740 コンパイルしましたがまだ分かりません。 ↓a.java public class a { public static void main (String args[]) { String g = new String(""); // g = b("h"); コメントアウトしたらコンパイルできました。 System.out.println(g); } } ↓b.java public class b { b(String c){ d(c); } private String d(String c) { String e = new String("f" + c); return e; } }
746 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:43:43 ] そのソース、シャットダウンシーケンス入ると最悪だなw
747 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:45:03 ] >>734
748 名前:デフォルトの名無しさん [2008/02/05(火) 02:45:47 ] >>744 文章が簡素で短い。頭に思い浮かべている内容に自信がないみたいだね。 とりあえず744はアホのままでいいから744がスタックについて理解を 深めるのを阻止するためにスタックの話題はスルー。
749 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 02:50:58 ] >>748 ハァ? ヒント: C はクラスのインスタンスをスタックに置ける
750 名前:デフォルトの名無しさん [2008/02/05(火) 02:59:14 ] >>743 java からJNIなどを使ってネイティブなコードから確保したメモリはGCの対象にはならない。 ネイティブじゃなくても、オブジェクト作成時にJavaやアプリケーションサーバなどで内部的に管理されるようなリソースもGCの対象にならない (トランザクションとか。アプリ側から参照を外してもJavaVMやAPServerが参照を持っちゃってるからGCの対象にならない)。 こういうのは明示的にcloseを実行することによって管理側から参照が外されてようやくGCの対象になる。 それ以外はアプリ側から参照を無くすだけでGCの対象になる。
751 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 03:07:05 ] close() が必要なのは大抵ファイナライザで呼び出すよう実装されてるけどな (しなくて良いという意味ではなくて)。
752 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 03:16:11 ] ↓a.java public class a { public static void main (String args[]) { if(true){//できる。 b b_ = new b("h"); String g = b_.d("h"); }else{//本当はこっっちでやりたい。 String g = new b("h"); } System.out.println(g); } } ↓b.java public class b { b(String c){ d(c); } public String d(String c) { String e = new String("f" + c); return e; } }