1 名前:デフォルトの名無しさん [2007/06/27(水) 07:23:27 ] プログラミング言語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質問・相談スレッド102【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1180419689/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝なく存じます。 次スレは>>980 あたりで。
637 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:44:16 ] そうなんですか?! 明日、日付明けて今日ですが、会社行って試してみようと思います。 12時間後ぐらいに撃沈してるかもしれませんが、その時はまたご教授願いします…。 素人の質問に回答いただきありがとうございました!
638 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 05:08:20 ] C++からJavaに引っ越してきたばかりの初心者です。 class A { private int data; //外部からは見えない private setter(int data) { this.data = data; } //外部からは使えない public int getter() { return data; } } というクラスがあったとき、data は int 型なので、この値が外部からは 絶対に変更されないことは保証されていると思います(C++と同じ)。 しかし、これが基本型の int ではなく、一般的なクラスだった場合、 例えば StringBuffer だったりしたら、外部からでも StringBuffer str = getter(); str.append("hoge"); みたいにして操作することは可能です(ここはC++と違う)。 これを防ぐために思いつくのは、getter() で data そのものではなく data のコピーを返すことですが、 public String getter() { return data.toString(); } 1. これは標準的な方法ですか? 2. ざっと見たところ、StringBuffer と違って String には インスタンスそのものが保持している値を直接書き換える 関数はないようですが、int と同じように扱っても安全ですか? 3. StringBuffer.clone() って使えるのが自然なような気がするんですが、 なんで使えないんですか?
639 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 05:32:15 ] public StringBuffer getter() { return new StringBuffer(data); } Stringはimmutable StringBufferのclone()はObjectのclone()をオーバーライドしていないのでprotectedアクセスになりAからはアクセスできない
640 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 05:41:17 ] こんな時間にレスありがとうございます! 3点ともしっかり理解しました。 C++についても「分かったつもり」になっていただけの部分が だいぶありそうですので、これを機にもう一度見直してみようと思います。 色々と。
641 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 07:00:07 ] がんがれ
642 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 08:05:31 ] >>638 こういう方法もよくやる class A { // 外部から直接アクセス禁止 private StringBuffer buf = new StringBuffer(); // 許可するメソッドだけを間接的に公開 public append(String str) { buf.append(str); } } あわせて。>639のようにGetterはコピーして返せばOK
643 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 09:21:56 ] >>633 Eclipseがある今では古風なやり方だが、各所にSystem.out.println(".."); を配置すると今どこら辺の過程やってるのか分かるよ。
644 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 10:29:57 ] lnないほうがいいよ
645 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 10:31:48 ] 二重ループで外を●内を・にすると ●・・・・・・・●・・・●・・・・●・・・・・●・・・ みたいに楽しめる
646 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 11:21:11 ] >>638 javaはcall by referenceが無くていわばreferenceをcall by valueしてる。 ていうのをとっとと覚えた方が良いと思う。 むかし、MSにプリミティブのラッパークラスが 保持してるvalueを書き換える手段がないのは欠陥と非難されたことがあるよ。
647 名前:デフォルトの名無しさん [2007/07/16(月) 11:24:16 ] FlashからJavaに入った奴です、よろしくお願いします。 例えば、Flashでは、あるFlash(swfファイル)に、後から、別ファイルのFlashを、 ロードして実行/表示することができるんですが、 Javaアプレットの場合、後から、別archiveをロードして、その中のクラスを 利用したりすることは出来るんでしょうか。。
648 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 11:25:37 ] BASIC作ってた会社に言われたくない罠
649 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 11:26:17 ] できるよ
650 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 11:42:08 ] >>648 作ってないよ。あれは買い取っただけ。
651 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 12:07:30 ] >>650 ビルゲイツキタ━━━━━━(゚∀゚)━━━━━━ !!
652 名前:デフォルトの名無しさん [2007/07/16(月) 12:47:53 ] mainスレッドとmainスレッドからstartされるThread-0があって、GUIのボタンでThread-0の停止・開始を 制御するサンプルとかないですか?
653 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 13:30:04 ] >>652 一度止めた(止まった)スレッドを再開することはできない。 Threadの中でループを使って実行・一時停止を制御するか、ボタンのイベント毎にスレッドを作れ(止めろ)
654 名前:647 [2007/07/16(月) 14:21:16 ] >>649 ありがとうございました。この方向で、勉強してみます。 また、つまづいたら、よろしくお願いします。
655 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 15:06:05 ] >>653 ありがとうございます wait/notify使えば出来るかなと思ったのですがダメなんですね
656 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 17:52:30 ] JDBCでMySQLを使ってるんですが、setAutoCommitをfalseして commitとrollbackを使えば排他制御はできてるんですか?
657 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 17:54:16 ] commit/rollbackは排他制御じゃなくてトランザクションの仕組み それを使って排他制御ができるかどうかは>656次第
658 名前:デフォルトの名無しさん mailto:age [2007/07/16(月) 17:55:04 ] cから来たんですけど「final」って何ですか?馬鹿にしてるんですか?
659 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 17:57:41 ] >>658 constと同義
660 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 17:58:34 ] >658 includeってなんですか?馬鹿にしているんですか?
661 名前:デフォルトの名無しさん mailto:age [2007/07/16(月) 18:01:07 ] >>658 処理系側が安心して定数であると判断しているのです 大文字、小文字の判別が出来るものと出来ないものが有る為 どうしても定数宣言で必要になるのです
662 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 18:01:55 ] ん、もしかしてCしか知らないのかw
663 名前:656 mailto:sage [2007/07/16(月) 18:41:04 ] トランザクションと排他制御の違いがよくわかってませんでした。 dev.mysql.com/doc/refman/4.1/ja/lock-tables.html MYSQLでは、このページにあるようにロックテーブルすれば排他制御はOKですか?
664 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 18:46:16 ] 今のjavaのfinalは定数じゃなくて一度しか代入(初期化しか)できない変数だろ。 blank finalがあるから。
665 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 18:49:06 ] >>663 それはJavaの話ではないのでMySQLスレで聞いた方がいい 排他制御がシビアであるのでない限り、TimeStampを使って簡単な排他制御を行うことが一般的。 つまり、更新するレコードを取得した時にLAST_UPDATE_TIMESTAMPなどを取得しておき、UPDATE時はWHERE条件に含めてしまう(排他で引っかかれば更新結果0件)など。
666 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 18:50:42 ] >>664 むしろ、変数に代入された値(参照先も含む)の不変性を保証 釣りにマジレスはここまで。
667 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 18:52:46 ] 何が「むしろ」なんだ?>>664 のが的を射ているし。
668 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 19:24:02 ] >>665 timestampはそういうときに使えるんですね LAST_UPDATE_TIMESTAMPっていうのはMySQLの関数ですか? 探したんですが見つからないです。 あとこの方法だとテーブルにtimestamp型のカラムを持たせないとできないんですよね? もうMySQLの質問になってますね。すいません。これで最後にします。
669 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 19:27:31 ] >>667 JLS3以降(Java5以降)でfinalの役割が重くなって、 666のようになったはず。
670 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 19:31:13 ] >>668 いや各テーブルに定義するカラム 最終更新日時ってカラムは何かと便利だから全てのテーブルに含めてテーブル設計することが多い(この辺もMySQLスレかDB総合スレ)
671 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 19:31:19 ] >>669 finalの役割が重くなったって、具体的にchapterいくつよ
672 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 19:45:43 ] >>670 あーカラム名ですか。 たしかにあったら便利ですね。 勉強になりました。ありがとうございました。
673 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 19:59:01 ] >>658 final = 再代入不可 変更不可ではない(参照先が変更されれば変更可能) 逆にすべての参照先をfinalにすれば変更不可(immutable)にできる 再代入の意図がなければなるたけつけておくのが良策 Cのconstとは違うので注意
674 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 20:08:24 ] >>673 Cのconstはダブルポインタ先も固定のままだっけか?
675 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 20:14:56 ] >>671 666はマジレスパワーが足りず言葉不足 chapterは 17.5 Final Field Semantics あたりか? あとは自分で調べるか、やさしいエロイ人待ちなさい
676 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 20:30:43 ] 一度しか代入(初期化しか)できない変数 と 変数に代入された値(参照先も含む)の不変性を保証 の差が解らない… 一度しか代入できないって事は代入された値が不変って事じゃないの?
677 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:09:36 ] >>676 final StringBuffer buf = new StringBuffer(); buf = null; //これはエラーになる=一度しか代入できない。 buf.append("hoge"); //これはエラーにならない。参照先の不変性は保証されない。
678 名前:デフォルトの名無しさん [2007/07/16(月) 21:09:38 ] >>676 finalでStringBuffer持ってたら?
679 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:19:04 ] >>677 ,678 Java5から重くなって参照先の不変性を保証ということは、 buf.append("hoge"); でエラーになるということ?
680 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:21:12 ] >>679 それ嘘だから。エラーにはならないよ。
681 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:35:16 ] 気分、こんな感じ 1. あるスレッドにおける代入結果は、他のスレッドからすぐには見えない 2. ファイナルフィールドとはいえ、一回は代入される 3. 不変と称しているのに、代入される前のファイナルフィールドが見えたらいやん 4. final の意味を強化
682 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:12:43 ] >>679 5.0の同期周りで後付けされた仕様を拡大解釈でもしてるんじゃない? でもあれだ、static finalでプリミティブだと吐くバイトコードにリテラル埋め込んでるから定数と言えるかも。 あと、finalじゃなきゃinner classから参照できないんじゃなかったけ?
683 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:21:43 ] >>682 static final int a = Integer.getInteger("system.property"); みたいな事もできるから、「static final でプリミティブ」なだけじゃ定数とはいえない。 final でなければ参照できないってのは匿名クラスの話じゃないか?
684 名前:デフォルトの名無しさん [2007/07/16(月) 22:52:09 ] 付箋を作成したいのですが、コンパイルができません。 C:\sample>javac FusenExec.java FusenExec.java:6: シンボルを見つけられません。 シンボル: クラス Dodai 場所 : FusenExec の クラス Dodai fusen; ^ FusenExec.java:7: シンボルを見つけられません。 シンボル: クラス Dodai 場所 : FusenExec の クラス fusen = new Dodai(); ^ エラー 2 個 因みに、ソースはこれです。どこがおかしいかを指摘ください。 class FusenExec{ public static void main(String[] args){ Dodai fusen; fusen = new Dodai(); fusen.setSize(300,50); fusen.setVisible(true); } }
685 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:55:04 ] クラスパス上にDodai.classが存在しない
686 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:55:33 ] >>684 Dodaiクラスがないんだって。 コンパイルしてないんじゃねーの? おかしいところ? ソースコード→コンパイル→実行の流れ理解しているか怪しい
687 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 12:09:21 ] 流れ切るけどjogl用のモデルローダーってないかな? フォーマットは何でも良いんだけど。 できればソースコード公開義務のないライセンスがいいんだけど・・・。 java3d用なら色々あるんだけど、自分で実装しなきゃダメかな?
688 名前:デフォルトの名無しさん [2007/07/17(火) 13:31:43 ] 10万行のデータを描画するため自作GUIを作っているのですが、うまくいきません。 キャンバスに描画し、折り返し処理などは実現できたのですが、スクロール処理がうまく実現でしません。 少ないメモリで高速に描画できるソースなどはありませんでしょうか
689 名前:デフォルトの名無しさん [2007/07/17(火) 13:34:20 ] 段階に分けるのが一般的
690 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 14:18:47 ] こいつ、10万行のテキストデータを丸ごと読もうとかしてるのかwww
691 名前:デフォルトの名無しさん [2007/07/17(火) 14:24:41 ] そんな無茶した事無いから解らんのだが オーバーフローしないのか?w
692 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 14:32:32 ] Swingのスクロールの実装があるじゃないか。 ていうか10万って言ったらUnicodeでUTF-8で日本語で1行80文字としても殆どが1文字3バイト取られるからメモリを23Mbyte食うわけだが・・・。
693 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 14:34:35 ] >>688 10万行ってだけならなんとかなりそうだけど。 スクロール処理が上手くできないってのは 計算済みの折り返し情報を行毎に保持とかしてないんじゃね?
694 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 14:37:14 ] というかSwingには高レベルなEditコンポーネントがあるんだが、それを拡張しようとか思わないのか? 低レベルな事はすべて実装されてるだろうに。 Canvasとかに直描きとか?
695 名前:デフォルトの名無しさん [2007/07/17(火) 14:41:20 ] 方法としては694が一番手っ取り早いやね と言うか普通は新しいクラス造りが趣味でもない限りそうするけど
696 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 14:52:44 ] 現実問題として10万行スクロールするユーザーがいるとは思えないw
697 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 15:32:49 ] >>696 つ速読の練習
698 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 15:34:49 ] 2chの1スレ分でも10万行はないよなあ 3000〜1万行くらい?
699 名前:デフォルトの名無しさん [2007/07/17(火) 15:44:05 ] て言うかそんな整理されてないデータは価値も低い
700 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 17:32:52 ] とりあえずスレタイがちょうど目に付いたという理由で 「スレ立てるまでもない質問はここで」スレの過去ログを いくつか見てみたけど、だいたい1スレ7000行弱に収まってるね。 ってことは10万行つったら15スレ分ぐらい、 それを一気に表示されたって使う方は困るし、それよりは うまく分割するとか有益な情報を抽出するとかって方に 注力した方が得るものは大きいと思う。
701 名前:デフォルトの名無しさん [2007/07/17(火) 17:42:37 ] 解決としてバッファリング用の作業クラスを一つ作りファイルから必要分だけ抽出し表示用のクラスに 送り込めるようにするのがいいと思う。 但し、どうしても必要な場合に限定し、できうる限り整理されたデータを用いるべき。
702 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:21:45 ] その前に必要なデータの抽出だ。
703 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:47:51 ] >>688 こんなんでいいんでないの? import java.awt.*; import javax.swing.*; public class J688 extends JFrame{ JTextArea textArea = new JTextArea(10*10000, 40); JScrollPane scrollPane = new JScrollPane(textArea); public J688(){ super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int i=1;i<=textArea.getRows();++i) textArea.append("Line:"+i+"\n"); add(scrollPane, BorderLayout.CENTER); setPreferredSize(new Dimension(300, 300)); pack(); setVisible(true); } public static void main(String[] args) { new J688(); } }
704 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:09:22 ] 初歩的な質問ですいませんが。 標準入力でインスタンスの数が変わる場合、インスタンスの生成で インスタンス名をどう指定すればいいんでしょう? Player player1 = new Player; と言う感じに固定ならば書きますが、このplayer1が可変な場合に 変数などでどう表せば良いのかでつまづいて…。
705 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:11:19 ] 「インスタンスの数」ってなんだい? そこんとこもう少し詳しく
706 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:16:08 ] なんかよくわからんがエスパーで回答してみる System.inで読んだ内容からk個のインスタンスを作るんだったら 普通にk個インスタンスを生成して片っ端からListに入れればいいんじゃね?
707 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:20:19 ] 引数可変でその数だけ同一オブジェクトを生成するなら配列にでもぶちこんどけ ってパパが言ってた。
708 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:29:48 ] すみません 質問させてください 現在修行中の身で、JavaSE5.0を使って色々とOJTしております XMLを扱う場面で先輩からJAXB2.0なる便利なものを教えていただきました。 途中からJavaSE6に変えてJAXB2.0を楽しんでいたのですが、会社の命令でJavaSE6禁止命令が出ました(出ましたというより、もともと5.0か1.4しか使っちゃだめらしいです) そこで困っているのですが、またまた、先輩社員からJavaSE5.0使って、SE6のJAXB2.0だけコピーすりゃいいじゃんと言われました そんなことできるんですか?
709 名前:704 mailto:sage [2007/07/17(火) 22:35:09 ] >>705-707 早速どうもです 何と言うか、インスタンスの数が2つと決まっていれば Player player1 = new Player; Player player2 = new Player; と言う感じに2つ作れば出来ますが、標準入力で指定された数作ろうとした場合 下みたいな感じで配列なりで表してfor文ででも回せば良いかと思ったのですが。 m = 標準入力; for(int n = 0 ; n>=m ; n++ ){ Player **** = new player; } ここの***をどう記述したら良いのかが分からずどうにもうまく行かなくて。 初心者で引数可変、Listがちょっと分かりませんが調べてみます。
710 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:56:07 ] >>708 JAXB自体はJavaSE6以前からある。ここね。 ttps://jaxb.dev.java.net/ ここからダウンロードしたファイルからjar取ってきて、クラスパスに足せばいいよ。 「SE6のJAXBだけコピー」と言われると違うが、お前さんの解釈違いの可能性もあるので その先輩さんのことはとやかく言わないでおく。
711 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 23:04:44 ] >>708 いや、そんな事したらライセンスとライブラリの依存関係解決を別個にやる羽目になるじゃん。 JAXBのページがsunかその周辺のサーバーにホストされてるからそこ当たってみ。 >SE6のJAXB2.0だけコピーすりゃいいじゃん ライセンス管理意識なさ過ぎ。
712 名前:デフォルトの名無しさん [2007/07/17(火) 23:13:36 ] ファイル出力時のflush()についての質問です。 少し前に下記のようなコードを書いてプログラムを走らせたところ、出力ファイルの末尾が切れていました。 String output_file_str = "hoge.txt"; FileWriter output_file = new FileWriter(output_file_str); BufferedWriter output_file_buf = new BufferedWriter(output_file); /* 出力処理 */ output_file_buf.close(); output_file.close(); 調べた結果、close()する前にflush()をしなければいけないということが分かったので、下記のように直して現状は正しく動作しています。 String output_file_str = "hoge.txt"; FileWriter output_file = new FileWriter(output_file_str); BufferedWriter output_file_buf = new BufferedWriter(output_file); /* 出力処理 */ output_file_buf.flush(); output_file_buf.close(); output_file.close();
713 名前:712 [2007/07/17(火) 23:14:20 ] 続きです ここで、ふと疑問に思ったのが、FileWriterとBufferedWriterの両方にflushが存在している点で、 FileWriterは一文字単位でしかやり取りできない、BufferedWriterを使うことで行単位などでもやり取りができるということから 【BufferedWriter】−【FileWriter】−【ファイル】 とつながっていると思うのですが、この場合 output_file_buf.flush(); /* BufferedWriterの内容をすべてFileWriterにflush()する */ output_file_buf.close(); /* BufferedWriterの中身はすべて出力済みなので閉じてOK */ output_file.flush(); /* FileWriterの内容をすべて指定したファイルにflush()する */ output_file.close(); /* FileWriterの中身はすべて出力済みなので閉じてOK */ と両方でflushすべきなのかどうかで迷っています。 いくつかのページを参考に調べてみると、 String output_file_str = "hoge.txt"; BufferedWriter output_file_buf = new BufferedWriter(new FileWriter(output_file_str)); /* 出力処理 */ output_file_buf.flush(); output_file_buf.close(); といった感じにひとつずつ変数を定義するのではなくまとめて書かれていたのですが、FileWriterを明示的にflushしなくても安全なのでしょうか? 以上です。どなたかアドバイスよろしくお願いします。
714 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 23:19:03 ] >>712 > 調べた結果、close()する前にflush()をしなければいけないということが分かったので それは嘘。close() する前に flush() する必要はない。
715 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 23:42:06 ] >>710 >>711 レスさんくすです 先輩のアドバイスは私の解釈違いかも知れないのでスルーしてください JAXBはSE6以前からあったんですね SE6で標準APIに加えられたとの解釈でOKですかね?
716 名前:712 [2007/07/18(水) 00:05:20 ] >>714 表現が少しあいまいでした。 正確には研究室の先生に出力が途切れる現象を伝えたところ、flush()すれば大丈夫との回答が得られ、実際にflush()の行を追加したところ、すべてが出力されたという状態です。 BufferedWriterのjavadocでは flush public void flush() throws IOExceptionストリームをフラッシュします。 定義: クラス Writer 内の flush 例外: IOException - 入出力エラーが発生した場合 -------------------------------------------------------------------------------- close public void close() throws IOExceptionストリームを閉じます。 定義: クラス Writer 内の close 例外: IOException - 入出力エラーが発生した場合 とあって、closeが内部でflushを行ってからストリームを閉じるとは書いてはないので、実は明示的に行わないとまずいのではと思ったのですが・・・ でもいくつかのページではcloseはflushを行った後にストリームを閉じるって書いてあって、でも各ページの説明で使っているサンプルコードにはちゃんとcloseの前にflushが入っているわけで・・・ 初めに出力されなかった問題点はもっと別のところにあるのかな?
717 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:10:38 ] >>709 配列作って pl[n] それから、「new Player;」 「n >= m」 は間違ってるから修正しとき
718 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:33:53 ] >>716 1.6 のAPIリファレンスでは >ストリームを最初にフラッシュして、閉じます。 って書いてある。 たぶん、あまりにも当然すぎて書かれなかっただけなんじゃないかと。 > 初めに出力されなかった問題点はもっと別のところにあるのかな? output_file_buf.close() を呼ぶ前に output_file.close() を呼んでいた、に一票。
719 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 02:42:29 ] >>715 そう。EE5.0にあるxmlライブラリをSEに持ってきた時に依存関係を解決するついでにくっついて来た感じ。 標準ライブラリに昇格しただけでJAXB自体は前からあった。
720 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 03:53:12 ] SwingとかWebStartとかXMLとか流行りそうで流行らんなー。
721 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 03:58:29 ] 720プロデュースで大々的にキャンペーンでもうってみてはどうだろう
722 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 05:19:42 ] Swingとxmlは流行るとかそういうものじゃないと思うが。
723 名前:デフォルトの名無しさん [2007/07/18(水) 09:59:11 ] 質問させてください。 以下のような処理を行いたいと思ってるのですが、行き詰まっています。 1. JScrollPaneのscrollble clientに、GridBagLayoutのJPanelを貼り付けて、ボタンの テーブルを作成。 2. JScrollPaneのcolumn headerに、JTableのcolumnNamesのような項目名をテーブルの 各要素の幅に同期するように作成。 上記の、2.の処理を上手くやる方法はないでしょうか? 最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り やり方がみつからなかったので、この方法をとろうとしています。 良いお知恵をお持ちの方、ご教示願います。
724 名前:デフォルトの名無しさん [2007/07/18(水) 10:28:34 ] >最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り >やり方がみつからなかったので、この方法をとろうとしています。 TableCellRenderer
725 名前:デフォルトの名無しさん [2007/07/18(水) 10:46:52 ] チュートリアルに無いか?
726 名前:デフォルトの名無しさん [2007/07/18(水) 12:06:38 ] いや、JDKのデモに付いてた気がする。
727 名前:712 [2007/07/18(水) 15:25:28 ] >>718 言われてみて、はっと気がついてソースコード見直したら /* バッファーの内容を全て吐き出す */ buf_output_file.flush(); /* ファイルクローズ */ output_file.close(); ってなってました・・・ すみませんでした〜〜〜(>_<) Javaで本格的に書き始めたのが、今回エラーの出たソースコードで、最近第2作目に突入していて頭の中がごっちゃになってました。^^;
728 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 18:08:40 ] char型の変数 c があるとして、 int n = (int)c; でUnicodeでの文字コードが取得できるらしいんですが、 これをShift-JISでの文字コードを取得するにはどうしたらいいですか?
729 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 18:54:30 ] > int n = (int)c; でUnicodeでの文字コードが取得できる 出来ません。 CharacterやStringクラスにコードポイントを返すメソッドがあるのでそれを使いましょう。 今のunicodeは21bitなんだな
730 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 19:03:00 ] >>728 char型の変数cに収まる範囲の文字コードについてはいい加減にこういうふうに char c = 'あ'; short s = java.nio.charset.Charset.forName("Shift_JIS").encode(String.valueOf(c)).getShort(); System.out.printf("%04x%n", (int)c); System.out.printf("%04x%n", s);
731 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 19:15:44 ] >>730 Charsetまで呼ばなくても、それならこれでいいんじゃね? for (byte b : String.valueOf(c).getBytes("Shift_JIS")) System.out.printf("%02x", b);
732 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 21:44:44 ] >>717 急いで書いたらしょうもないミスしてますね、すいません。 配列で出来るんですか…う、う…ん…。 何か根本的にやり方がおかしいようですね…。 勉強しなおしてきます。
733 名前:デフォルトの名無しさん [2007/07/18(水) 22:47:44 ] JTable にスクロール機能を持たせる場合、通常 JScrollPane を使用しますが、 大量データがある場合はパフォーマンスとリソースの観点から実用的では無い ので、JScrollBar を使用した手動スクロールを作成したいのですが、 作成方法を教えて頂けませんでしょうか? サンプルなどがあるHPでも結構ですので、ご教授頂けると幸いです。
734 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 22:57:28 ] 688
735 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 23:01:21 ] Frame上でJSplitPaneとか、Jの付くコンポーネント使って何か問題ありますか?
736 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 23:10:52 ] >>733 > 大量データがある場合はパフォーマンスとリソースの観点から実用的では無い JScrollPane使ってたら、描画が必要な部分しか描画しないはずだが。
737 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 23:12:34 ] 軽量が先、重量が後に描画に起因する事象。問題あるかどうかはやり方次第。