[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/05 15:43 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者】Java質問・相談スレッド103【大歓迎】



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あたりで。

627 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 14:16:47 ]
>>621
ByteArrayOutputStream out = ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while(-1 != (len = stream.read(buf))){
 out.write(buf, 0, len);
}
byte[] contents = out.toByteArray();

628 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 14:17:20 ]
>I/O-CPU間のスイッチが発生しないので、速いですよ。

>2.サイズがわからないにしても、1バイトずつ読むのはやめなさい。
>たとえば100バイトずつ読めば、I/O-CPUスイッチの回数は1/100です。

おいおい、実装依存だぜそこは・・・って言おうとしたのにorz
ち、ちゃんと気づいてたんだからね!?

629 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 14:36:36 ]
様々な回答ありがとうございます。
一通り試して各メリットデメリットを整理し、理解を深めたいと思います。
このスレは優しい方が多いですね。
もっと叩かれると思っていました。

630 名前:デフォルトの名無しさん [2007/07/15(日) 21:22:44 ]
javaのlexとyaccどこ?

631 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 23:03:47 ]
Calendarクラスって使いづらくない?

632 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 00:39:43 ]
古いのはそうだね

633 名前:デフォルトの名無しさん [2007/07/16(月) 01:19:29 ]
上司から、1つのJavaプログラムソースの流れを追えるように、と指示が出されました。
このページの作成ボタンを押したらデータはどう飛ぶかとか…。
ヒントを求めてもこれといった答えをくれないので、Eclipceを前にして苦悩しています。
ど素人&抽象的な質問で申し訳ないですが、ソースを追う際のコツみたいなのはありますでしょうか?

634 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:22:31 ]
メソッドの頭にブレークポイントを挿入してみたら?

635 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:35:42 ]
>> 634
ありがとうございます。なるほど、それが簡単かもしれませんね。
でも、jspやらjavaやらが全部で何千と存在しているので、できればそれ以外の方法で検証したいのです。
変数が定義されてないかを調べるために変数を検索してみるといい、とは上司に言われたのですが、
あまり自分の中でピンとは来ません。
とんちんかんなことを言ってるかもしれませんが、ブレークポイント以外でもう一声いただけると助かります!



636 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:40:27 ]
Eclipseなら右クリックで変数の宣言に飛ぶとかメソッドの定義に飛ぶとかできる

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作目に突入していて頭の中がごっちゃになってました。^^;







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef