1 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 01:02:31 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 ttp://pc11.2ch.net/hp/ Webプログラミング ttp://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 ttp://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド ★★Java質問・相談スレッド133★★ ttp://pc12.2ch.net/test/read.cgi/tech/1251630161/ 次スレは>>950 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 ttp://www.wikiroom.com/java/
724 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:39:59 ] 相手が何でも察すると思うな。 きちんとドキュメントにしたまえ。
725 名前:708 mailto:sage [2009/11/12(木) 23:55:00 ] >>709 , >>710 , >>711 ご回答ありがとうございます。 >>711 これはすごいw。なんて複雑怪奇なんだ。 でも、行数減らしてかけるからスッキリしますね。
726 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:59:39 ] どこかのコンストラクタでエラーが起きただけでプログラム停止できれば楽だろうねぇ。
727 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:03:10 ] 止めたくなければ上位のメソッドでキャッチすりゃいいだけだよ どこまで頭悪いんだ
728 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:04:46 ] むしろなんでC++はコンストラクタで例外投げないの? コレクションからコレクション作るときnull許可しないなら普通に投げないか?
729 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:08:42 ] C++ コンストラクタ 例外でググるとそんなのは迷信だってサイトが大量に出てきて笑えるよ 時代遅れの妄言だな
730 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:35:35 ] >>727 >>720
731 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:41:16 ] >>725 え゛? 複雑? あー、でもJavaじゃメソッドチェインはあんまやらないから、見慣れない人がいるのもしゃーないのか。 ライブラリが「void返すくらいならthis返せ」って思想だったらよかったのに。
732 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 02:07:25 ] >>727 たぶん、new した所が普通に上位のメソッドだという考えになっていないんだろうね。 C++ だとローカル変数を置くだけでオブジェクトが生成されちゃうこともあって。
733 名前:質問者 [2009/11/13(金) 08:48:30 ] 1. Java1.6の、型を限定したListの作り方を教えてください。 2. inport java.util.List;として、他の場所ではList型が使えているのに、 new List(); が、「型Listのインスタンスを生成できません。」とコンパイルエラーになります。 理由に心当たりがありましたらご教授ください。
734 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 09:17:02 ] Listは実装じゃなくてインタフェースだから List型の変数は宣言できても実体は作れない 実体はLinkedList<T>やArrayList<T>や自分で作った実装のあるクラスでないといけない List<?> list = new ArrayList<?>(); とか
735 名前:733 [2009/11/13(金) 09:50:48 ] >>734 ありがとうございました。
736 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:34:51 ] エラーでてるのに処理続けてもなあ。 エラー出ない様に対処してから再試行するべき。
737 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:52:08 ] 勘違い君は、>>727 だけでなく>>732 もなのか。 >>726 では「キャッチしなくていいなら楽だ」って意味なのに、>>727 で「キャッチすりゃいい」なんてレス 入れるのは勘違いも甚だしい。 また、>>718 >>720 の脈絡からすれば「コンストラクタでエラーならプロセス停止するべき」って言ってる に等しい。 リークが問題になるのはプロセスを継続する場合なんだからな。 「処理」って「エラーになったクラスの処理」だったなんて寝ぼけたこと言うのかもしれんが。
738 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:20:09 ] 578 名前: デフォルトの名無しさん [sage] 投稿日: 2009/11/13(金) 12:00:40 HTTPは無理しすぎだからな。 本来は閲覧専用のプロトコルだったはずだ。 いつの間にか書き込みができるようになったり、 個人識別ができるようになったり、 pushもできるようになったり。
739 名前:732 mailto:sage [2009/11/13(金) 12:22:46 ] >>737 >>737 は、>>727 がどのレスに対するレスなのかを勘違いしていると思われる。
740 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:36:53 ] アンカー付けようねってことだねwww
741 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:33:09 ] Javaで正規表現を使うにはどうしたらいいでしょうか? また、Javaの文字(char)のユニコード値を得る(int)コードはどうしたらいいでしょうか?
742 名前:デフォルトの名無しさん [2009/11/13(金) 13:33:50 ] 間違えてsageてしまったのでageます
743 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:37:26 ] 正規表現はPatternクラス charはキャストすればintに入る
744 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:39:48 ] 間違えた 「キャストしなくても」
745 名前:デフォルトの名無しさん [2009/11/13(金) 13:44:32 ] >>743 (名無しさん) ありがとう
746 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 19:49:29 ] Hibernateについて質問させてください。 複数クラスとテーブルのマッピングSQLを作成するにあたり、 以下の方法では取得できています。 @itより抜粋 Query sqlQuery = session.createSQLQuery( " select {mem.*},{wg.*} from member {mem} join workgroup {wg} “ + “ on {mem}.groupno = {wg}.groupno", new String[] { "mem","wg"}, new Class[] {Member.class,WorkGroup.class}); List list =sqlQuery.list(); for (int i = 0; i < list.size(); i++) { Object[] items = (Object[]) list.get(i); Member member = (Member)items[0]; WorkGroup group = (WorkGroup)items[1]; System.out.println( member.getNo() + ":" + member.getName() + ";group:" + group.getGroupname() ); } session.close(); 質問に入りますが、全列を使用するわけではないので、取得列名を絞り込むこと は可能でしょうか。絞込みによる性能向上を期待しています。 どなたかお分かりになる方の助言をお待ちしています。 よろしくお願いいたします。
747 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:01:07 ] 質問します。 java で、ファイルに書き込まれている内容の比較をしたいのですが、そのようなメッソッドは無いでしょうか?
748 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:11:55 ] Javaでやる必要があんのけ?
749 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:14:29 ] javaでやれといわれたので。
750 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:23:00 ] そのようなメッソッドはありません 普通にファイルを読み込んでから普通に内容を比較してください
751 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:27:47 ] 黒魔法メッソッド!!!
752 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:38:16 ] >>747 MappedByteBuffer#equals()でも使うのがお手軽じゃない? 使ったこと無いけど。
753 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 23:34:26 ] pc12.2ch.net/test/read.cgi/tech/1248012902/ ★★ Java の宿題ここで答えます Part 68 ★★
754 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 23:51:03 ] 質問させてください。 現在Swingで、コンボボックスを画像表示にし、 そこで選択された画像を、フレーム中央に表示させるプログラムを作っています。 ところが、getSelectedItemの設定で行き詰ってしまいました。 どなたかアイディアをお貸しいただければ幸いです。 ちなみに現在のソースは以下のようになっています。 色々いじくったので可笑しなことになっているかもしれません。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/830.java どうぞよろしくお願いします。
755 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:51:34 ] >>754 combo.setRenderer(new JLabel()); になってないか?
756 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:54:35 ] >>754 JavaDocではこうなっている。 void setRenderer(ListCellRenderer aRenderer)
757 名前:755-756 mailto:sage [2009/11/14(土) 01:08:46 ] 間違えた。すまん
758 名前:754 mailto:sage [2009/11/14(土) 01:16:20 ] >>755-756 いえ、非常にありがたいです。 他にも何かお気づきの点があれば、よろしくお願いします。
759 名前:755-756 mailto:sage [2009/11/14(土) 01:31:36 ] class ComboLabelにtextとicon保存 public Component getListCellRendererComponent内で上で保存したtextとiconをJLabelにセットしなければならないから、 class ComboLabel{ にtext追加。 public Component getListCellRendererComponent( にsetText追加。 すればいいんじゃないかと……
760 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:04:27 ] >>754 これで普通に画像の切り替えできてるよ。 変数が見えてなかったりLabelが表示されてなかったりしたのも直したけど。 MyCellRenderer renderer = new MyCellRenderer(); combo.setRenderer(renderer); combo.addItemListener(renderer);//追加 class MyCellRenderer extends JLabel implements ItemListener, /*追加*/ ListCellRenderer { ..... //省略 public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED){ lb.setIcon(((ComboLabel)model.getSelectedItem()).getIcon()); } }
761 名前:754 mailto:sage [2009/11/14(土) 02:39:10 ] 皆さんどうもありがとうございます。 早速教えていただいたように直してみました。 ところが、 lb.setIcon(((ComboLabel)model.getSelectedItem()).getIcon()); の箇所で、lb、modelを解決できませんというエラーが表示されてしまいます。 どこが間違っているのか、自分ではどうしても解決できませんでした。 もう一度教えていただいてもよろしいでしょうか。 お願いします。 ちなみに現在のソースです。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/831.java
762 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:46:43 ] >>761 こっちに変えてみな。 public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED){ ComboLabel lbl = (ComboLabel)((JComboBox)e.getSource()).getSelectedItem(); lb.setIcon(lbl.getIcon()); //lb.setText(lbl.getText()); Textが必要ならComboLabelにgetText()を追加する } }
763 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:49:14 ] あと以下の2行を修正 public class Combobox extends JFrame{ private JLabel lb; //追加 //JLabel lb = new JLabel(("ここに画像が表示されます")); この行コメントアウトして下のように変更 lb = new JLabel(("ここに画像が表示されます"));;
764 名前:754 mailto:sage [2009/11/14(土) 03:01:24 ] 迅速なお返事をどうもありがとうございます。 教えていただいたことを元に、もう少し自分で考えてみようと思います。 こんなに遅い時間まで、本当にどうもありがとうございました。
765 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 03:05:30 ] >>764 適当に動くようにしたソースはっとくよ。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/832.java
766 名前:754 mailto:sage [2009/11/14(土) 03:12:17 ] わざわざソースまで! 自分の求めていたとおりに動かすことができました。 本当にありがとうございます。 自分ももっと勉強します。
767 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 03:35:46 ] MyCellRenderer extends JLabel implements ListCellRenderer よりも MyCellRenderer extends DefaultListCellRenderer にするといいよ。 getListCellRendererComponent() の最初で super.getListCellRendererComponent(); を呼んで、 アイコンをセットして、 最後に return this; とすればいい。
768 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 07:53:25 ] java でC/C++ でいうところの、関数ポインタのような振る舞いをさせるには どのようなデザインパターンを用いればいいでしょうか? 2つのboolean 値があって、その値の内容の組み合わせパターン(2^2)によって、呼び出すメソッドを変えたいのですが if 〜else if 構文や、switch 文はかっこ悪いので使いたくありません、よろしくお願いします。
769 名前:732 mailto:sage [2009/11/14(土) 08:59:26 ] >>768 Java では関数ボインタを変数に持ったり、関数ポインタを使って多相化することはない。 そういうことをしたい時は、オブジェクトを変数に持って、パターンによって、 共通のインタフェースを実装した異なるオブジェクトを呼ぶことになる。 関数テーブルの代わりにはオブジェクトテーブルということになるが、 オブジェクトテーブル以外にも、4つのパターンを表現した enum クラスを作って、 各 enum 定数の中に実装を書くなどの作戦もある。
770 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 09:17:34 ] >>769 Thx
771 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 09:28:13 ] >>769 それ、なんてStrategyパターン?
772 名前:768 mailto:sage [2009/11/14(土) 09:41:43 ] >>771 外していたらごめんなさい、多分State パターンではないでしょうか?
773 名前:デフォルトの名無しさん [2009/11/14(土) 14:23:46 ] 総称型の配列が作れません。 以下のような場合どうすればいいのでしょうか? public T[] getSpecifiedElements(T[] allElements) { //allElementの一部要素をT配列で返したい。 } ArrayList<T> temp = new ArrayList<T>(); に必要な分をつめこんで、 temp.toArray(new T[temp.size()]); ってしたいのですが無理なようです。 (T) temp.toArray(); もクラスキャストエクセプションになってしまいした。。。
774 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:38:55 ] >>772 お前がやりたいのは、ちょっとした計算ロジックを切りかえたい ということに見えるが、それだとしたらStrategyパターンであってる
775 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:56:35 ] >>773 無理。 代替案としては Class<T> を引数で指定してもらうか、 配列使わずList<T>で受け渡しするか。 <T> T[] getSpecifiedElements (T[] allElements, Class<T> clazz) { List<T> temp = new ArrayList<T>(); //tempに必要な要素をつめる。 return temp.toArray((T[])Array.newInstance(clazz, temp.size())); } List<T> getSpecifiedElements (List<T> allElements) { List<T> temp = new ArrayList<T>(); //tempに必要な要素をつめる。 return temp; }
776 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:57:52 ] >>773 総称型の配列をnewすることは、Javaの言語仕様上できない。 多少強引だがこれでOK。 @SuppressWarnings("unchecked") T[] subElements = (T[]) java.lang.reflect.Array.newInstance( allElements.getClass().getComponentType(), temp.size()); return temp.toArray(subElements); つーか、そもそも配列使うのやめればいいだけなんだけどな。
777 名前:デフォルトの名無しさん [2009/11/14(土) 15:25:04 ] >>775 >>776 引数でクラス指定すると総称型の意味がないし、 ワーニング潰すのも気持ち悪いので、 諦めてList<T>を返すことにしました。 しかし勉強になりました。ありがとうございます。
778 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:01:01 ] ストラッツの質問はここでも大丈夫でしょうか?jsp にアクセス(リロード)した際、自動的にActionクラスを実行するプログラムを組みたいのですが、どうすれば良いでしょうか?
779 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:01:46 ] >>776 jdk7だと[]とListの区別がなくなるのかも。
780 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:58:38 ] www.tomicom.ac.jp/~koba/doja5/jguidefordoja5api/javadoc/com/nttdocomo/security/SymmetricCipher.html ここを参考に,特定の文字列をAESで暗号化するiアプリを作成してみたのだけど,例外が出てしまう… どなたか,原因が分かる方ご教授お願いします. 例外 Main :java.lang.IllegalArgumentException: Can't use the sessionkey or the iv with the algorithm keyTest java.lang.IllegalArgumentException: Can't use the sessionkey or the iv with the algorithm at com.nttdocomo.security.CipherSessionKey.createSymmetricCipher(+71) at cryptionClass.encryption(+72) at keyTest.start(+14) com.nttdocomo.security.CipherSessionKey: Can't use the sessionkey or the iv with the algorithm ソースコード ttp://www.cms-e.net/java/src/
781 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:24:28 ] "Can't use the sessionkey or the iv with the algorithm" って書いてあるけど?
782 名前:780 mailto:sage [2009/11/14(土) 17:33:11 ] >>781 まぁ,そのエラーメッセージの意味は分かるのだけど,解決策が分からない…. 参考URLではプログラム解説のためにDESアルゴリズムを用いているけどできればAESを使いたいので.
783 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:36:00 ] >>781 いや,ごめん.意味も分かってないかも. アルゴリズムのあるセッション鍵かIVを使用できません. という文章的な意味は分かるのだけど,そのトラブルシューティングが分からない
784 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:49:27 ] >>778 jspがAction経由で表示されたなら、リロードしてもActionが再実行されると思うけど。
785 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 21:55:10 ] >>783 その訳はたぶん そのセッション鍵またはそのIVをそのアルゴリズムと共に使うことはできません ではないか? ちょっと調べたらAESはブロックサイズが128ビットらしいので、IVのサイズをそれに合わせて長くしてみるとか
786 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 22:56:31 ] ジャバってランタイムがないと動かないの? RPGツクールみたいなもん? 単体で動くexeとか作れないの?
787 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 22:57:45 ] POJOって一体何なの? どういう風に便利なのかとか、どうすれば使えるのかとかがよく分からない。
788 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 22:58:29 ] そうです 強引な方法も無くはないが 素人には10年早い
789 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:08:27 ] 788さん、それボク786に対する答えですか。
790 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:43:23 ] >>786 うん でもC++とかでもランタイム必要なものもあるよ
791 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:56:51 ] OS だってランタイムだ、という考え方をすれば、単に OS 標準でどこまで付いて来るかという問題でしか無いとも言えるな。
792 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:12:21 ] 790さんありがとうございます とりあえずいろいろいれずにWindowsでexeをクリックするだけで起動する感じが理想なので 別の言語あたってみます
793 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 04:55:26 ] アジャイル手法とかに詳しい人がいたら、ご意見をいただけないでしょうか。 最近、私が関わっているプロジェクトで、 「カバレッジ100%を達成するためにホワイトボックスな単体テストを書きまくった結果、 逆に、テストを書き直すコストが増大して大きなリファクタリングができなくなりつつある」 という本末転倒っぽい状態に陥りつつあるのですが、何か良い方法なり指針はないものでしょうか。
794 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 06:57:08 ] 端的に言えばカバレッジ最優先なポリシはバランスが悪い。 リファクタリング前と後で、極端なまでにテスト再利用性が存在しないのは、 そもそも変化が許容される内容(つまりはリファクタリングによって改善した内部構造そのもの) に対して過剰なテストが行われていることを意味している。 極端に言ってしまえば、テストは所詮バグが存在しないことの証明にはならないのだから、 あまり内部詳細に踏み込みすぎず、外部インタフェース越しに一般的なシナリオをテストするに 留めておくぐらいがちょうど良いと個人的には思う。
795 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 07:30:53 ] >>793 一律にテスト書かないで変更が多そうな部分と変更が少なそうな部分にわけて 変更が少なそうな部分を重点的にテストするとか
796 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 09:00:14 ] javamail-1.4.2 を使い、メール送信機能を付与した、プログラムを作成しました 送信テストも終わり、このプログラムを他人に配布したいのですが 通常のjava のアプリケーションが動くJava(TM) SE Runtime Environment (build 1.6.0_17-b04) の環境であれば、別途に必要なランタイムやライブラリィはありませんか?
797 名前:796 mailto:sage [2009/11/15(日) 09:52:09 ] 自己解決です ttp://oshiete1.goo.ne.jp/qa1919395.html 同じ方がいました、他人に配布するのは、ライセンス的には問題なさそうですが、 バッチでmail.jar を入れるとか、面倒な感じですね、実行するにも長たらしいコマンドを入れなければならないし C で書いたDLL があるので、こいつを使った方が解決が早そうです。 java のインストローラが作れればいいんだが・・・・
798 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 10:28:08 ] izpackかは? コマンドって、実行時のクラスパス指定のこと? それならManifestに記述すればいいし最悪バッチファイルなりなんなり書けばいいし、他にもexeにラップしちゃうって手もあるし、あんまり問題にはならなくないかい?
799 名前:796 mailto:sage [2009/11/15(日) 10:45:00 ] >>798 ありがとうございます、java は最近はじめたばっかりなので詳しくく質問させてもらいました Manifest とか、exe にラップする方法があるのですね知りませんでした、調べてみます。
800 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 13:28:58 ] >>785 ありがとうございました! IVを128bitにしたら無事通りました!
801 名前:793 mailto:sage [2009/11/15(日) 13:50:12 ] >>794 なるほど。。 インタフェースごしのブラックボックステストと、ホワイトボックステストを分けるのも手かもしれませんね。
802 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 15:00:16 ] URLClassLoader#loadClass(null)で呼び出したクラスは、 このクラスローダがGCされると綺麗にメモリ上から消えますか? public static void run(URL jarFile, String className) throws Exception { Class clazz = new URLClassLoader(new URL[]{jarFile}).loadClass(className); MyInterface obj = (MyInterface) clazz.newInstance(); obj.run(); }
803 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 15:35:26 ] >>802 一緒にGCされると思うけど、仕様によって保証はされない。 あと、java.lang.Class や java.lang.reflect.Method なんかの リフレクション用のオブジェクト握りっぱなしにしてると、 そもそもクラスローダがGCされない
804 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 17:05:11 ] JNIでCを呼び出すとき、System.loadLibraryでネイティブライブラリをロードしますが、 System.loadLibraryを書くのはコンストラクタがよいのか、staticイニシャライザが良いのかわかりません。 どちらの方がよいのでしょうか?
805 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 17:10:50 ] インスタンスをnewするまでstaticなネイティブメソッドが呼べないよ
806 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:21:36 ] 携帯でMP3再生したい オープンアプリでいっちょやってみるか ハフマン符号???? File decode(File mp3File) { // 誰かサンプル書いてみて return decodeFile; }
807 名前:806 mailto:sage [2009/11/15(日) 18:24:48 ] だめだ メモリ足りなくなりそうなので いちいち展開なんてしてられん・・・ void playMp3(File mp3File) { //一時停止機能とかいらないから誰かサンプル書いて }
808 名前:デフォルトの名無しさん [2009/11/15(日) 19:28:40 ] 別スレッドがSystem.out.print..などで、標準出力にメッセージを出すようになっていて、 それをInputStreamなどで拾いたいのだけど、どうしたら良いですか?
809 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:54:06 ] java mediaとかかな 特許がらみが多い分野だからほとんどの形式がクローズドだけど。
810 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:01:17 ] >>808 System.setOutで出力先をPipedOutputStreamか何かに変え、PipedInputStreamか何かで読み出す
811 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:24:08 ] >>810 ありがとう!解決した!
812 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:35:18 ] どうしてクラスローダが1つのVMに複数あるのでしょうか?
813 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:49:06 ] URLから取ってくるクラスローダとか色々あるから。で回答としてはいいのかな?
814 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:49:48 ] たとえば同一の外部ライブラリで複数バージョンを使い分けたい場合などがあったとする。 唯一のクラスローダしか存在しない場合、FQNが同一のクラスは、一つしか存在することができない。
815 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:08:02 ] まて、FQNが同一のクラスが同時に複数存在できたりするのか? ウィザードじゃないから知らないだけかもしれないけど、static変数とか矛盾 してしまうと思うんだが。
816 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:28:29 ] できる。そもそも同じFQNであれ、ロードされているクラスローダが違えば同じクラスと扱われない。 J2EEやっていれば同一のコンテナ(単一JavaVM)に複数のWebアプリケーションをデプロイして、 それぞれのWebアプリが独自のライブラリ(WEB-INF/lib)を利用する状況を考えて欲しい。 たとえばAアプリはlog4j1.2で、Bアプリはlog4j1.1というのは普通に可能。 それらはThreadに割りつくContextClassLoaderが入れ替わることで(実装者が意識しないかたちで)実現されている。
817 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:29:07 ] >>815 できるよ 異なるクラスローダがロードしたクラスは、同じFQNであっても別々 static変数も別々 Classオブジェクトを比較しても一致しない
818 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:31:11 ] あとたしかinstanceofもキャストも失敗するっけか あらゆる意味で異なるクラス扱いだったはず
819 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:36:33 ] Seasarという有名な国産DIコンテナがあって、 それはsmart deployという仕組みで、開発時にhot deployが可能なんだけど、 そのやり方は結構単純で、クラスローダをRequestを受け取るごとに生成・廃棄して、 新規にコンパイルされたClassを都度読み込みさせている。 そのようなやり方をすれば、一度読み込まれたClassでも即時反映が実現できる。
820 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:40:34 ] なるほど。 d.hatena.ne.jp/masugata_k/20071203/1196684216 とそのリンク先を見てみた。 システムクラスローダは差し替え可能なわけか。知らなかった。
821 名前:デフォルトの名無しさん [2009/11/16(月) 00:06:47 ] 複雑な管理処理を行うベースウェアにはGUIや集中管理する画面って必須かな? それとも管理するためのAPIだけを提供すれば皆安心?
822 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:20:52 ] せめて参考GUI実装をソースつきで。凝る必要は一切無し。 あれば使ってもらえるし、出来が気に入らなかったら改造するだろうし。 ソース無くてもjadで見ちゃうけど。
823 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:58:42 ] なるほどruby的なのか そりゃそうか
824 名前:デフォルトの名無しさん [2009/11/16(月) 02:05:38 ] 初めましてm(_ _)m JAVA初心者なのですが JAVA2のSEとMEをインストールしようと思い一通りダウンロードしたんですが、 java_ee_sdk-5_08-jdk-6u17-windows-ml.exe これ以外はインストール出来ませんでした。 EEに当たるようなんですが、サイトを見直すとSEに該当しているようにもみえます。 しかし次にMEをインストールしようとすると「SEがインストールされていない」とでてMEがインストールされません。 MEがSE1.4?のみに対応している可能性もあるのでダウンロードしようとしたんですが見当たりません。 ですがそれ以前から教則本の付録でついてたj2sdk1.4.1_01(ランタイム?)を使用してます。 パソコンは2000年発売VAIOのXPです。SPをインストールしていません。 (すでにSP1がダウンロード不可のため) どなたかアドバイス下さい。よろしくお願いします。m(_ _)m