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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド104【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1185493592/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

次スレは>>980あたりで。
2デフォルトの名無しさん:2007/08/28(火) 00:42:45
2
3デフォルトの名無しさん:2007/08/28(火) 00:53:00
もつ
4デフォルトの名無しさん:2007/08/28(火) 01:01:09
5デフォルトの名無しさん:2007/08/28(火) 11:38:03
>>999
DateFormat達はスレッドセーフじゃないから、static finalで持っちゃ駄目だよ。
6デフォルトの名無しさん:2007/08/28(火) 14:30:38
>>5
自分でシングルスレッドで注意して使う分には問題ない
マルチスレッドや公開するのならば、同期化処理を行えばよし
ま、設計を見直した方が良い場合もありますが。
7デフォルトの名無しさん:2007/08/28(火) 17:34:02
Genericsについて教えてください。

1: javax.naming.directory.Attributes attributes = new Attributes();
2: javax.naming.directory.Attribute attribute = attributes.get("memberOf");
3: javax.naming.NamingEnumeration<String> values = attribute.getAll();

3行目で
型の不一致: NamingEnumeration<capture-of ?> から NamingEnumeration<String> には変換できません。
が出るのですが、Attribute+getAll() の戻り値を NamingEnumeration<String> にするにはどうすればよいですか?
8デフォルトの名無しさん:2007/08/28(火) 17:58:18
>>7
javax.naming.directory.Attributesってインタフェースだからnewできないんじゃ?

Attribute#getAll()が返すのはNamingEnumeration<?>で、
どんなクラスでも放り込んでますよってことだから、
NamingEnumeration<?> values = attribute.getAll();
で取って(<?>は無くてもいいと思う)、
列挙される個々のインスタンスの種類を見ながら適切にキャストすればいいと思うが。
Attribute#addも引数はStringでなくObjectを取ってるでしょ?
97:2007/08/28(火) 18:48:55
>>8
すみません、サンプルコードが不適切すぎました

その後に行っていた
4: String str = (String) values.next();
のキャストをなくしたくて3行目のNamingEnumerationに<String>をつけたのですが、
そこから先をどのようにしたら良いのかわからなくて質問しました

getAll()の戻り値がNamingEnumeration<?>になっていたので
どうにかすれば戻り値の(中身の)型を限定してキャストをなくせるのだろうと
思っていたのですが、そもそもそれが間違いだった気がしてきました

Genericsについてきちんと勉強しなおしてみます
お手数をおかけいたしました
10デフォルトの名無しさん:2007/08/28(火) 18:59:43
Generics を理解するポイントは、コンパイル時に解釈されると言う事。
コンパイル前に型が確定するような状況であればGenerics で解決できるが、層でない場合は出来ないってのがポイント
11デフォルトの名無しさん:2007/08/28(火) 19:07:27
というか、戻り値が <?> で宣言されているってことは、String 以外のオブジェクトも返すかもしれないということだ。
それを、勝手に型を限定できはしない。
ちゃんと instanceof でチェックするか、ClassCastException 覚悟でキャストするか、そのあたりはまぁ好きにすればいいけれど。
12デフォルトの名無しさん:2007/08/28(火) 20:53:57
transientフィールドってどのタイミングで初期化されるの?
class A {
transient int x=0;
A(){
 x =1;
}
}
ってクラスをデシリアライズしたとしたらxは0と1どっち?
決まってなくて実装依存とか?
13デフォルトの名無しさん:2007/08/28(火) 21:09:45
transient 付いてたらシリアライズされないはずだけど。
14デフォルトの名無しさん:2007/08/28(火) 21:14:29
常識的に考えてx=1だろ
つーか試せばすぐ分かるだろ
15デフォルトの名無しさん:2007/08/28(火) 21:15:07
>>12
インスタンス変数初期化子の方が優先順位高いはずだから、
new A() が終わったら x は 1 になってるはず。
16デフォルトの名無しさん:2007/08/28(火) 21:17:15
優先順位高いじゃなくて、先に実行される、だな。
17デフォルトの名無しさん:2007/08/28(火) 21:20:12
18デフォルトの名無しさん:2007/08/28(火) 21:28:48
>>6
そういう問題なのか?
19デフォルトの名無しさん:2007/08/28(火) 21:40:50
>>13-17
サンクス。デシリアライズ時にはコンストラクタ呼ばれないような気がしてたからさどっちか確信持てなかった。
>>17読んでみる
20デフォルトの名無しさん:2007/08/28(火) 21:43:43
>デシリアライズ時にはコンストラクタ呼ばれない
もし、そうだとしたらばどうやって初期化すると思ったのか教えてくれ
21デフォルトの名無しさん:2007/08/28(火) 21:50:58
Vistaの環境変数の設定、システムのプロパティからだと
システム環境変数と、管理者の環境変数だけで
ユーザ別の変数が設定出来ないのな…

コントロールパネル>>>ユーザーアカウント>>>環境変数の変更

じゃないと出来なくなってるぽい
22デフォルトの名無しさん:2007/08/28(火) 21:53:29
>>21
でっていうwwwwwwww
23デフォルトの名無しさん:2007/08/28(火) 22:07:31
>>20
Java直列化メモ(Hishidama's Java Serializable Memo)
ttp://www.ne.jp/asahi/hishidama/home/tech/java/serial.html
>復元(読み込み)されるときは、シリアライズ可能クラスのコンストラクターは呼ばれないが、
ここらへん
デシリアライズは既にあるオブジェクトを復元するだけだからコンストラクタは呼ばれなくてもいい気がする
あと>>17はざっと読んだ感じシリアライズについては書いてないみたい
24デフォルトの名無しさん:2007/08/28(火) 22:21:14
>>12
transient フィールドはデシリアライズ時には何も代入されない。
コンストラクタも呼ばれない。
初期値が書かれていたとしても、書かれていなかった場合と同じになる。
たとえ transient int x = 3; などと宣言されてても 0 になる。

初期化したければ

private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
in.defaultReadObject();
x = 1;
}

などというメソッドを書く。
private でどこからも呼んでないのに、なぜか呼ばれる不思議メソッド。
25デフォルトの名無しさん:2007/08/28(火) 22:26:39
>>23
たぶん定義されてない。
>>24 が何も代入されないって書いてるけど、それも文書化されてないような。

必ず初期化しておきたい場合については readObject 定義しとけで良いけど。
26デフォルトの名無しさん:2007/08/28(火) 22:28:26
ずっと放置していたRMIの勉強をしているんだけど、6.0でやると色々省略できるようで新しい資料ないかな?
スタブとスケルトンは不要、セキュリティポリシーファイルは読ませるまでは把握。
ところで、jarから起動した時って java.rmi.server.codebase も省略できるの?
27デフォルトの名無しさん:2007/08/28(火) 22:29:49
>>24>>25
不思議メソッドは聞いた事あるが、デシリアライズした所で記述汁とも聞いた。
28デフォルトの名無しさん:2007/08/28(火) 22:30:06
>>24-25
さんくすreadObjectを実装することにします

Java オブジェクト直列化仕様: 3 - オブジェクト入力クラス
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/serialization/spec/input.doc1.html
>Serializable クラスの場合、フィールドは、その型に適したデフォルト値に初期化されます。
>次に、クラス固有の readObject メソッドか、これらが定義されていなければ、defaultReadObject メソッドが呼び出されて、各クラスのフィールドが復元されます。
>直列化復元時には、直列化可能クラスに対して、フィールドの初期化子およびコンストラクタは実行されません。
というわけで呼ばれないみたいですね
2921:2007/08/28(火) 22:50:17
>>22
俺自身がそれで3時間消費したんだよ…orz
30デフォルトの名無しさん:2007/08/29(水) 04:25:36
いまさらw
そもそも板違い
31デフォルトの名無しさん:2007/08/29(水) 08:55:32
>>26
そのjarの中にRMI実装用のインターフェイスや、そのインターフェイスのメソッドで
使用されるクラスやインターフェイスが全部入っているなら、codebaseはいらない。
含まれていないなら読み込み先のURLが必要。
32デフォルトの名無しさん:2007/08/29(水) 10:36:58
java初心者です。eclipse 3.1 で勉強中です。
newwindowをAパネルの中心に表示したいのですが???部分がわかりません。
this.setLocationRelativeTo(this..getParent())と記述しても
モニタの中心に表示されてしまいます。

class A extends JPanel 〜{
    B newwindow = new B();
}

class B extends JFrame 〜{
    B(){
        this.setLocationRelativeTo(???);
    }
}
33デフォルトの名無しさん:2007/08/29(水) 11:27:59
そりゃぁ、どこかでAパネルを受け取らないとだめだろう。
class A extends JPanel 〜{
    B newwindow = new B(this);
}
class B extends JFrame 〜{
    B(A apanel){
        this.setLocationRelativeTo(apanel);
    }
}
34デフォルトの名無しさん:2007/08/29(水) 11:51:59
>>33
了解です。ありがとう御座いました。
35デフォルトの名無しさん:2007/08/29(水) 11:56:04
ちょっといろいろやってみてたら以下でいけました。ありがとう御座いました。

class A extends JPanel 〜{
    B newwindow = new B();
}

class B extends JFrame 〜{
    B(){
        this.setLocationRelativeTo(A.this);
    }
}
36デフォルトの名無しさん:2007/08/29(水) 14:43:34
JMenuをJMenuItemと同じく
マウスをポイントすると反転するようにするにはどうすればいいですか?
37デフォルトの名無しさん:2007/08/29(水) 15:24:10
そういう LookAndFeel の実装を作る

っていうのが正道だと思うが、アドホックにやりたいなら JMenu に addMouseListener して mouseEntered, mouseLeaved が来たときに setBackground で色変えればいいんじゃないかと思うたぶん
38デフォルトの名無しさん:2007/08/29(水) 15:33:01
rs.getInt(0)
だとNULL値が0になってしまうと思うのですが
こういう場合は
rs.getObject(0)で取り出して
if (rs.getObject(0) == null)
{
}
とすればNULL値かどうか判定できるのでしょうか?
39デフォルトの名無しさん:2007/08/29(水) 15:42:48
rs が ResultSet のことだと仮定すると (もうちょっと情報書こうな)、
rs.getInt(0) の後に rs.wasNull() すれば判定できる
40デフォルトの名無しさん:2007/08/29(水) 15:52:15
>>39
ありがとうございました。とても勉強になりました。
41デフォルトの名無しさん:2007/08/29(水) 18:04:56
Cはそこそこ、Javaはぜんぜんレベルです。

ファイルから読み込んだ文字列を処理したくて、
 BufferedReader in = new BufferedReader(new FileReader("foo.txt"));
 String str = in.readLine();
としていて、中身にも問題はないんですが、シークをしたいのに出来ません。
そこで、
 RandomAccessFile in = new RandomAccessFile("foo.txt", "r");
とすればin.seek()も可能になるんですが、System.out.printしてみると
多バイト文字が文字化けします。

BufferedReaderを使いつつもseekする方法か、
RandomAccessFileを使いつつも多バイト文字が化けない方法を教えて下さい。
42デフォルトの名無しさん:2007/08/29(水) 18:11:51
>>41
多バイト文字のエンコードは何?
4341:2007/08/29(水) 18:17:02
>>42
今の所は、入力元も出力先もShift_JISです。
エンコードによって手間は変わりますか?
44デフォルトの名無しさん:2007/08/29(水) 18:20:24
>>43
変わる
RandomAccessFileで文字列の読み込みに使ったメソッドは何?
4541:2007/08/29(水) 18:22:57
>>44
最初の例と同じく、readLine()です。
46デフォルトの名無しさん:2007/08/29(水) 18:44:28
RandomAccessFile と BufferedReader をどうやって繋いだの?
47デフォルトの名無しさん:2007/08/29(水) 18:56:20
じゃないか、RandomAccessFile#readLine を使っただけか。

RandomAccessFile#readLine は Javadoc の説明によれば文字コードをまったく考慮しないようだから、ちゃんと文字コードの変換を通すようにしないと。
たぶん Channels#newReader を使うのが簡単っぽい。

RandomAccessFile ras = ......... ;
BufferedReader reader = new BufferedReader(Channels.newReader(ras.getChannel(), "Shift_JIS"));

シークしたときは Reader を作り直すことと、
多バイト文字の途中の位置にシークしてしまった場合は正しく読めないから、そういうことが起きないように気をつけること。
4841:2007/08/29(水) 19:02:38
>>47
Readerは作り直さないといけないんですね。
Cで言う所の
 in = fopen("foo.txt", "r");
 fseek(in, 0L, SEEK_SET);
 str = fgets(in);
みたいな感じを実現したかったんですが。
めげずに頑張ります。
ありがとうございました。
49デフォルトの名無しさん:2007/08/29(水) 19:06:25
だって BufferedReader は名前の通りバッファリングしてるから。
ras を seek しても過去にバッファしたデータを読んでたら意味ないでしょ。

単に使い勝手の問題なら、BufferedReader と RandomAccessFile をセットに持つ新しいクラスを作れば?
50デフォルトの名無しさん:2007/08/29(水) 22:35:00
シンプルに getByteと new String(bytes, codeSet) 使えば?
51デフォルトの名無しさん:2007/08/29(水) 22:43:10
htmlでタグにはさまれてる値を取得したいのですが、
どうやるのが、一般的ですか?
正規表現?パーサ?
52デフォルトの名無しさん:2007/08/29(水) 22:47:54
タグにはさまれてる値ってなによ
53デフォルトの名無しさん:2007/08/29(水) 22:48:33
例えば、
<td>hoge</td>
のhoge
54デフォルトの名無しさん:2007/08/29(水) 22:52:09
td 限定でいいんだったら正規表現でお手軽に <td>(.*)</td> とかでいいんじゃない
55デフォルトの名無しさん:2007/08/29(水) 22:59:35
正規表現か。
ソース読むとき、正規表現で??って一瞬止まってしまうという。。
要するに苦手なわけだが。
56デフォルトの名無しさん:2007/08/29(水) 23:02:55
xmlの解析を勉強してみるといい。
htmlは緩いから逆に難しい。
正規表現を覚える方が楽だけどな
57デフォルトの名無しさん:2007/08/29(水) 23:10:00
助言お願いします。JSPで会員専用ページ(member_page.jsp)とログインページ(login.jsp)を作りました。

ログインページでクッキーを
Cookie cookie = new Cookie("key",key.toString());
cookie.setMaxAge(60*60*24*365);
response.addCookie(cookie);
のようにして、認証コードを埋め込もうとしているのですが、その直後、
pageContext.forward("member_page.jsp");
として会員ページに転送し、member_page.jspでは早速そのキーをクッキーより読み込む仕様にしていますが、
クッキーがこの時点で書き込まれていないようなのです。

なんとか、クッキーだけでもlogin.jspの段階で送信させてしまうことは出来ませんでしょうか?
58デフォルトの名無しさん:2007/08/29(水) 23:20:59
正規表現でエンティティとかパラメタエンティティの展開ってどうやんの?

普通、再帰的に定義されてるはずだが。

用途限定なら小型のパーサ書いた方が早いと思うのはブラウザをパーサから実装できる人間の発想か?

HTMLParserっていくつかあるぞ。それ使えば早いんじゃない?
59デフォルトの名無しさん:2007/08/29(水) 23:27:52
多次元配列をたくさん扱うプログラムを書いていたのですが
OutOfMemoryErrorとなってしまいます。
そのため処理の途中で使わなくなってしまった配列を消すことで
このエラーを回避しようとしているのですが多次元配列の削除の仕方がわかりません
教えてください

またOutOfMemoryErrorを回避するもっといい方法があれば教えてください
よろしくお願いします
60デフォルトの名無しさん:2007/08/29(水) 23:38:28
null を代入してその配列をどこからも見えなくすれば消える
たくさんの程度によるけど、デフォルトではたしかヒープの最大が 64MB なので、同時使用量がそれを超えるようなら、ヒープを増やすしかない
ヒープを増やす場合は java コマンドでクラス名の前に -Xmx○○○m オプションを付ける (○○○はメガバイト数)
61デフォルトの名無しさん:2007/08/30(木) 00:04:18
>>59
int[][] a;
....
.........
a[5] = null
62デフォルトの名無しさん:2007/08/30(木) 00:37:47
>>59
OutOfMemoryErrorが発生するという事は、相当酷いコードだろうな。
悪い事は言わないから、レビューしてもらえ。

>多次元配列をたくさん扱う
>使わなくなってしまった配列を消す
つまり、可変リストを使えという事だ
63デフォルトの名無しさん:2007/08/30(木) 02:12:14
>>59
>またOutOfMemoryErrorを回避するもっといい方法があれば教えてください

メモリを積む
64デフォルトの名無しさん:2007/08/30(木) 02:27:23
nullぶちこんでもgcは思った以上に気まぐれ屋さんなのでデータ構造やロジック見直し推奨。
それでも駄目な場合はヒープサイズ増やす。
65デフォルトの名無しさん:2007/08/30(木) 02:44:24
>>63
馬鹿かこいつw
javaには関係ない。
66デフォルトの名無しさん:2007/08/30(木) 03:08:29
>>65
ハード増強で解決できるなら変にソフトいじられて最悪の事態を招くより断然良い
67デフォルトの名無しさん:2007/08/30(木) 03:24:37
・ヒープやスレッドスタックサイズ周りの問題だったらメモリ増強しても意味なし
・メモリ増やしてうれしいのはガベージコレクションの発生頻度が下がって少し早くなる
でおk?
68デフォルトの名無しさん:2007/08/30(木) 03:56:30
>>67
すごい奴来たな。512MB-->2GBが意味ないらしいw
お前は一生10年前のハイスペックマシン使ってろや
6959:2007/08/30(木) 04:24:25
みなさんアドバイスありがとうございます.
>>60の方のヒープを増やす方法をとりたいと思います.

僕は普段netbeansを利用してソースを書いているので
その辺について少し調べてみたのですが,netbeans.confの6行目くらいにある
netbeans_default_options="-J-Xms32m -J-Xmx128m -J-XX:PermSize=32m
-J-XX:MaxPermSize=160m -J-ea -J-Dapple.laf.useScreenMenuBar=true"
というところを変更すればいいということまでわかりました
PCの物理メモリが2Gですので、ためしに
-J-Xms32m → -J-Xms512m
-J-Xmx128m → -J-Xmx512m
のように変更してみたのですがまったく効果が感じられません
どこかまだ不十分なところがあるのでしょうか?
たびたびすみませんがよろしくお願いします
70デフォルトの名無しさん:2007/08/30(木) 05:00:17
普段の俺なら釣られていたが今日は流石にスクールデイズが傑作すぎたw

javaコマンドの -Xms -Xmxだよ。あれがjavaヒープサイズの制御。

オブジェクトの割当てだけなら関係ないが、もしJNI使ってたらもしかしたらそっちがネイティブメモリ食ってるかも知れんが、その場合はVMの実装次第だな。
71デフォルトの名無しさん:2007/08/30(木) 05:08:36
IDEからなら↑の引数をアプリケーションの起動に使うVMに渡す設定をするところがあるはず。
netbeansは知らんが。
72デフォルトの名無しさん:2007/08/30(木) 07:04:39
>>69
人の話聞いてるか?
配列やめて書き直せ、ヒープサイズでどうこうしても512MBも指定してどうにもならんような糞コード書くな
これだから配列は・・・
73デフォルトの名無しさん:2007/08/30(木) 07:19:52
ImageIconクラスのオブジェクト、生成時にサイズを指定することはできますか?
若しくは配置するコンポーネントのサイズに合わせて拡大縮小する方法を教えてください。
74デフォルトの名無しさん:2007/08/30(木) 07:20:21
配列ってヒープなの?
75デフォルトの名無しさん:2007/08/30(木) 07:33:01
59はコンパイル時の環境のヒープを間違って増やしてるんだろうな
実行時に効果が感じられないのも無理はない
76デフォルトの名無しさん:2007/08/30(木) 07:49:05
>>73
生成されている元サイズのImageIconからgetImageでImageを取って、
getScaledInstanceでサイズ変更したImageをsetImageで設定したImageIconを使えばいいんじゃないの?
77デフォルトの名無しさん:2007/08/30(木) 07:53:54
JavaでJavaScriptのようなクリッカブルマップを作ることはできますか?
7876:2007/08/30(木) 07:58:26
ImageIcon icon = ...;
icon.setImage(icon.getImage()....
みたく元サイズのImageIconのImageを上書きするイメージでsetImageって言ったけど、
リサイズ後のImageを使ってnew ImageIcon(Image)で新たに生成してもいいと思う。
7973:2007/08/30(木) 08:04:46
上書きの方法で問題なく出来ました。
素早い回答ありがとうございました。
80デフォルトの名無しさん:2007/08/30(木) 09:38:20
>>57
JSPとかServletとか昔ちょこっとだけしかやってないんで間違ってるかもしれんが、
Cookie じゃなくて session オブジェクトに認証コード登録するんじゃ
だめなのか?
81デフォルトの名無しさん:2007/08/30(木) 09:47:40
>>77
JFreeChartの中にそういう機能があった希ガス
82デフォルトの名無しさん:2007/08/30(木) 10:34:21
>>68
釣りだと思うが、OutOfMemoryには本当に意味が無いから。

>>74
では、ヒープとは何ですか?
83デフォルトの名無しさん:2007/08/30(木) 10:56:11
>>82
SunのJVMとIBMのJVMではそのへんの仕様が違うのはご存知?
84デフォルトの名無しさん:2007/08/30(木) 11:09:29
>>83
違ったからどうなのだと問いたい気分だが
85デフォルトの名無しさん:2007/08/30(木) 12:14:24
クリカッブルマップはHTMLなんだが。
86デフォルトの名無しさん:2007/08/30(木) 12:21:00
クリスマスカップルに見えた
87デフォルトの名無しさん:2007/08/30(木) 12:26:39
クリッカブルマップです…clickable (= click + able)
88デフォルトの名無しさん:2007/08/30(木) 12:33:09
typoです。本当にありがとうございました。
89デフォルトの名無しさん:2007/08/30(木) 13:26:49
空気の読めない奴だ
90デフォルトの名無しさん:2007/08/30(木) 15:30:27
船頭が多いなぁ( ´ー`)y−~~
>>82
OutOfMemoryは、ヒープから割り当てを取ろうとして発生する
なので、メモリを積んだだけで解決しないというのは一理ある。
ヒープのサイズが変更されなくては解決しないからだ。
ここであれてる原因は、「何故意味が無いか」を全く語っていない点

-XX:+AggressiveHeapを使っているのであれば、メモリ増設は即ヒープサイズの余裕につながり
こういう状況においてはメモリ増設は意味を持つと言える。

ただしどちらも言葉にしていない前提があってのこと。

質問者はそののち、Netbeansを起動しているJVM内で自プログラムを実行していると
錯誤していることが分かった。>>69
この場合、Netbeansの起動オプションを変更していなければヒープサイズの最大は変わらない。
なので、>>69 の対応は他の回答者に比べて至極真っ当。
問題は、Netbeansが実行時に他JVMを起動していること。
NetbeansのJVMのサイズは関係がない。   なので>>71,75の回答が正解。
プロジェクトのプロパティの実行設定で実行時オプションを与えることができる。

>>72
実際何をしているコードか知りたいのはあるが配列=糞かどうかは何とも言えない。
アプリケーションによってはGB単位のオンメモリテーブルを確保しておいて
効率を上げるということもありうるから。その場合、シンプルな操作が要されるだけなので
多機能なオブジェクトとして管理せず配列で管理するという選択もありではあると思う。
91デフォルトの名無しさん:2007/08/30(木) 17:46:03
Windows上のSwingで画面を作っています。
チルトホイールマウスを使って、横スクロールに対応させる方法はあるでしょうか?
試してみたところ、SWTは標準で対応しているようですが、Swingは標準では対応
していないようです。
92デフォルトの名無しさん:2007/08/30(木) 17:55:24
SWTが標準で対応しているんじゃなくて、対応しているシステム上のSWTで使えるというべき。
93デフォルトの名無しさん:2007/08/30(木) 17:58:16
>>91
pureJavaでは無理
94デフォルトの名無しさん:2007/08/30(木) 18:50:28
Macじゃ、MightMouseでのJTable横スクロールはJaveSE6(まだDP版)で動くの確認したよ。
今手元に、TrackPointしかないから、Windows版はどうなるかは分からないなぁ。
95デフォルトの名無しさん:2007/08/30(木) 20:15:46
>>90
そこまで考えて設計した奴ならば、OutOfMemoryの対策くらいできるだろw
96デフォルトの名無しさん:2007/08/30(木) 20:26:41
>>95
いや、数学演算だったり、物理演算だったりすると
言語や実行環境には詳しくなくても複雑なロジックを実装したりする人がいるんだな、これが。
大量の多次元配列って聞いてそういう学生を思い出したから。
97デフォルトの名無しさん:2007/08/30(木) 20:40:34
単に再帰の深さが深すぎるんだろ
んで毎回配列を作る場合とか
98デフォルトの名無しさん:2007/08/30(木) 20:51:10
>>97
何か二人だけなきがするが・・・・
再帰が深ければOutOfMemoryじゃなくてStackOverfflownが起こってると思うんだ。

というか、OutOfMemoryを知らないで再帰のロジックが書ける人は少ないと思う。
99デフォルトの名無しさん:2007/08/30(木) 20:58:47
スタックには参照はつむけど実体はヒープにあるんじゃないの?
100デフォルトの名無しさん:2007/08/30(木) 21:02:34
ヒープに詰まれるかはコードとVM次第だな
そんな事を意識しなくてはならない事が問題だが
101デフォルトの名無しさん:2007/08/30(木) 21:30:35
いや、特段意識する必要はないんじゃない?

StackoverFlowとOutOfMemoryの違いは、
ttp://java.sun.com/docs/books/jvms/second_edition/html/Overview.doc.html#6654
この辺り参照。
102デフォルトの名無しさん:2007/08/30(木) 22:20:35
eclipseで言えば、自分のプログラムをeclipse経由で実行するときにvmargsを設定できる。
それは、上のほうで言ってた引数が使えるですので、サイズを変更するといいと思う。
103デフォルトの名無しさん:2007/08/30(木) 22:31:34
この間入ったプロジェクトじゃ対したアプリケーションでもないくせに、ヒープが1Gに設定されていてワロタ
適当に配列とか無駄な参照とか殺したら64MBでもサクサクと動いた。

意外と多いんじゃない、極端ではないにせよこの手の経験。
104デフォルトの名無しさん:2007/08/30(木) 22:48:58
Javaの配列の実体はHeapだろ?
C#じゃないんだから
10559:2007/08/30(木) 22:52:52
皆さんありがとうございます
>>90の方のとおりにやったところOutOfMemoryErrorは回避できました
106デフォルトの名無しさん:2007/08/30(木) 22:53:58
Collections.synchronizedListってどういうときに使うんですか?
これを使ってもIteratorでまわすときはsynchronizedでくくる必要があるんですよね?
107デフォルトの名無しさん:2007/08/30(木) 23:03:54
>>106
丸々答えが書いてあるので、>>1 としたいところ。
少なくても1.5ではそう書いてあった。
108デフォルトの名無しさん:2007/08/30(木) 23:06:28
同期が必要な時って書いてあるだろ?
Iteratorはそのリストの返すIterator次第
1.5以降はConcurrentMap使え
109デフォルトの名無しさん:2007/08/30(木) 23:08:47
>>106
マルチスレッドを勉強したら自ずと分かってくるはず。
synchronizedの意味と、スレッド間で何を、どういう単位で守るかの意味が分かればね。
110デフォルトの名無しさん:2007/08/30(木) 23:14:34
Collections#synchronizedXxx なんて使わないよ、実質意味ないもん
111デフォルトの名無しさん:2007/08/30(木) 23:19:11
>>109
勉強したんです。
synchronizedでくくってたらCollections.synchronizedListなんていらないと思いました。
112デフォルトの名無しさん:2007/08/30(木) 23:28:53
>>111
synchronizedを使うかCollections.synchronizedListを使うかは時と場合によtって使い分ける。
例えば、あまりよくない例だが、Listの参照をオブジェクトの外に出すのであればsynchronizedでくくれとドキュメントに記述して守らせるよりも、synchronizedListとした方がいい。
だが、それよりもListは配列や不変Listにして参照を返すのが定石だが・・・この辺はマルチスレッドを学んでいくと色々と解ると思う

>>110
意味はある。
113デフォルトの名無しさん:2007/08/30(木) 23:43:48
例えば、
private final List<String> list = Collections.synchronizedList(略);
public void add(String str) {
  list.add(str);
}
はスレッドセーフ。
ところが・・・
public void addIfAbsent(String str) {
  if(list.contains(str) == false) {
     list.add(str);
   }
}
はアウト
114デフォルトの名無しさん:2007/08/30(木) 23:45:39
private final List<String> list = new ArrayList();
public void add(String str) {
synchronized {
list.add(str);
}
}

これでいいんでしょ?
Collections.synchronizedListなんて必要ありませんよね?
115デフォルトの名無しさん:2007/08/30(木) 23:50:49
よくない
× synchronized {
○ synchronized (list) {
116デフォルトの名無しさん:2007/08/30(木) 23:52:43
>>115
それはミスっただけです。
でも、この書き方があれば Collections.synchronizedListなんて必要ないですよね?
117デフォルトの名無しさん:2007/08/30(木) 23:54:36
>>116
誰かが忘れるかもね。

複数人で書いている時とか、
安全性を重視してパフォーマンスは落ちても
スレッドセーフな実装のインスタンスを
返してあげることに意味があることはある。
118デフォルトの名無しさん:2007/08/30(木) 23:58:23
>>116

Object ock = new Object(); l

synchronized (lock)

コレクションの処理

}

同期については全てこれで事足ります。
異論があったらかかってきなさい。
119デフォルトの名無しさん:2007/08/31(金) 00:00:56
>>114
うん、必要ない。
だが、それを言うのであれば
private final List<String> list = new ArrayList();
public synchronized void add(String str) {
list.add(str);
}
でもいいし、
private final List<String> list = new ArrayList();
private final Object obj;
public void add(String str) {
  synchronized(obj) {
    list.add(str);
  }
}
でもいいし、
private final List<String> list = new ArrayList();
private final Lock lock;
public void add(String str) {
  lock.lock();
  try {
    list.add(str);
  } finally {
    lock.unlock();
  }
}
でもいい。
実装方法が複数あることに問題ある?
120デフォルトの名無しさん:2007/08/31(金) 00:02:36
>>119
その中のどれが一番効率いいのかね?
俺なら真ん中かな。
121デフォルトの名無しさん:2007/08/31(金) 00:03:24
>>118
別のクラスから同期とろうとしたらそのObject型のlockをそこまでもっていくのか?
122119:2007/08/31(金) 00:05:31
add程度じゃ差はでないだろうね
処理が複雑になってくれば来るほど、ロックオブジェクトを使う方が解りやすく柔軟性が高くなる。
waitが絡んでくると、LockとConditionを使う方が楽。
並行処理考える時は原則として効率度外視の可読性重視だよ。
123デフォルトの名無しさん:2007/08/31(金) 00:07:26
>>121
別のクラスで同期処理をさせるという事が設計ミス。
リストを管理しているクラスが必要な処理を全て同期させて内包する事が重要。
そういう意味ではCollections.synchronizedListは実は設計ミス
124デフォルトの名無しさん:2007/08/31(金) 00:17:54
セキュリティポリシーファイルに関して質問です。
一般的な解説であればVMの起動引数でポリシーファイルを指定すると思いますが、製品としてリリースするような場合は起動時に自動的に設定するものなのでしょうか?
それとも通常通り(?)VM起動引数に設定?
125デフォルトの名無しさん:2007/08/31(金) 00:36:09
私は同期ラップ賛成派です。やりたいことが決まってるのに、
実装ミスを犯す可能性を作る必要性が私には見つけられない。

ま、質問相談スレなので、それらしいことをしないと。
いろいろ議論してる人々は、synchronizedList の戻ってくる
Listを実装したラップクラスのソースは見てるのかしら。特に>>114 さん。

中でやってることは一緒なのですが…
126デフォルトの名無しさん:2007/08/31(金) 00:41:43
俺はシングルスレッド派w
マルチスレッドを注意深く意識する実装なんて数年に1回程度
127デフォルトの名無しさん:2007/08/31(金) 00:51:44
最近はマルチコアが流行り出してるからそうも言ってられないかもしれない
128デフォルトの名無しさん:2007/08/31(金) 00:53:51
という話はよく聞くんだが、フレームワークでも作るのでなければという感じはある
Servletもそうだけど、マルチスレッドで動いているけど作る部分は原則としてシングルスレッドで作るってケースが多い
129デフォルトの名無しさん:2007/08/31(金) 01:04:42
でも、Servletがマルチスレッドで動いていることを忘れているコードもよく見かける。
しかも、排他処理のコードも微妙に間違ってたりするし。

ぱっと見でおかしいことはわかるし、直すのも簡単なんだが、
どこがどう間違っているのかを説明するのが大変なんだよなぁ。
130デフォルトの名無しさん:2007/08/31(金) 01:08:45
向上心のある奴でない限りはマルチスレッドと言えば、ThreadとRunnableとsynchronized程度をなんとなく知っている程度だろうからな。
131デフォルトの名無しさん:2007/08/31(金) 04:06:24
俺が言おうとしたことはすべて>>90が言ってくれた
132デフォルトの名無しさん:2007/08/31(金) 04:17:44
>>126は逆にSwingのEDTで凡ミスしそうだな。
SwingのEDTの存在を忘れてるコードをよく見る。
133デフォルトの名無しさん:2007/08/31(金) 07:22:33
>>132
そういう奴はSwingがシングルスレッドモデルという事すら知らないのでは?
134デフォルトの名無しさん:2007/08/31(金) 08:24:47
>>133
まあ、ちょっとやそっとじゃ表面的な問題しか浮彫りにならないからね。
それよりかは比較的、重量と軽量のコンポーネント混ぜたときの方が困りやすい。

どっちが危険かは前者だけど、発覚しやすいのは後者だからねぇ。
135デフォルトの名無しさん:2007/08/31(金) 10:54:13
スレッドを使わずに
メッセージダイアログを一定時間表示することはできますか。
136デフォルトの名無しさん:2007/08/31(金) 12:19:05
スレッドを使わなければ何も出来ません
137デフォルトの名無しさん:2007/08/31(金) 12:37:11
>>134
ttp://www.java.net/download/jdk7/changes/jdk7-b19.html
4811096 Allow mixing of heavy and lightweight components

へーい。YOU
昨日から、重量と軽量のごっちゃまぜは解禁になったぜー
JDK7が出たら、これに関する質問が飛び交いそうだね。
138デフォルトの名無しさん:2007/08/31(金) 12:39:24
>>137
何かchangelogページが消えてるみたいなんで。
ttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4811096
139デフォルトの名無しさん:2007/08/31(金) 13:20:44
printlnで、文字列リテラル「”」を表示する方法ってありますか?
シングルを2つ表示「’’」意外でお願いします。
140デフォルトの名無しさん:2007/08/31(金) 13:25:04
>>139
" を表示したいなら println("\"")
141デフォルトの名無しさん:2007/08/31(金) 13:52:50
どなたか助けてください。
今までJava CPadという簡易エディターを使ってたんですが、今日からEclipseに乗り換えました。
そしてサーブレットを作ろうとしたら「javax.servletは存在しません」と言われました。
環境変数の問題だった事にすぐ気がついて環境変数の設定を行ったんですが依然として同じコンパイルエラーが。
おかしいと思いJava Cpadのエディターの方でコンパイルしてみたら、こちらでは問題なくjavax.servletを認識してくれてコンパイルが成功しました。
Eclipseの設定の問題なのか、もしくは別に問題があるのか、どなたか御意見をお聞かせください。
142デフォルトの名無しさん:2007/08/31(金) 14:01:24
>>141
Eclipseの設定の問題だって自分で言ってるのは何なんだよw
143デフォルトの名無しさん:2007/08/31(金) 14:19:41
>>141
> google.co.jp eclipse servlet javax.servlet
144デフォルトの名無しさん:2007/08/31(金) 14:40:34
>>141
パッケージエクスプローラから対象のプロジェクトを選ぶ。
右クリック→プロパティ→Javaのビルドパス→「ライブラリー」のタブを選択
→「JARの追加」もしくは「外部JARの追加」でservlet.jarを追加する。
145デフォルトの名無しさん:2007/08/31(金) 14:49:08
java3Dはclassファイルとhtmlファイルだけで出来ますか?
146デフォルトの名無しさん:2007/08/31(金) 14:56:06
ソースコードを保存しようとしたとき
クラス名.java で登録しても
クラス名しかメモ帳には指示されない・・・
147デフォルトの名無しさん:2007/08/31(金) 14:56:36
>>145
実行環境のJREとブラウザ、それとjava3dの実装ライブラリが必要。

というか、ちょっとやりたいことが分からない。
やりたいことを書けば資料へのポインタが出てくる気がするぞ。
148デフォルトの名無しさん:2007/08/31(金) 15:11:41
>>146
保存時にファイル名に"hogehoge.java"のように"で囲えばhogehoge.javaで保存される。
余計なhogehoge.java..txtのような拡張子も付かない。
って話ではないのか?
149デフォルトの名無しさん:2007/08/31(金) 15:18:59
>>148
返答どうも
やってみましたが さっきのままです・・・
150デフォルトの名無しさん:2007/08/31(金) 15:26:33
>>146
ファイル名に「クラス名.java」と入れて保存ボタンを押しても
メモ帳(=notepad.exe?)のタイトルに「クラス名」としか表示されない
ってことなのかな?

OSやらアプリやらの環境が違うのかね…
151デフォルトの名無しさん:2007/08/31(金) 15:26:53
>>149
話が見えないんだが、
エクスプローラの「登録されている拡張子は表示しない」オプションの設定に関わる問題?
152デフォルトの名無しさん:2007/08/31(金) 15:32:19
なんにしてもJavaについての質問じゃなくて
メモ帳とやらのアプリケーションの使い方に関する質問っぽいな
153デフォルトの名無しさん:2007/08/31(金) 15:43:06
サーブレットで生成した入力フォームに入力した内容を別のサーブレットで受け取ることはできないのでしょうか?

現在、HTMLで作った入力フォームに入力した内容をサーブレットで受け取ることはできています。
154デフォルトの名無しさん:2007/08/31(金) 15:52:07
受け取ったサーブレットの中で、別のサーブレットのURLに
POSTすればいいんではないかと思います。
155デフォルトの名無しさん:2007/08/31(金) 16:00:58
>>154
empno = Integer.parseInt(request.getParameter("empno"));
のように、情報を取得したいのですが、うまく受け取ることができません。
nullになってしまいます。
156デフォルトの名無しさん:2007/08/31(金) 16:43:58
>>155
解決しました。
formの位置がおかしく、データが渡されていなかったようです。
157デフォルトの名無しさん:2007/08/31(金) 16:55:52
メモ帳を使うなってお告げじゃね?
158デフォルトの名無しさん:2007/08/31(金) 19:04:43
>>151
登録されている拡張子は表示しないにチェックが入ってましたorz
解決できました。
返答ありでした
159デフォルトの名無しさん:2007/08/31(金) 21:00:39
お前ら、>>146から補完して回答出すなんてすごいな。
160デフォルトの名無しさん:2007/08/31(金) 21:55:06
鍛えてますから。
161デフォルトの名無しさん:2007/09/01(土) 03:06:45
「シンボルが見つかりません」コンパイルエラーがインスタンス生成用の別クラスの名前を指してるんです。

ClassA inst = ClassA();
^

ClassA inst = ClassA();
         ^

って感じで。でもクラスファイルは同じフォルダに入れてるし、パッケージは設定してないし…… さっぱりです。
一応パッケージに収納してやってみたけどそれも無理でした。ちなみにツールは使ってません。
誰かわかりますか?
162デフォルトの名無しさん:2007/09/01(土) 03:15:57
new
163デフォルトの名無しさん:2007/09/01(土) 03:20:04
ClassA inst = 乳 ClassA();
164デフォルトの名無しさん:2007/09/01(土) 03:22:21
さっぱりな質問だな
165デフォルトの名無しさん:2007/09/01(土) 03:43:31
>>161
「インスタンス生成用の別クラス」なんて言われても解らんですよ

mainメソッドが存在するクラスをコンパイルしたら大丈夫…
なんてのは無しですよ
166161:2007/09/01(土) 03:59:45
すみません、説明が下手でした……

public class ClassB {
public static void main(String[] args) {
ClassA inst = new ClassA();
inst.ClassA(10);
}
}

public class ClassA {
ClassA(int n) {
(省略)
}
}

ようはこれでClassBの方をコンパイルしようとすると「ClassA シンボルが見つかりません」っていうコンパイルエラーが出るんです。
ClassAは普通にコンパイルできるんですが、ClassBの方はClassAと同じフォルダに入れても同じパッケージに入れても「シンボルが見つかりません」
っていうエラーが出るっていう訳です。
理由がわかる方いますかね……? 説明下手ですみません。

167デフォルトの名無しさん:2007/09/01(土) 04:08:55
ClassA inst = new ClassA() はコンストラクタの呼び出し。
ClassA には int 1 個を引数とするコンストラクタしか定義されていないから、
呼び出せない。

次の行は一見メソッド呼び出しに見えるかもしれんが、
コンストラクタを呼ぼうとしているため NG。
存在するインスタンスのコンストラクトを実行する・・・という矛盾。
168デフォルトの名無しさん:2007/09/01(土) 04:11:28
クラスパス?
169デフォルトの名無しさん:2007/09/01(土) 04:22:07
とりあえずClassAのインスタンスを作ったあとでClassAの状態をn=10で再設定しようとしたのか。
そういう書き方を思いつくようなら、もう一度、インスタンス生成について勉強した方がいいと思う。
エラーの原因は>>167の言う通りで、インスタンスの生成はClassA inst = new ClassA(10);ですむ。
170デフォルトの名無しさん:2007/09/01(土) 07:00:03
public ClassA(){
setHoge(DEFAULT_VALUE);
}

public ClassA(int n){
setHoge(n);
}


public void setHoge(int n){
this.n=n;
}

より良くはこうするべきだな。
いい加減なコード書いても後で大変な目に遭うだけ。
171デフォルトの名無しさん:2007/09/01(土) 07:57:07
>>170
ClassAの詳細や設計方針が分からないからそうすべきとは限らんよ
そうした場合でも
public ClassA(){
setHoge(DEFAULT_VALUE);
}

public ClassA(){
this(DEFAULT_VALUE);
}
の方が良くないか?
setHogeするだけならいいがコンストラクタの中身が複雑になってくると記述の重複が気になる
まあ引数なしと引数ありでやることが違う場合もあるだろうから
ClassAの詳細が分からないことには何とも言えんが
172デフォルトの名無しさん:2007/09/01(土) 10:40:05
private final Object obj1;
private final Object obj2;

private void test1 () {
synchronized(obj1) {
・・・なんらかの処理

test2();
}
}


private void test2 () {
synchronized(obj2) {
・・・
}
}


この場合、test2();を実行中はtest1は同期されているのでしょうか?
173デフォルトの名無しさん:2007/09/01(土) 11:10:34
test1 () を呼んだ場合の事だよね?
test1 () 内部でtest2 () を呼んでいる間、obj1は同期されているのでは
174デフォルトの名無しさん:2007/09/01(土) 11:15:29
>>173
そうなんですね。ありがとうございました。
test1()が数十行になってしまうんで、外出しにしたかったんです。
175デフォルトの名無しさん:2007/09/01(土) 11:26:09
>>172
synchronizedをネストさせるのはタブーだよ
デッドロックを起こさない為にもロックオブジェクトを無闇に作ってはいかん
同じロックオブジェクトに対する同期化のネストはOKだけど、なるべく少なくするのが正しい。
176デフォルトの名無しさん:2007/09/01(土) 11:30:09
>>175
private void test2 () {
synchronized(obj1) {
・・・
}
}

こう変更すればOKなんですか?
そもそも外出しにしない方がよいのでしょうか?
すみません、質問ばかりで・・・。
177175:2007/09/01(土) 11:39:55
最初から最後まで同期とっているんだし、これで問題がないんじゃない?

private synchronized void test1 () {
・・・なんらかの処理
test2();
}
private synchronized void test2 () {
}

ちなみに
private void hoge() {
synchronized(this) {
}
}

private synchronized void hoge() {
}
とは、ほぼ同質。
178デフォルトの名無しさん:2007/09/01(土) 11:43:25
JBuilderを使ってSwingアプリを作りました。
テキストラベルなどの文字はWindowsマシン上で最適にしたのですが
Linuxで動かすとフォントサイズが大きくなって、表示されない部分が発生しています。
フォントはDialogなのですが物理フォント(MSゴシック等)にしないのダメなのでしょうか?
179デフォルトの名無しさん:2007/09/01(土) 11:46:48
>>177
private void test1 () {
・・・おっぱいもみもみの処理

synchronized(obj1) {
・・・なんらかの処理

test2();
}
}

実はおっぱいもみもみの処理もあるんです。
その、おっぱいもみもみの処理は同期させなくてよいのです。
180177:2007/09/01(土) 11:51:22
>>179
>>177
private void test1 () {
・・・おっぱいもみもみの処理
同期化する処理();
}

private synchronized void 同期化する処理() {
・・・なんらかの処理
test2();
}
181デフォルトの名無しさん:2007/09/01(土) 11:52:12
>>180
なるへそ。さんきゅーべりーまいっちんぐ。
182デフォルトの名無しさん:2007/09/01(土) 11:53:05
>>178
pack() を使えば最適な大きさにしてくれるでしょ
全部固定配置の固定サイズで作っているならば、実行環境とフォントに依存するのは諦めるしかない
183デフォルトの名無しさん:2007/09/01(土) 11:56:14
>>178
そのテキストラベルのレイアウトをレイアウトマネージャにまかせずに自分でやってないか?
自分の環境だけで動作させるならそれでも構わないけど、
他環境のことも考えているならその表示の最適化とやらなんてやってはだめだ。
本当に各環境に応じて自前で調整したいなら、環境ごとの表示のパラメータを得て、
それに合わせてフォントや配置を選択することをやらないといけないが、やっていないだろ?
184デフォルトの名無しさん:2007/09/01(土) 12:00:07
まあWindowsで最適な表示になるようにしたんやからLinuxで最適でなくなるんは至極当たり前の結果やね
185178:2007/09/01(土) 12:15:23
皆様。回答ありがとうございました。
コンポーネントのlayoutをnullにして、各部品の座標位置は自分で指定しました。
グリッドバッグレイアウトでやらなきゃいけなかったってことでしょうか?
いまから修正するのは心が折れそうです。
良くない方法かもしれませんが、文字のサイズがPC環境に依存しなければ
今のところ何とかなりそうなのですが、良い方法はありませんか?
186デフォルトの名無しさん:2007/09/01(土) 12:40:46
ありません。
nullレイアウトは奨励されないという注意書きを読まなかったあなたの責任です。
Windows専用で割り切るのが一番良い方法です。
187デフォルトの名無しさん:2007/09/01(土) 12:44:17
下のように2つのフレームを作成し、
一度2つのフレームを見えないようにする。(他のソフトの下に隠れさせて見えないようにする)
そして、test1を可視状態にする。

質問:このときtest2も可視状態するにはどうしたらいいですか?

----------------------------------------------------------------------
import javax.swing.*;

public class Test {
    public static void main(String[] args) {
        Test test1 = new Test();
        Test test2 = new Test();
    }
    Test() {
        JFrame frame = new JFrame();
        frame.setVisible(true);
    }
}
188デフォルトの名無しさん:2007/09/01(土) 12:50:15
起動するFrameは1つにすれば?
表示するコンポーネントを切り替えれば済むじゃん。
189178:2007/09/01(土) 12:55:06
そうですか・・・
こういう場合に、フレームのサイズも固定でやったらダメなんでしょうね。。
やり直します。
190デフォルトの名無しさん:2007/09/01(土) 12:58:13
>>187
フレームのWindowEventを監視してアクティブになったらもうひとつのフレームも前面に移動
191デフォルトの名無しさん:2007/09/01(土) 13:00:37
>>178
ダメかどうかは要件によるだろ
Windowsで最低解像度を制限する前提ならば固定サイズでもあり
192デフォルトの名無しさん:2007/09/01(土) 13:09:55
>>185
レイアウトマネージャを使うように変更するのがそんなに大変なレイアウトなんだろうか?
でも、そんな複雑なレイアウトを各部品の位置とサイズの手動設定でやろうとする方が心が折れそうだ。
JBuilderにはビジュアルにレイアウトマネージャを使ったレイアウトをするコードを吐くツールってないのか?
どんなレイアウトか知らないが、GridBagLayoutだけがレイアウトマネージャじゃないし、
異なるマネージャが設定されたコンテナの組み合わせで全体を構成する方法だってある。
193デフォルトの名無しさん:2007/09/01(土) 13:38:50
まあ、ありがちな話だが全部のコンポーネントが最上位のフレームに配置されてんだろう。
感覚でレイアウトしているからレイアウトマネージャの存在も知らなかったんだろうね
最近のJBuilderはどうかシランが、以前はかなり糞IDEだった記憶がある
194デフォルトの名無しさん:2007/09/01(土) 14:11:16
>>188
どうしても2つのフレームを使ってやりたいので・・・

>>190
WindowEventを監視することによりアクティブになったかどうかを判定することが出来るようになりました。
ありがとうございます。


あつかましいことだとは思いますがまだ分からない点がありますのでまた質問させてください。
質問:フレームを前面に移動。(アクティブにする)
toFront()、setAlwaysOnTop(true)を試してみたのですが駄目でした。
195デフォルトの名無しさん:2007/09/01(土) 14:19:01
実現したい事がさっぱり伝わらない
とりあえず、つ JDesktopPane
196デフォルトの名無しさん:2007/09/01(土) 14:40:19
>>194
Window#toFrontで前面に出せると思うけど。
toFrontを実行する機会をうまく考えないと二つのフレームのアクティブ取り合戦になるので注意。

やりたいことから少し外れるかもしれないが、
一方のフレームをもう一方のフレームを所有者とするモードレスなJDialogにしてやるのはどう?
これなら、特にイベント監視とかしなくても、二つのフレームが一体となってアクティブ、非アクティブになる。
二つの内容を同じにしたいなら、コンテントのクラスに共通のものを使って、
フレームとダイアログにそれを設定すれば無駄なコードは無くて済む。
197デフォルトの名無しさん:2007/09/01(土) 15:30:23
import java.awt.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test(test1);
Test test3 = new Test(test2);
Test otherTest1 = new Test();
Test otherTest2 = new Test(otherTest1);
Test otherTest3 = new Test(otherTest1);
}
private Frame frame;
private Dialog dialog;
public Test() {
JFrame frame = new JFrame();
this.frame = frame;
frame.setVisible(true);
}
public Test(Test test) {
JDialog dialog = test.frame != null ? new JDialog(test.frame) : new JDialog(test.dialog);
this.dialog = dialog;
dialog.setVisible(true);
}
}
198デフォルトの名無しさん:2007/09/01(土) 17:51:13
アクティブウィンドウに「Ctrl + Alt + Delete」のようなキーコードを
送信する方法を教えてもらえますか?

WSHのSendkeysを使うみたいな、Javaから外部アプリ起動する
以外の方法が知りたいです。
199デフォルトの名無しさん:2007/09/01(土) 18:38:05
続きは日本語で
200デフォルトの名無しさん:2007/09/01(土) 20:01:00
>>198
無理。そもそも Java には IPC が無い。自分以外のアクティブウィンドウを
取得する方法も無い。
201デフォルトの名無しさん:2007/09/01(土) 21:35:34
>>147
Java2SDK1.4、IE6、java3D1.5をインストールしています
ttp://www16.plala.or.jp/aamo/index.html

こちらのサイトのjava appletにあるような
円を描いて動く物体を作製したいと思っています
202デフォルトの名無しさん:2007/09/01(土) 22:12:36
>>201
AWT/Swingで可能なレベルはどの程度かは把握してるか?
3Dバリバリは無理だが、円の描画とか簡単にできるし、Swingとアニメーションでぐぐればいくらでもサンプルはある。
もし、その手のをやってないならば、3dに手を出す前に基礎からやるべき
203デフォルトの名無しさん:2007/09/02(日) 01:04:49
>>201
SUGEEEEEEE
204デフォルトの名無しさん:2007/09/02(日) 05:51:47
205デフォルトの名無しさん:2007/09/02(日) 12:43:16
class Test {
public static void main(String args[]) {
String str;
int i;
for(str="abcdef",i=str.length(); i<10; i++) {
System.out.println(i);
}
}
}
↑のソースで質問なんですけど、これでコンパイルと実行が通るのですが
for文の最初にカンマが付いてもよい理由が分かりません。本やネットで検索しても
書かれていませんでした。
あと、int i; と外にループ変数を宣言していますが、for文の中に書くとエラーになります。
この理由もどなたか知っていたら教えてくださいm(_ _)m
206デフォルトの名無しさん:2007/09/02(日) 12:48:51
>>205
理由は「そうういう記述方法が許されている」から。
forの宣言部分で変数を宣言する場合は、同じ型の変数ならば複数宣言も可能。
だけど、そんな書き方したら読みにくいので書かないのが正しい。
String str = "abcdef";
for(int i =0, i=str.length(); i<10; i++) {
System.out.println(i);
}
と書くほうが自然だろ?
自然と思うならば、そんな書き方忘れた方がいい
207デフォルトの名無しさん:2007/09/02(日) 12:50:28
訂正(本当に読みにくい・・)
String str = "abcdef";
for(int i = str.length(); i<10; i++) {
System.out.println(i);
}
208デフォルトの名無しさん:2007/09/02(日) 12:55:04
>>205
for ( A; B; C) { }

各A, B, Cには文が入る
式はカンマで区切って並べることで全体がひとつの文になる
カンマで区切られるのは文ではなく式なので宣言文はダメ
209205:2007/09/02(日) 13:00:11
>>204,205,206
レスありがとうございます!
式ならカンマで並べてもいいってことですか。
勉強になりましたm(_ _)m
210205:2007/09/02(日) 13:01:09
>>206,207,208でした。。
211デフォルトの名無しさん:2007/09/02(日) 13:49:55
すいません
javaでmidiやwavファイルを使って音を鳴らそうとしているのですが、
音量をどうやったら変更できるのかわかりません。
どうやったら音量を変更できるのですか?
212デフォルトの名無しさん:2007/09/02(日) 14:10:13
>>211
ぐぐれかす
213デフォルトの名無しさん:2007/09/02(日) 14:13:52
・midi → コントロールチェンジのボリューム値をいじくる
・wave → 波形を書き換えて振幅を調節する

あるいは

・ミキサーで各ラインのボリュームをいじる

それか

・OSのコントロールパネルやシステム環境設定でユーザに調節してもらう
214デフォルトの名無しさん:2007/09/02(日) 15:39:01
midiはシンセサイザーでMidiChannelを取得してfor文で
メインボリュームの値を変えていますが後で取得すると127になってます。
なにがおかしいのでしょうか?
215デフォルトの名無しさん:2007/09/02(日) 15:39:57
midiはシンセサイザーでMidiChannelを取得してfor文で
メインボリュームの値を変えていますが後で取得すると127になってます。
なにがおかしいのでしょうか?
216デフォルトの名無しさん:2007/09/02(日) 15:49:45
普通 MIDI ファイルには、各チャンネルのボリュームやらパンやらを設定するためのコントロールチェンジが入ってるから、それを再生したときにボリュームが変更されたんでしょ

送信される MIDI メッセージを見て、コントロールチェンジのボリュームの値を書き換えないとだめ
217デフォルトの名無しさん:2007/09/02(日) 19:00:10
import java.io.*;

class Sample1
{
public static void main(String args[]) throws IOException
{
System.out.println("円周率はいくらですか?");

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();

float num1 = Integer.parseInt(str1);

System.out.println("円周率の値は" + num1 + "です。");
}
}

↑のソース、どこが間違ってるか教えてください
218デフォルトの名無しさん:2007/09/02(日) 19:04:08
import java.io.*;
class aaa{
public static void main(String args[])throws IOException{

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

System.out.println("整数を入力してください。");

int num = Integer.parseInt(br.readLine());
char hantei = (num%2 ==0) ? "偶数" :"奇数";
System.out.println(num + "は"+hantei+"です");
}}
をコンパイルすると
aaa.java:11:互換性のない型
検出値 :java.lang.String
期待値 :char
char hantei = (num%2 ==0) ? "偶数" :"奇数";
というエラーが表示されます
初心者でなぜだかわかりません。教えてください
219デフォルトの名無しさん:2007/09/02(日) 19:04:18
なぜInteger
220デフォルトの名無しさん:2007/09/02(日) 19:05:05
なぜchar
221デフォルトの名無しさん:2007/09/02(日) 19:07:40
>>217
float?
>>218
char?
222デフォルトの名無しさん:2007/09/02(日) 19:08:18
自己解決しました
223218:2007/09/02(日) 19:13:11
218です
ありがとうございます
charをStringに変えたらコンパイルできました
224デフォルトの名無しさん:2007/09/02(日) 19:21:05
Cやってた人?
225デフォルトの名無しさん:2007/09/02(日) 19:50:26
Cをやっていた人ならchar hantei[]って書くべきです。
間違うにしてもきっちりと間違ってください。
226デフォルトの名無しさん:2007/09/02(日) 20:05:01
間違えるなら
char *hantei = (num%2 ==0) ? "偶数" :"奇数";
かね?
227デフォルトの名無しさん:2007/09/02(日) 20:19:40
ともかく、まともな入門書を1冊購入した方がいい、うん
228デフォルトの名無しさん:2007/09/02(日) 20:55:06
import java.io.*;

class Sample3
{
public static void main(String args[])
{
System.out.println("整数を2つ入力してください。");

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();
String str2 = br.readLine();

int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);

System.out.println("足し算の結果は" + (num1+num2) + "です。");
}
}

例外 スローするにはキャッチまたは、スロー宣言をしなければなりません
と、でるんですけど どうしたらいいんですか
229デフォルトの名無しさん:2007/09/02(日) 21:03:31
自分で解決できました
しょうもない質問すいませんでした
230デフォルトの名無しさん:2007/09/02(日) 21:04:19
何でも聞こうとするなよ。
231デフォルトの名無しさん:2007/09/02(日) 22:23:19
皆さん、入門書何使ってますか?
232デフォルトの名無しさん:2007/09/02(日) 22:27:33
233デフォルトの名無しさん:2007/09/02(日) 23:16:18
以下のようにコマンドラインでプログラムの起動停止を行いたいと考えてます。
java ThreadProgram -run
java ThreadProgram -shutdown
データベースやテキストファイルでステータスを持ってて、その値が変更されたら
プログラムを終了するという処理方法だと実現できるのですが、
ディスク上の値を毎回監視していないといけませんよね。
他の方法で何か上手いやり方ってありますでしょうか?
234デフォルトの名無しさん:2007/09/02(日) 23:21:19
>>233
異なるVMの間で通信を行うのであれば、RMIとかSocketで繋ぐのが早い
だが、コマンドラインから実行しなくてはならない理由はあるか?
一番手っ取り早いのは、java ThreadProgram で起動したら、起動と停止の2つのボタンがあるGUIを表示してしまう事かと思われ
235デフォルトの名無しさん:2007/09/02(日) 23:22:44
停止ボタンだけで充分か。
ログなどを標準出力に出さないならば、標準入力で停止を受け付けるのもあり
236233:2007/09/02(日) 23:37:45
ありがとうございます。
Socketを使って起動停止を指示する方法は思いつきませんでした。
Guiは使わない予定でして、
コマンドラインから実行して、
プログラムが終了するまでコマンドプロンプトが起動しっぱなしというのではなく、
バックグラウンドで動いているようなイメージをしてるのです。(ログはファイルに落とす)
そういったプログラムってあんまりないんですかね?
237まきの:2007/09/02(日) 23:40:00
カプセル化に関して。
今回課題で、日付クラスを作成してるんですが、DATEクラスなどを用いないで作成するとの事で、できません。
誰か教えてください。
238デフォルトの名無しさん:2007/09/02(日) 23:43:03
>>236
Java単体で実現しようとすると難しいんじゃないかな?
exeを用意したほうが簡単に実現できるだろうね
239デフォルトの名無しさん:2007/09/02(日) 23:44:51
>>237
よく解らんけど、フィールドに、年・月・日をint型かなにかで持てばいいんじゃね?
課題とやらの制限がよく解らんが、丸投げでないならばもう少し意味が解るように説明汁
240デフォルトの名無しさん:2007/09/03(月) 02:45:32
>>237
カプセル化についての課題なんだから
日付情報を保持するプライベートフィールドとそのパブリックなアクセサを作れば良いだけだろ
241デフォルトの名無しさん:2007/09/03(月) 04:53:27
>>236
そういったプロフラムは腐るほどあります。
というか世の中でお仕事で皆さんが作っているのはそんな奴です。

Windowsならjavaw.exeで起動してください。
Unix系なら java 〜〜〜 & で。
242デフォルトの名無しさん:2007/09/03(月) 05:04:16
>>225

hentai だと思った
243デフォルトの名無しさん:2007/09/03(月) 06:01:17
>>225はどう見てもhentaiだろ
244デフォルトの名無しさん:2007/09/03(月) 06:15:54
public static void main(String args[])

ここはスルーですか
245デフォルトの名無しさん:2007/09/03(月) 09:01:35
>>244
なにかおかしい?
246デフォルトの名無しさん:2007/09/03(月) 09:13:02
>>245
C流儀のString args[]に突っ込みたいんじゃないのかね?
最近は随分減ったけど入門ドキュメントでもこの書き方は結構見かけるね
247デフォルトの名無しさん:2007/09/03(月) 11:39:24
>>245
String[] args
248デフォルトの名無しさん:2007/09/03(月) 13:50:25
初心者の高校生ですが、GREPプログラム等のフリーソースを作れるように
なるまで何年ぐらいかかりますか?
あと、「これが出来たら凄い」といった、自分の技能の目安になるものは
存在するのでしょうか?

Vスタとかエクリプスとか作っている人たちが、どれだけ凄いのかを
理解したいです。
249デフォルトの名無しさん:2007/09/03(月) 14:05:50
>>248
まず手を動かす人ならコンピュータに触った事ないところからでも 1年もあればできる。
手を動かさない人は一生かかってもできない。
250デフォルトの名無しさん:2007/09/03(月) 14:08:10
|-`).。oO(・・・・・・・高校生・・・若いのか・・・近頃だと既に若くもないのか・・・・

GREPを実現するといっても
人によって、いつまでたっても書けない人と、1ヶ月くらいで書けるようになるひとがいます。
ある程度、経験を積んでいれば数10分で書けるかもしれません。

まあ目安はないです。
でもeclipseを一人で作ったとしたらとてつもなく凄いとは思います。

評価とは後から来るものでこれをしたから偉い、という基準はありません。
むしろ今ない何かが「出来る」、「作れる」という事が凄いことになります。

ちなみにVスタというのはVisualStudioではないかと思いますが
Javaで作ったとしたらこれまた凄いことだと思います。

まあ何より大事なのは手を動かしてものを作ると言うことです。
若いウチにやっとかないと年を取ると経験になる「無駄」が出来なくなってしまうので。
251デフォルトの名無しさん:2007/09/03(月) 14:50:38
grepは正規表現の処理が肝だが、
そこはjava.util.regexパッケージで何とかなるから
あんまりいい例じゃないな。
逆に、ライブラリを使いこなせるという意味で適例かもしれないが。

すごさを理解したいのなら、漠然に「すごい」と理解しておけ。
野球少年が、メジャーリーガーを「スゲー!」と理解するように。
それ以上の理解は、キミには多分無理。
252デフォルトの名無しさん:2007/09/03(月) 15:09:40
正規表現ライブラリまで含めて自作するって話じゃねーの?
java.util.regex 使うんだったら中高生の腕試しには簡単すぎじゃね?
253デフォルトの名無しさん:2007/09/03(月) 15:56:12
Javaを発音するときアクセントは平坦でしょうか?それともJaにアクセントが来ますか?
254デフォルトの名無しさん:2007/09/03(月) 15:59:40
>>253
ttp://eow.alc.co.jp/java+/UTF-8/
Jaにアクセントが来ます
255デフォルトの名無しさん:2007/09/03(月) 16:03:02
javaを学び始めて1週間もすれば、そこそこ動くアプリ程度は出来るのが普通
256デフォルトの名無しさん:2007/09/03(月) 16:42:52
:.,' . : : ; .::i'メ、,_  i.::l ';:.: l '、:.:::! l::! : :'、:i'、: : !, : : : : : :l:.'、: :
'! ,' . : i .;'l;' _,,ニ';、,iソ  '; :l ,';.::! i:.!  : '、!:';:. :!:. : : : :.; i : :'、:
i:.i、: :。:!.i.:',r'゙,rf"`'iミ,`'' ゙ ';.i `N,_i;i___,,_,'、-';‐l'i'':':':':‐!: i : : '、
i:.!:'、: :.:!l :'゙ i゙:;i{igil};:;l'   ヾ!  'i : l',r',テr'‐ミ;‐ミ';i:'i::. : i i i : : :i
:!!゚:i.'、o:'、 ゙、::゙''".::ノ        i゙:;:li,__,ノ;:'.、'、 :'i:::. i. !! : : !:
.' :,'. :゙>;::'、⊂‐ニ;;'´          '、';{|llll!: :;ノ ! : !::i. : : : : i :
: :,' /. :iヾ、   `        、._. ミ;;--‐'´.  /.:i;!o: : : :i :
: ; : ,' : : i.:      <_       ` ' ' ``'‐⊃./. :,: : : O: i. :見習え!!
: i ,'. . : :',      、,,_            ,.:': ,r'. : , : : !: :パソコン初心者が
:,'/. : : . :;::'、     ゙|llllllllllllF':-.、       ,r';、r': . : :,i. : ;i : :数日でCまで覚えて
i,': : : :.::;.'.:::;`、    |llllH". : : : :`、    ,rシイ...: : ; : :/:i : i:!::i:ゲームをクラックした
;'. : :..:::;':::::;':::::`.、  |ソ/. : : : : : : ;,! ,/'゙. /.:::: :,:': :./',:!: j:;:i;!;長門を見習え!!
i. : .:::;:'i::::;':::::::::i::`:.、;゙、';‐ 、,;__;,/ノ  . :,/.:::: :/. : :/.:::i. j:;;;;;;;;
l .:::;:'::;':::;':::::::::::i::::i::`:,`'-二'‐-‐''゙_,、-.':゙/.:::: ;ィ': : :/.:::::i: j、;;;;;;;
.:::;:':::;':::;'::::::::::::::i:::i:::::..`'‐、、、-<゙.::::::::/.::: ://. : /.:::::::i :j::.'、:;;;
257デフォルトの名無しさん:2007/09/03(月) 17:39:56
>>202
やはり基礎をやらないと駄目ですよね…

プログラミングやったことない、基礎すらやらせずいきなり
「卒研はjavaで3Dやりなさい」という先生ってorz
258デフォルトの名無しさん:2007/09/03(月) 17:43:51
>>257
いや、4年生なら基礎は出来てるという前提だろうし
それ以前の学年なら十分時間があるだろう
授業寝て、宿題スレで課題作ってたのでなければ。

先生、極めて普通です。
259デフォルトの名無しさん:2007/09/03(月) 18:26:09
>>257
4年かんサボってりゃ無理だろ
ほら、最近流行の代行に頼めば?
1ステップ10円程度でやってくれるんじゃねwww
260デフォルトの名無しさん:2007/09/03(月) 20:27:24
dbにclob型で格納されているテキストを取得したいのですが、
getAsciiStreamメソッドでもgetCharacterStreamでも
「あああ」という文字列が「BBB」と文字化けしてしまいます。
文字化けを回避するにはどうすればいいのでしょうか
261デフォルトの名無しさん:2007/09/03(月) 21:00:52
>>260
charAt(0)とcharAt(1)は、16進でいくつ?
262デフォルトの名無しさん:2007/09/03(月) 21:11:09
>>260
getAsciiStreamメソッドで得たバイト列 b を
new String(b, "UTF-16")
new String(b, "UTF-16BE")
みたいにしたら表示されたとかいうオチなら笑えるんだが。
263デフォルトの名無しさん:2007/09/03(月) 21:34:35
そんな程度のオチだろうな
264デフォルトの名無しさん:2007/09/03(月) 23:17:30
結局解決出来なかった
265デフォルトの名無しさん:2007/09/03(月) 23:24:43
エスパーじゃないんだから、コード出せよ
266デフォルトの名無しさん:2007/09/04(火) 00:34:03
267デフォルトの名無しさん:2007/09/04(火) 00:36:10
動画のRGB比の変化をとってきたいのですがJAVAでできますか?
そんなプログラムのソースとかもしあるようでしたら教えてください。
268デフォルトの名無しさん:2007/09/04(火) 00:41:23
卒論30万とかwwwwいいバイトになるなwwww
269デフォルトの名無しさん:2007/09/04(火) 03:26:49
Java Web StartのPersistenceServiceをローカルで実行するには
どうすればいいんでしょう。JUnitとデバッグのためにぜひ
必要です。
なにもせずServiceManager.lookupするとUnavailableServiceExceptionで
コケます。
270デフォルトの名無しさん:2007/09/04(火) 06:38:24
文字列を頭から一字ごとに文字列解析してStringに切り出していくのに適したクラスありますか?

CVSファイル(表)をインポートしたいのですが、ただコンマでsplitしただけでは、
フィールド中でダブルクォーテーションで囲まれたコンマや改行でうまくいかないので。
そのうえダブルクォーテーション自体もそれ自体エスケープしてフィールド中に含め得るようで、
なんか複雑なんで、こつこつ頭から一字一句読んでいって、切りだしていきたいのですが。

String中の1文字って必ずしも1つのインデックスに対応しないんですね。
ならばインデックス単位ではなく1文字単位で、イテレータのようなものをつかって
頭から走査していきたいのですが。
271270:2007/09/04(火) 06:40:45
CVSじゃなくてCSVでした。失礼しました
272デフォルトの名無しさん:2007/09/04(火) 07:20:46
java csvでググればいいじゃん
273デフォルトの名無しさん:2007/09/04(火) 07:36:01
プロセスが違えばセッション情報は使えないのですか?
例えば、Aというプロセスでセッションに格納した情報をBというプロセスで使いたいのです。
274デフォルトの名無しさん:2007/09/04(火) 08:03:55
>>273
あたりまえだのクラッキー
275デフォルトの名無しさん:2007/09/04(火) 08:05:09
>>273
シリアライズしてRMI通信かソケット通信かHTTP通信かファイルI/Oを介して
データのやり取りをすれば?
276デフォルトの名無しさん:2007/09/04(火) 08:27:11
>>267
Java Media Framework ってのが Sun から提供されているから、それ使ってみろ。
動画の形式にもよるが、MPEG-1, QT, H.261, H.263が対応って書いてあるから
大丈夫だろ。
1フレームごとにキャプチャして RGB 成分に分解すればあとはできるだろ。
277デフォルトの名無しさん:2007/09/04(火) 08:41:15
>>269
例外をキャッチしたら、自前で実装したPersistenceServiceを返せば
いいんじゃねぇの?ローカルなんだから適当にフォルダきめうちして
そこに書き込むようにしてさ。
278デフォルトの名無しさん:2007/09/04(火) 09:01:51
test
279270:2007/09/04(火) 09:19:31
>>272
CSVTokenizerというライブラリがヒットしましたが、
どうやらフィールド中の改行には対応していないようです。

java.utilScannerなんか、いかにもそれっぽい名前なのに
何だか違うみたいです。
280デフォルトの名無しさん:2007/09/04(火) 09:51:07
>>279
CSVは仕様自体が簡単そうにみえて思ったよりも面倒なんで、標準の文字列解析ライブラリ
だと難しいと思う。
例えば、ダブルクォーテーションやカンマの意味について、現れる場所によって
異なる解釈をしなければならないのが原因。
ただ世間にはCSVのライブラリはあふれているので、検索してそれを使うなり、
参考にするなりしてみれば?
281デフォルトの名無しさん:2007/09/04(火) 10:50:23
Common Format and MIME Type for Comma-Separated Values (CSV) Files
ttp://www.ietf.org/rfc/rfc4180.txt
282デフォルトの名無しさん:2007/09/04(火) 11:26:20
某サイトにて、Javaの1.4.2-15が使用されています。
そこでデータ検索し、表示されたデータを印刷する場合は
表示された印刷ボタンを押す仕組みになっているのですが(普通には印刷不可)
その印刷ボタンを押すと、必ずA4縦・余白が25.4ミリになります。
IEでページ設定の初期値を変えても
このサイトの印刷に関しては毎回この数値になっていまい
いちいち変えるのがとても面倒です。
何とか、このサイトでの印刷時も
サイズや向きや余白を、自分の好みで固定できないでしょうか?

このスレにふさわしくない質問の場合は申し訳ありません。
283デフォルトの名無しさん:2007/09/04(火) 11:33:33
>>279
つ ttp://opencsv.sourceforge.net/

What features does opencsv support?
opencsv supports all the basic csv-type things you're likely to want to do:
* Handling quoted entries with embedded carriage returns (ie entries that span multiple lines)
284デフォルトの名無しさん:2007/09/04(火) 14:16:57
jpeg画像を読み込んで表示させるプログラムを作成しています。
ボタンを押して、JFileChooserを呼び出して、そこから表示させるようにしています。
そこで、
1枚目に大きな画像を読み込んで、
2枚目に小さな画像を読み込んだときに、
大きな画像の断片が表示されたままになってしまいます。
現在はpaintメソッドに、
super.paint(g);
g.drawRect(0, 0, this.getWidth(), this.getHeight());
g.drawImage(img, 80, 20, this);
というような手続きを書き、mainからは、repaintで呼び出しているのですが、おかしいのでしょうか?
どなたかご教示をよろしくお願いします。
285デフォルトの名無しさん:2007/09/04(火) 14:23:14
それだけじゃなんとも言えんが、
drawRect は枠を描くだけで、中は塗りつぶさないんじゃない?
286デフォルトの名無しさん:2007/09/04(火) 14:28:18
>>285さま
287デフォルトの名無しさん:2007/09/04(火) 14:28:59
>>285さん
すみません、drawFillの間違いです。
相変わらず、上記の動作になりますが。

288デフォルトの名無しさん:2007/09/04(火) 14:32:09
drawFill?
289デフォルトの名無しさん:2007/09/04(火) 14:38:23
JFileChooserを使ったりしてるということは画像を表示しているコンポーネントはJComponentのサブクラス?
だとしたら、paintをオーバーライドするのではなく、paintComponentをオーバーライド汁
290デフォルトの名無しさん:2007/09/04(火) 14:39:31
同じサイズの不透明なImageにいったん書き込んで上から描画すればよくね?
あとswing使うんならオーバーライドすんのはpaintComponentのほうがよくね?
291デフォルトの名無しさん:2007/09/04(火) 14:41:16
UnavailableServiceExceptionがUmbilicalCableExceptionに見えた俺はまだ熱が抜けてないw
292デフォルトの名無しさん:2007/09/04(火) 14:44:38
>>291
巣にお帰り
293デフォルトの名無しさん:2007/09/04(火) 14:49:20
fillRectする前にsetColorで塗り潰したい色をセット
super.paintもしくはsuper.paintComponentで何が設定されているか分からん
294デフォルトの名無しさん:2007/09/04(火) 14:51:08
パソコンショップ完全最強リンク
http://b.hatena.ne.jp/entry/2453373
295デフォルトの名無しさん:2007/09/04(火) 14:57:07
ふと思った
大きいイメージを書き込んだimgに小さいイメージを書き足してるんじゃね?
296デフォルトの名無しさん:2007/09/04(火) 14:58:19
StrutsのActionのインスタンスはWebアプリケーションひとつにつき
ひとつでしょうか?
297284:2007/09/04(火) 14:58:41
paintComponentをオーバーライドしましたが、やはり同じ挙動になってしまいます。
298284:2007/09/04(火) 14:59:11
実際に画像を描くのは、JPanelを継承した俺俺クラスで、
299284:2007/09/04(火) 15:00:45
実際に画像を描くのは、JPanelを継承した俺俺クラスで、
別のクラスから、俺俺クラスのインスタンスを作成して、
そこから、repaint()メソッドを実行しているのですが、この方法がだめなのでしょうか?
何度も書き込んでしまい、すみません。
300デフォルトの名無しさん:2007/09/04(火) 15:00:55
>>284
もう少し範囲を広げてソースを出したほうがいいかも
301デフォルトの名無しさん:2007/09/04(火) 15:22:35
長くてすみません。下記のような感じで、ボタンから、d_pnlのメソッドを呼び出して、絵を描くようにしています。
public class Test extends JFrame implements ActionListener{
JButton btn;
Image img = null;
DrawPanel d_pnl;
Test(String title){
btn = new JButton("button");
btn.addActionListener(this);
d_pnl = new DrawPanel();
Container cnt = getContentPane();
cnt.add(btn,BorderLayout.SOUTH);
cnt.add(d_pnl,BorderLayout.CENTER)
;
setSize(400,400);
setTitle(title);
setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn){
d_pnl.repaint();
}
}

public static void main(String[] args){
Test app = new Test("test");
}
}
302デフォルトの名無しさん:2007/09/04(火) 15:23:36
パソコンショップ完全最強リンク
http://want-pc.com
303デフォルトの名無しさん:2007/09/04(火) 15:32:08
imgを作成するところとimgを描画するところが含まれていないようだが
304デフォルトの名無しさん:2007/09/04(火) 15:46:58
>>258
残念ですが
研究室の配属は学科長が勝手に決め
そういう授業(javaとかCなどの情報系の科目)すら講義にないのです
305デフォルトの名無しさん:2007/09/04(火) 15:53:24
DrawPanelに、makeImageというメソッドを用意して、そこでImageをつくっています。

actionPerformedのところで、下のように、imgに代入しています。
さっきは削ってしまいました。
何度もすみません。
public void actionPerformed(ActionEvent e) {
  if(e.getSource() == btn){
    img = d_pnl.makeImage();
    d_pnl.repaint();
  }
}
306デフォルトの名無しさん:2007/09/04(火) 16:10:42
>>305
スマートかどうかは別の問題として。

画像本体の読み込み、表示がほぼ問題なく、残像が問題になってるのに、
描画系のソースを公開しないのは、何か理由がおありなのでしょうか
307デフォルトの名無しさん:2007/09/04(火) 16:11:28
>>304
なんつーか一番の間違いはそんな学校に入ったことか、
自分で何とかしなかったことかな。
プログラミング言語を誰かに教えてもらうって感覚が理解できない・・・

俺の出たとこも情報系だが別に言語を教える授業なんて無かったぞ。
かろうじてあったのはPascalの授業。
最低でもCは書けるか、自力で書けるようになっていることが大前提。
そんなトコまで教えてたら、時間がたりねーよ。
308デフォルトの名無しさん:2007/09/04(火) 16:13:03
>>305
> makeImageというメソッドを用意して、そこでImageをつくっています
と言いつつ、そのimgを作成するところを見せない
>>303の「imgを作成するところとimgを描画するところ」ってのは
makeImageとpaintComponentの実装を出せってことだと思うぞ
のらりくらりと核心部分を晒さないということはネタ質問ということなのか?
309デフォルトの名無しさん:2007/09/04(火) 16:16:26
今は専門が要らんほど有り余っててだな・・・。
そこなら基礎からry
310デフォルトの名無しさん:2007/09/04(火) 16:52:03
jspなら文字化けしないのにhtmlだと文字化けするのはなぜでしょうか?
311デフォルトの名無しさん:2007/09/04(火) 16:58:37
レスポンスヘッダのContent-Typeとか?
312デフォルトの名無しさん:2007/09/04(火) 17:01:18
わざわざ自前のコンポーネントを作らなくてもJLabel+ImageIconで十分じゃね?
import java.awt.event.*;
import javax.swing.*;
public class jpeg画像を読み込んで表示させるプログラム extends JFrame {
public jpeg画像を読み込んで表示させるプログラム() {
SwingUtilities.invokeLater(new Runnable() { public void run() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b = new JButton("button");
final JLabel l = new JLabel("");
add(b, java.awt.BorderLayout.SOUTH);
add(l, java.awt.BorderLayout.CENTER);
b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
JFileChooser c = new JFileChooser(); c.showOpenDialog(null); java.io.File f = c.getSelectedFile();
if (f == null) return;
l.setIcon(new ImageIcon(f.getPath())); jpeg画像を読み込んで表示させるプログラム.this.pack();
}});
pack();
setVisible(true);
}});
}
public static void main(String[] args) { new jpeg画像を読み込んで表示させるプログラム(); }
}
313デフォルトの名無しさん:2007/09/04(火) 17:07:25
間違えたorz
コンストラクタの中でなく外に出さないと・・・
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() {
new jpeg画像を読み込んで表示させるプログラム();
}});
314デフォルトの名無しさん:2007/09/04(火) 17:24:42
>>311
ブラウザ(IE)のエンコードを見るとなぜか西ヨーロッパ言語(ISO)となっています。
シフトJISに変えると日本語が表示されました。
なぜこんなことになってしまうのでしょう?
315デフォルトの名無しさん:2007/09/04(火) 18:03:10
>>314
IEは勝手に分析をするから。
そのアルゴリズムまでは分からないが…と書きつつぐぐると…

Internet Explorer でコンテンツの表示中に表示エンコードの自動選択を有効にすると文字化けが発生する
ttp://support.microsoft.com/kb/827474/ja
316デフォルトの名無しさん:2007/09/04(火) 18:06:56
サーバから送られてくる情報の中にエンコードの指定がなかったら、ブラウザはエンコードを推測するしかない。
残念ながら、エンコードの推測なんてものは、あんまり的中率がよくない。

キミはシフトJISのつもりでHTMLを書いたのかもしれないが、ブラウザはそんなことを知りはしない。
エンコードの推測が外れてヨーロッパ言語だと思ってしまったんだろう。

たぶんそのjspにはpageディレクティブかなんかでエンコードが指定してあって、htmlの方には何もないんじゃないか。
Content-Type エンコード とかでぐぐってみるといい。
317デフォルトの名無しさん:2007/09/04(火) 18:14:23
すみません。HTMLにはmetaタグで指定しています。
318デフォルトの名無しさん:2007/09/04(火) 18:17:17
1〜13のカードを用意して、合計が5以上になるまで引き続ける。
トランプの残り枚数が3以下になったときは、トランプをシャッフルしてまた上の動作を繰り返す
これを百回行って、合計が8になったときの回数を表示する。


このようなプログラムを作りたいのですがさっぱりわかりません。
コレクションを使うとかなんかそんな話は聞いたのですがちんぷんかんぷんです。
どなたか↑のようなプログラムを書いていただけませんか?
319デフォルトの名無しさん:2007/09/04(火) 18:19:55
Responseヘッダを確認してみた?

ヘッダに Content-Type: text/html;charset=ISO-8859-1
とかが含まれていると、HTMLのmetaに書いても無視されるよ。
320デフォルトの名無しさん:2007/09/04(火) 18:21:23
>>317
まずHTMLに書いたmetaタグ内のスペルミスを疑う。
そうじゃなければ、サーバが Content-Type レスポンスヘッダに別なエンコードを送り出してる可能性がある。
321デフォルトの名無しさん:2007/09/04(火) 18:21:31
>>318
★★ Java の宿題ここで答えます Part 62 ★★
ttp://pc11.2ch.net/test/read.cgi/tech/1184509890/
322デフォルトの名無しさん:2007/09/04(火) 18:22:22
>>318
宿題スレへ行け
323デフォルトの名無しさん:2007/09/04(火) 18:23:29
>>319, >>320
ありがとうございます。たぶんそれだと思います。
設定はどこにあるものなのでしょうか?サーバーはWebLogic10です。
324デフォルトの名無しさん:2007/09/04(火) 18:30:52
>>321-322
スレ違いでしたか。どうもすみませんでした。そちらの方に行きます。
325デフォルトの名無しさん:2007/09/04(火) 18:42:44
というよりIEは判断材料を無視して勝手に判断した揚げ句の馬鹿だからなぁ・・・。
ブラウザのそういう実装だと思っておけば良いよ。
326デフォルトの名無しさん:2007/09/04(火) 18:43:27
web.xmlのmime-mappingというのが怪しそうです。
327デフォルトの名無しさん:2007/09/04(火) 18:50:36
>>279
フィールド中に改行ってどんな仕様だよ・・・
328デフォルトの名無しさん:2007/09/04(火) 18:54:01
>>327
>>281 RFCにはあるでよ
329デフォルトの名無しさん:2007/09/04(火) 18:58:36
そもそもRFCなんてあるんだ・・・
330デフォルトの名無しさん:2007/09/04(火) 19:00:49
HTTP/1.1 200 OK
Connection: close
Date: Tue, 04 Sep 2007 09:59:58 GMT
Content-Length: 313
Content-Type: text/html; charset=ISO-8859-1
Last-Modified: Tue, 04 Sep 2007 09:14:13 GMT
X-Powered-By: Servlet/2.5 JSP/2.1

ISO-8859-1が返ってきてました。
331デフォルトの名無しさん:2007/09/04(火) 19:23:51
低レベルな質問で失礼いたします。

ニンジン, 03-1234-5678, [email protected], F900i,mac,010110

のデータ形式なもので , で区切られて文字列を
各個、配列として代入したいのですが
どのような手順を踏めばよろしいでしょうか?  
332デフォルトの名無しさん:2007/09/04(火) 19:29:39
どうもCSVを読むという宿題が出ていると推理
333デフォルトの名無しさん:2007/09/04(火) 19:30:29
単純にカンマで区切られてるだけのものなら
String s = "ニンジン, 03-1234-5678, [email protected], F900i,mac,010110";
String[] array = Collections.list(new StringTokenizer(s, ",")).toArray(new String[0]);
334デフォルトの名無しさん:2007/09/04(火) 19:32:13
String[] array = s.split(","); でよかったorz
335デフォルトの名無しさん:2007/09/04(火) 19:34:41
ありがとうございます、早速ためしてみます。
早急なお返事に感謝です。
336デフォルトの名無しさん:2007/09/04(火) 19:38:50
学生増えたな
337デフォルトの名無しさん:2007/09/04(火) 20:10:48
Scanner使え
338270:2007/09/04(火) 20:22:52
>>283
>>281
>>280
寝てて遅れレスですが、ありがとうございます。

こういう複雑な文字列解析するとき、みなさんはどうやってるんですかね。
Cだったらただ配列を読めばすむのに、コードポイントとかサロゲートとかよくわかりません。
339デフォルトの名無しさん:2007/09/04(火) 20:25:23
Javaだって文字列を先頭から読んでいけば同じだろ
340デフォルトの名無しさん:2007/09/04(火) 20:28:30
>>338
今でも可能性が広がっただけですがね。

Unicode 4.0 の補助文字のサポート
ttp://www.javainthebox.net/laboratory/J2SE1.5/MiscAPI/SupplementaryChar/SupplementaryChar.html

まずは、char - String の文字走査を覚えることです。量は大して無いし。
codepoint - String はその派生なもんで。
341デフォルトの名無しさん:2007/09/04(火) 20:33:20
>>338
まじめに作るなら、オートマトン設計して1文字ずつ読んでみるとか。
Javaは、文字コードの変換は勝手にやってくれるし(Readerへの文字コード指示)
バッファリングはあまり気を遣わないですむようになってる(BufferedReader)。
だから、楽っちゃあ楽。

コードポイント、サロゲートは、Unicodeの特殊な文字を読むときに出てくる。
まじめに対応するつもりなら、文字はcharではなくintで扱う構造にしなくちゃだめ。
まあ普通に入力文字を扱う分には関係ないでしょう。
342270:2007/09/04(火) 21:11:28
>>339-341
もうすこし勉強してみます。
皆さん付き合って頂きありがとうございました。
343デフォルトの名無しさん:2007/09/04(火) 21:57:05
JTextFieldでテキストの内容が変更されたことをイベントで受け取りたいのですが
どのようにすればよいのでしょうか?
KeyTypeイベントでキー判定して、判断するのでしょうか?
344デフォルトの名無しさん:2007/09/04(火) 22:02:06
>>343
ttp://homepage2.nifty.com/t-1000/java/java_qanda/q28.html
> テキストフィールドが変更されるたびに、ある一連の処理をしたい…

検索キー「JTextField 変更」
345デフォルトの名無しさん:2007/09/04(火) 22:18:50
別にまじめに対応しても普通の用途ならサロゲートぶった切っても良いと思うけどね。

JavaScriptの仕様なんかは文字列から部分文字列取り出す場合サロゲートぶった切る仕様だった筈だし。
多くの場合、そういう実装でも特殊な場合を除いては全く問題無い気がする。
346343:2007/09/04(火) 22:23:13
その方法で、出来そうな感じです。
ありがとうございます。
347270:2007/09/04(火) 22:51:38
>>345
なんかいままで勘違いしていたのですが、
サロゲートに使われるビットパターンというのって決まっているんですね。
つまりある16ビット見ただけで、
それがサロゲートかどうか、上位か下位が判断できるんですね。

いままで、前の16ビットを参照して、上位サロゲートがあるかどうか調べないと、
ある16ビットが下位サロゲートか普通の文字かどうか判断できないのかと思ってました。

たとえばカンマを検出する際に、ただインデックスで走査しただけでは、
ある補助文字の下位サロゲートがカンマと一致していて
誤検出されるかもしれないとか考えていたんで。

つまりカンマやクォーテーションなど
従来の1バイト文字を検出してどうこうするくらいの解析なら、
普通にインデックスで走査すれば問題なかったんですね。

いろいろありがとうございました。
348デフォルトの名無しさん:2007/09/04(火) 22:58:03
あんまし原始的な部分にかかわらず、ビジネスロジックに専念するべ、Java使うなら
349267:2007/09/05(水) 00:46:14
>>277さん、ありがとうございました。
やってみます。
350デフォルトの名無しさん:2007/09/05(水) 01:17:29
今日「基礎からはじめるサーブレット/JSP」っていう本を手に入れたんだけど、

PrintWriter out = request.getWriter();
とかもう意味わかんない。

どういう意味ですか?
351デフォルトの名無しさん:2007/09/05(水) 01:20:35
class Base{ void meth1(){ System.out.println("Base meth1メソッド実行を表示しました。");} }

class Derived extends Base{ void meth1(){System.out.println("Derived meth1メソッド実行を表示しました。"); } }

class Super{ Base meth(){ System.out.println("Super methメソッド実行を表示しました。");return new Base(); } }

class Sub extends Super{ Derived meth(){ System.out.println("Sub methメソッド実行を表示しました。"); return new Base(); } }

class Sample{ public static void main(String[] args){ Super s = new Sub();s.meth().meth1(); } }

問題集やっててわからないことがあったので質問です。
このコードはclassSubのreturn new Base()の箇所が間違いで、
エラーになるようなのですが、
どういう理由でエラーになるのかがわかりません。

○ Base meth() ... return new Base
○ Base meth() ... return new Derived
× Derived meth() ... return new Base
○ Derived meth() ... return new Derived

以上4通りの戻り値型と、作成するオブジェクトの型の組み合わせをclassSubで試したところ、
3つ目(つまり前述コードの場合)だけがエラーになってしまいますが、理由がわかりません。
いろいろ検索してもわからなかったので、理由を教えていただければなと思います。
スペースの都合上、読みにくいコードになりました、すいません。
質問不足な感があったら、あとで追記したいと思います。
よろしくお願いします。
352デフォルトの名無しさん:2007/09/05(水) 01:25:48
>>350
PrintWriterが解らないのか、outが解らないのか、requestが解らないのか、getWriter()が解らないのか、解らない
353デフォルトの名無しさん:2007/09/05(水) 01:26:07
Derived は Base のサブクラスだから、Derived → Base はできる。
逆向きはできない。
354デフォルトの名無しさん:2007/09/05(水) 01:30:06
>>351
何のヒッカケもない、継承の基礎。
Derived extends Base なんだから、 Derived is a Base でしょ?
○ Base meth() ... return new Base  
 戻り値の型とインスタンスが一致
○ Base meth() ... return new Derived
 Derived is a Base なのでOK
× Derived meth() ... return new Base
 Base is a Derived ではないのでNG  
○ Derived meth() ... return new Derived
 戻り値の型とインスタンスが一致
355デフォルトの名無しさん:2007/09/05(水) 01:33:29
>>353さん
>>354さん

ありがとうございます。
m(_ _)m
戻り値型や共変戻り値型、
オーバーロードオーバーライドなど、色々見ていたのですが、
参考になる箇所を見つけられなかったもので・・・。
なるほど、継承の項をもう少し読んでみます。

(*^_^*)ありがとうございました。
356デフォルトの名無しさん:2007/09/05(水) 01:36:09
>>352
ひとつひとつ当たってみます。
357デフォルトの名無しさん:2007/09/05(水) 01:47:29
>>356
悪い事は言わないから、Java言語の入門書からやれ
358デフォルトの名無しさん:2007/09/05(水) 08:49:13
SunJavaしか使ったことないんだけど、MS Javaと何が違うの?
記述方法は違うけどコンパイラと実行環境が違うってだけ?
359デフォルトの名無しさん:2007/09/05(水) 09:13:02
>>357
入門書は1ページ目から眠くなるんで、避けてます。
360デフォルトの名無しさん:2007/09/05(水) 09:19:02
>>358
MS Javaなんて化石だろ・・・気にする必要ない
361デフォルトの名無しさん:2007/09/05(水) 09:57:35
基礎Java 野本等の本は価値ありますか?
362デフォルトの名無しさん:2007/09/05(水) 10:07:56
>>360
お前の知識はたかが知れてるてこった
363デフォルトの名無しさん:2007/09/05(水) 10:13:00
>>362
お前の言う知識とやらを披露してくれ
364デフォルトの名無しさん:2007/09/05(水) 10:34:51
>>363
化石の知識は気にしないだろ?
知っているが、お前に知識は披露しない
365デフォルトの名無しさん:2007/09/05(水) 10:45:04
何も知らないアホと知ったかぶりのアホの戦い
366358:2007/09/05(水) 11:16:57
誰でもいいんで知ってる人いたら教えてくれー

.netで動いたりするの?記述自体はSunのやつと変わらない?
367デフォルトの名無しさん:2007/09/05(水) 11:30:54
>>366
なんで今更 Microsoft Java のことなんて知りたいの?

・MS独自拡張が入っていたので、ふつうのJavaではできないことができた
・.NET は関係ない
368デフォルトの名無しさん:2007/09/05(水) 11:31:48
俺も詳しくは知らんけど、.netとMS Javaは全く別物じゃない?
.net自体はMS Javaをベースに開発されたらしいけど、その時点で本家Javaとは袂が分かれた、と認識している。
なんで、今の.netのJavaってのは、Java風に書ける.netという言語かと。
つまり、似ているけど別モン、JavaとJavaScriptみたいなもん?

ぶっちゃけMS嫌いだし、どうでもいい。
間違いは指摘してくれ
369デフォルトの名無しさん:2007/09/05(水) 11:42:30
J#とMicrosoft Java とを混同しているんじゃ?
370デフォルトの名無しさん:2007/09/05(水) 12:25:01
MSJava : J++
371デフォルトの名無しさん:2007/09/05(水) 12:39:31
なんとなく分かった気がするかも

MS JavaはSunJavaの拡張版みたいなのだけどセキュリティ的にウダウダだったので開発中止になった
んで、MSは次に.NET環境で動作するJ#やJ++を作った

ってことでいいのかな?
ちなみにMSのJavaは記述方法とかはSunのと比べてapiか豊富っていうこと意外はあんまり変わらない?
J#やJ++は違うのは当たり前として

今更って質問だと思われるだろうが前から気になっていたんで質問させてもらっただけなんだ・・・・
372デフォルトの名無しさん:2007/09/05(水) 12:45:32
MS Javaの独自拡張は、まだ許容範囲だった。
でも、暴走を始めたモンでSunが切れ、名前を仕方なくJ++に。
そのまま消えていくのかと思いきや、.netとして帰ってきた・・・かな

記述方法は調べた事ないから解らん。
1.2とか1.3とかそんな時代だし、変わらんのじゃないかね。
1.4になる頃にはどうでもいい代物になっていたような記憶ある
373デフォルトの名無しさん:2007/09/05(水) 12:59:34
>>371
MS JavaはSunに裁判で負けて、更新版を提供できなくなったために
最終的にセキュリティがウダウダになったのではないかな。

もともとはMS独自拡張をSunが嫌っただけと思う。
当時はJavaほとんど使ってなかったので、細かな機能差は知らないけど
COMの操作が簡単にできたりとかDLLのネイティブ関数を直接呼び出したりとか
Windowsで使う分には便利だったような気がした。
374デフォルトの名無しさん:2007/09/05(水) 13:26:30
J/Directとか・・・
J++でMFCつかってクラスファイル吐く馬鹿とか・・・
そもそも仕様が古すぎ・互換性が薄いせいでIEのMSJVMでしかまともに動かなかったり。(NPE投げるかVMクラッシュか)
javaの機能しか使ってないJ++ソースなのにjavacすると型周りで怒られたり・・・

てかJ++はメインストリーム終わってんだからJ#に移行しろよ。
375デフォルトの名無しさん:2007/09/05(水) 16:28:21
チャート描画のためにJFreeChartを使っています。
JFreeChartオブジェクト生成後の、凡例のラベル名の変更方法がわからなくて困っています。

例えばXYSeriesオブジェクトを生成するときは、new XYSeries(Compable key)することでラベル名を指定できるのですが
メソッドでラベル名を変更する方法がないようでした。
また、凡例を表すLegendItemクラスのgetLabelメソッドでラベル名は取得できましたが、セッターメソッドが見つかりません。

ラベル名を変更するにはどうすればよいでしょうか?
376デフォルトの名無しさん:2007/09/05(水) 16:42:59
JFrameのsetBoundsでフレームの大きさを指定するのですが、
メニューバーの部分や外枠も大きさの指定に含まれてしまいます。
含まないようにするには、どうすればいいのでしょうか?
377デフォルトの名無しさん:2007/09/05(水) 16:47:49
>>375
マニュアル嫁

>>376
含まないようには出来ないので、外枠分を考慮して指定するしか方法はない
378デフォルトの名無しさん:2007/09/05(水) 16:50:56
>>376
JFrameの中のコンポーネントにsetPreferredSizeを指定してpackする
379デフォルトの名無しさん:2007/09/05(水) 16:56:00
>>378
コンポーネントが大量にあるんですが・・・・どうやって指定すればいいのでしょう?
380デフォルトの名無しさん:2007/09/05(水) 16:57:46
コンポーネントをすべてJPanel上に載せればいいんじゃないの?
381デフォルトの名無しさん:2007/09/05(水) 17:03:21
JFrameに指定はできないんですか?
382デフォルトの名無しさん:2007/09/05(水) 17:08:35
JFrameは外枠を含めたサイズに意味がある
内側のサイズを設定したいならJPanelかなんかにのせればいいだろ
383デフォルトの名無しさん:2007/09/05(水) 17:11:34
>>378
その方法でやるとできましたーー。
setBounds使わなくてもいいんですね。
ありがとうございました。
384デフォルトの名無しさん:2007/09/05(水) 17:27:31
あ、そういえばMSってSunに裁判で負けてたね
まぁなんとなくの流れは分かったよ!
ありがとー!
385デフォルトの名無しさん:2007/09/05(水) 19:31:16
>>376
Insetプロパティってセットできなかったけ?
386デフォルトの名無しさん:2007/09/05(水) 20:53:16
例外オブジェクトを文字列あたりでシリアライズ-デシリアライズするのに
良い方法ってありませんでしょうか?

例えば XML にして、Seasar の dicon に書く component と property のように
するのも一つの方法にも思えますが、なるべく労の少ない方法はないでしょうか。
387デフォルトの名無しさん:2007/09/05(水) 21:13:57
そのシリアライズは何用?
文字列を使うってコトは何か特殊な用途っぽいが・・・
388デフォルトの名無しさん:2007/09/05(水) 21:15:32
そもそも文字列でシリアライズって意味が解らんのだけど・・・
389デフォルトの名無しさん:2007/09/05(水) 21:29:19
単にテキストファイルか何かに保存するだけだったりして
390デフォルトの名無しさん:2007/09/05(水) 22:09:35
xmlうんぬん言ってるし、プリンタブルな文字を使用してシリアライズするってことでは?
それを「文字列あたりで」って言っていいかどうかは別として
391デフォルトの名無しさん:2007/09/05(水) 22:23:34
よく解らんけど、それってシリアライズって言うの?
XMLに保存するとかならば、永続化とかって言うのかと思っていたが
392デフォルトの名無しさん:2007/09/05(水) 22:37:15
>>375
JFreeChart#addLegend(LegendTitle legend)
では駄目なのか?
393デフォルトの名無しさん:2007/09/05(水) 22:46:12
Javaにおけるシリアライズはオブジェクト群をストリームにエンコードすることなので、
Javaの標準的な形式にエンコードせずにXML形式でストリームに吐き出せばXMLでシリアライズしたことになる。
オブジェクトの永続化はそのストリームの出力先を、ファイルなりデータベースなりの、
VMより長生きする領域に結びつけること。
シリアライズの使用法としては永続化以外にRMI等の通信でのオブジェクトのやり取りもある。
394デフォルトの名無しさん:2007/09/05(水) 23:07:03
んー、なんとなくは解ったけど・・・
一般的に「オブジェクトをXML形式でシリアライズする」と言うんでしょうか?
あと、toStringでも要件さえ満たせばシリアライズと言うって事?
395デフォルトの名無しさん:2007/09/05(水) 23:23:01
toString じゃ復元できないような。

XML ねぇ・・・
例外オブジェクトをシリアライズするっていうのは、スタックフレームも例外チェインも全部保存するんだよね?
自力でやるのはけっこう面倒そうな気がする

文字列化したい理由は何?
396デフォルトの名無しさん:2007/09/05(水) 23:25:02
>>394
> 一般的に「オブジェクトをXML形式でシリアライズする」と言うんでしょうか?
さあ?一般的な言い回しは分からないや。
> toStringでも要件さえ満たせばシリアライズと言うって事?
オブジェクトを復元できるなら実装は問わないんじゃないのかな。
397デフォルトの名無しさん:2007/09/05(水) 23:39:49
toStringでも復元できるクラスもあれば、できないクラスもある。
XMLでも然りなんではないかね?

って、シリアライズの定義ってデシリアライズ可能な事まで含まれるんだろうか?
ちょっと調べたところだと、必須という記述はなかった。
復元できなきゃ使いようがないというのは確かだが・・・
398デフォルトの名無しさん:2007/09/05(水) 23:47:47
デシリアライズできないシリアライズに意味はあるのでしょうか?
再構築可能性は記述に無くても暗黙の前提だと思うけど。
399デフォルトの名無しさん:2007/09/05(水) 23:57:43
意味はないんじゃない?
だからといって行間嫁というわけにはならんけど。
完全な復号はできなくとも、シリアライズの過程の行間を読んで復号ってのはないとは言い切れない。
400デフォルトの名無しさん:2007/09/06(木) 00:07:56
惑わされるな。>>386はシリアライズを何のためにするのか理解してなくて
単にオブジェクトの状態を外部に保持させたいだけだ。

シリアライズは関係ない。
401デフォルトの名無しさん:2007/09/06(木) 01:44:46
関数の後ろにthrows Exceptionって続いてるのは一体どういう事を意図した文法なんでしょうか?
public Sample05Canvas()
throws Exception
{
}
こんな感じです。
402デフォルトの名無しさん:2007/09/06(木) 02:31:31
>>401
関数じゃなくてメソッド。
Exception とそのサブクラスを受け取る必要があることを示す。

Exception のみ、というのは単なる手抜きで、人様向けには使ってはいけない。
仕様から発生する例外に合わせ、適切なException のサブクラスを用いること。
403デフォルトの名無しさん:2007/09/06(木) 11:29:06
>>387-400
申し訳ありません。記述不足が混乱を招く典型的な状況ですね。

くみ取って頂いていた方もいらっしゃいますが、
例外オブジェクトを外部で保持し、必要に応じて復元したいと言う事に尽きます。

それこそ ObjectOutputStream で書き出す方法もあるかとは思うのですが、
JDK やモジュールのバージョン間の制約が思わぬ所で問題となりそうな気がしまして、
できれば何かしらのフォーマットで書き/読み出しするのに良い方法が
あればと思いました。XML などと申し上げましたが、human-readableである必要は全くありません。

しかし、やはり >>395 でご指摘のあるような点はどう頑張ってもありますよね…
404デフォルトの名無しさん:2007/09/06(木) 11:34:16
>>403
Throwする必要はないんだったら、
toStringしたのを保存しておけばいいじゃないかな?
もう少し頑張れば、
Throwable.getStackTrace() した結果のリスト項目毎に別ファイルにばらまいておくとか?

何かエラーログを取りたいだけなんじゃないかという気がしてきた。
405デフォルトの名無しさん:2007/09/06(木) 12:15:19
例外オブジェクトを復元して何に使うつもりなのかだな
406デフォルトの名無しさん:2007/09/06(木) 12:30:45
Stringで文字列として保存してある変数を参照して、
その文字列の変数を取り出すには
どうしたらいいんでしょうか
407デフォルトの名無しさん:2007/09/06(木) 12:37:42
>>406
意味が分からん。
仮に、
>文字列として保存してある「変数名」を使って、
>その「変数名」の表す変数の「値」を取り出す
のであれば、リフレクションを使う。
408デフォルトの名無しさん:2007/09/06(木) 13:18:17
>>406
面倒なことを考えたくないなら、 commons-beanutils を使う。
他の面倒なことが起きるかもしれないけど。
409デフォルトの名無しさん:2007/09/06(木) 14:34:04
プログラム(下のa.class)の中で、
Properties prop = new Properties();
prop.load(new FileInputStream("test.properties"));
こういう呼びだし方をしています。
下記のようなファイル構成で、シェル(a.sh)の中で
java -cp `dirname $0` test.a
という呼び方で実行したいと考えています。
A┬ test
| └― a.class
├ test.properties
└ a.sh
ここでどのようなシェルの実行の仕方をしても
( A/a.sh 、 /***/A/a.sh 、 ./a.sh)
test.propertiesファイルを読み込めるようにしたいのですが、
どのように実装すればよいのでしょうか。
410デフォルトの名無しさん:2007/09/06(木) 14:37:54
java -cp `dirname $0` test.a
をあきらめる。
411デフォルトの名無しさん:2007/09/06(木) 14:40:01
>>409
prop.load(getClass().getClassLoader().getResourceAsStream("/test.properties"));
412デフォルトの名無しさん:2007/09/06(木) 14:55:34
HTMLFormElement.prototype.submit
を自動で何度もfireさせるって出来ないようにされてるのかな
413デフォルトの名無しさん:2007/09/06(木) 15:41:00
ボタンにあるフォーカスを意図的に解除することはできるのでしょうか?
ボタンがキーボードのスペースで反応しないようにしたいです。
414デフォルトの名無しさん:2007/09/06(木) 16:01:00
>>413
Component.setFocusable(boolean focusable)
フォーカスを得られないように出来る。

これをボタンに適用する。JButton で確認。
マウスで反応した後にもフォーカスを得ないことを確認。
415デフォルトの名無しさん:2007/09/06(木) 16:17:52
>>414
できましたー。
ありがとうございました。
416409:2007/09/06(木) 16:32:48
>>410
シェルの呼ぶ場所を固定化できればいいんですけどね
難しいんです・・・

>>411
すみません、mainの中で呼ぶ方法はないでしょうか?
417デフォルトの名無しさん:2007/09/06(木) 16:48:44
>>416
ClassLoader.getSystemResourceAsStream("/foo")
または
test.class.getClassLoader().getResourceAsStream("/foo")
418デフォルトの名無しさん:2007/09/06(木) 16:51:38
× "/foo"
○ "foo"
419409:2007/09/06(木) 17:13:10
>>417
ありがとうございます。Buildは通りました。
"/foo" はどこをあらわすのでしょうか?
ぬるぽが発生してしまいます。
どこからみて、 /foo になるのでしょうか?
javadocを見る限りでは、
classpathが通ってるところからの相対パスに見えるのですが・・・
420デフォルトの名無しさん:2007/09/06(木) 17:25:55
"./foo"カレントディレクトリからの相対パス
"/foo"ルートディレクトリからの相対パス
421デフォルトの名無しさん:2007/09/06(木) 17:29:50
やっぱり>>410しかないだろう。
>>417に加えて、起動スクリプトをこう変更したら?
#!/bin/sh
c0=`echo $0 | awk '{print substr($0, 1, 1)}'`
if [ $c0 = "/" ] ; then
abspath=$0
else
if [ $c0 = "." ] ; then
abspath="`pwd`/$0"
else
abspath=`which $0`
fi
fi
java -cp `dirname $abspath` test.a
422デフォルトの名無しさん:2007/09/06(木) 17:35:45
リソースの取得の場合はclasspathというよりそのクラスファイルがある場所じゃなかったっけ?
423デフォルトの名無しさん:2007/09/06(木) 17:37:44
>>419
test.properties を読みたいなら引数は "test" ですよ。
424409:2007/09/06(木) 17:49:25
>420
申し訳ないです。うまくいきません。
今はこちらを利用していますが、
ClassLoader.getSystemResourceAsStream("/test.properties")
ルート、実行シェルの場所に test.properties を置きましたが
読み込めませんでした

>421
クラスパスを絶対パスで書くのと相対パスで書くことの違いは
getSystemResourceAsStreamの内容がそこに依存しているから、
という認識で大丈夫ですかね?
425デフォルトの名無しさん:2007/09/06(木) 18:45:45
どなたかご教授下さいませ
下記コンパイルエラーをとりたく努力しております。
一言アドバイス下さい。
よろしくお願いいたします。

app\src\NESCanvas.java:684: シンボルを見つけられません。
シンボル: メソッド drawRGB(int[],int,int,int,int,int,int,boolean)
場所 : javax.microedition.lcdui.Graphics の クラス
g.drawRGB( core.fb, 256*8+8, 256, 80, 1, 240, 224, false
);
^
app\src\NESCanvas.java:745: シンボルを見つけられません。
シンボル: メソッド drawRGB(int[],int,int,int,int,int,int,boolean)
場所 : javax.microedition.lcdui.Graphics の クラス
zoomGra.drawRGB( core.fb, 256*8+8, 256, 20, 1, 240, 224,
false);
^
エラー 2 個
426デフォルトの名無しさん:2007/09/06(木) 18:53:35
427デフォルトの名無しさん:2007/09/06(木) 19:08:42
>>425
まだ頑張ってたのかお前。
Graphics.drawRGB(int[],int,int,int,int,int,int,boolean)が追加されたのはMIDP2.0からだよ。

コンフィギュレーションがCLDC1.1で
プロファイルがMIDP2.0か確認しろ。

javacの-bootclasspathと-extdirsを見直せ。
ついでにjavacのバージョン晒せ。
428デフォルトの名無しさん:2007/09/06(木) 19:08:55
>>425
javax.microedition.lcdui.Graphicsクラスのリファレンスをよく読め
drawRGB(int[],int,int,int,int,int,int,boolean)というメソッドは存在しないと言っている
429デフォルトの名無しさん:2007/09/06(木) 19:12:06
>>425
教授下さいってのは大学で言え
ここでは配布していない
430デフォルトの名無しさん:2007/09/06(木) 21:50:08
教授ってプロフェッサーの意味だけじゃないよね
431デフォルトの名無しさん:2007/09/06(木) 21:55:01
で?
432デフォルトの名無しさん:2007/09/06(木) 21:55:48
まぁでも教授っていうのはもっとしっかり教え授けることを指すな。
掲示板で軽い質問を返すときは教示だ。
433デフォルトの名無しさん:2007/09/06(木) 22:10:09
質問です。
http://faces.bascule.co.jp/tutorial/
上記プログラムを動かそうとしたのですが、以下のようなメッセージが出ます。
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/apache/crimso
n/tree/XmlDocument
at jp.faces.RoomInfo.outputAll(RoomInfo.java:307)
at jp.faces.FacesXML.processQR(FacesXML.java:223)
at jp.faces.FacesXML.DocumentAnalysis(FacesXML.java:563)
at jp.faces.FacesXML.readXML(FacesXML.java:52)
at jp.faces.FacesClient.run(FacesClient.java:102)

まさに>>1に書いてある初心者ミスだとは思うのですが、どうしても対処できません。
検索したところ、CLASSPATHの設定が上手くいってないということなのですが、
どう設定すればよいのでしょう…。

現在は[システムのプロパティ]>[環境変数]>[システム環境変数]
でCLASSPATHの値はC:\Program Files\Java\jdk1.5.0_07\jre\lib\ext;.
PATHの値はC:\Program Files\Java\jdk1.5.0_07\bin;になっています。
434デフォルトの名無しさん:2007/09/06(木) 22:23:15
初心者はCLASSPATHを設定しない方がいい
よく読んでいないけど、はずしたら動くかもよ
435デフォルトの名無しさん:2007/09/06(木) 22:29:30
>>433
JDK5.0で、JVM同梱のXMLプロセッサが変更されたためと思われ。
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/xml/jaxp/JAXP-Compatibility_150.html

元のページは見てないけど、ソース修正が必要になるかも。
436デフォルトの名無しさん:2007/09/06(木) 22:38:33
strutsを使用しています。特にロケールの設定などはプログラム内で行っていません。
ブラウザの言語設定を英語でアクセスすると、英語のメッセージリソースファイルが使用されてしまうのです。
strutsは何で判断をしてメッセージリソースファイルをだしわけているのでしょうか?
437デフォルトの名無しさん:2007/09/06(木) 23:12:43
ブラウザの言語設定
438デフォルトの名無しさん:2007/09/06(木) 23:14:39
>>435
まさにその通りでした。
version1.4に差し替えたところ、とりあえず正常に動作しました。
的確&迅速なアドバイス本当にありがとうございました!
439デフォルトの名無しさん:2007/09/06(木) 23:15:54
>>437
そうなんですね。ありがとうございます。

ブラウザの言語設定に関わらずある言語のメッセージリソースファイルを出すには
どうすればよいのでしょうか?
440デフォルトの名無しさん:2007/09/07(金) 00:45:14
説明が下手ですみません。

データベース内の画像全てを表示し、クリックした画像が拡大される
というのを作りたいのですが、これには必要個数分コンポーネントを作成し
それぞれに対してアクションコマンドの設定が要りますか?
今はループを使って画像を羅列表示させていますが、詰まりました。
441デフォルトの名無しさん:2007/09/07(金) 01:11:07
>>440
説明が下手杉
・データベースの種類は何だ?
・何をどんな風にクリックするんだ?
・何のコンポーネント?
・アクションコマンドって何の用語?
・今は表示させているとは、何を使ってどのように表示させている?

全く持って意味が通じない。
442440:2007/09/07(金) 01:28:35
>>441
解決しました!レスありがとう
443デフォルトの名無しさん:2007/09/07(金) 01:29:32
>>442
具体的にどうやって解決したんだ?
444デフォルトの名無しさん:2007/09/07(金) 01:42:54
>>443

心配してくれてありがとう
445デフォルトの名無しさん:2007/09/07(金) 01:48:04
>>444
氏ねゴミ
446デフォルトの名無しさん:2007/09/07(金) 04:11:48
WindowsのコマンドプロンプトからJavaのHogeクラスからの復帰値を取得したいのですが、方法がわかりません。
やりたいことは、以下のような感じです。

set VAL = java Hoge

どなたか教えてください。
447デフォルトの名無しさん:2007/09/07(金) 05:13:30
実行環境に依存しない方法で、読み込んだ
ファイルの種類を判定する方法ってありませんか。
せめてテキストベースかバイナリファイルかぐらい判定できるといいのですが。
448デフォルトの名無しさん:2007/09/07(金) 06:24:34
>>446
System.exit(数値) で値を返せる。
文字列は返せないし、Java から環境変数は設定できないから
そういう時は戻り値をファイルに格納するなりして対処する。

>>447
テキストかバイナリかは文字のエンコードが何になるかで判定方法が
変化する。もっと前提を制限しないとまともな返答は無いと思え。
ところでファイルの種類を判別って、極窓みたいなことがしたいってこと?
449デフォルトの名無しさん:2007/09/07(金) 08:25:36
>>448
回答ありがとうございます。ただ、System.exit()から、値の受取かたが、分からないのです。
Linuxのシェルでは、「$?」で取得できたのですが、Windowsのバッチファイルでの受取かたがわかりません。
450デフォルトの名無しさん:2007/09/07(金) 09:19:10
>>449
> Linuxのシェルでは、「$?」で取得できた
つまりSystem.exitで値を出す側(Java)の質問でなく、
> Windowsのバッチファイルでの受取かたがわかりません
だから、Windowsの使い方が分からないということで、スレ違い、もしくは、板違い。

「windows 環境変数 返り値」でぐぐって、最初の方のページを$?で検索。
451デフォルトの名無しさん:2007/09/07(金) 09:21:24
>>448
テキストベースのファイルをJISAutoDetectで読み込んでいるので、
とくにテキストエンコードの指定はありません。

text、html、css、xml、ini、cvs、htaccess、cpp、java、ect...など、
いろいろ読み込もうと思ってます。
極窓まではいきませんが、たとえばワードのファイルなどが
間違って読み込まれたりしないように判定したいのです。
452デフォルトの名無しさん:2007/09/07(金) 09:27:01
>>451
UNIX由来のfileってコマンドがある
そのソースを読んでみることをお勧めする
Windows実装もある
ところで「テキストベースのファイルをJISAutoDetectで読み込んでいる」らしいが
「せめてテキストベースかバイナリファイルかぐらい判定できるといいのですが」と矛盾していないか?
453デフォルトの名無しさん:2007/09/07(金) 09:49:45
Cとかやったこと無いけどいきなりJAVAから入るのって無謀?
454デフォルトの名無しさん:2007/09/07(金) 09:54:22
>>453
無謀ではない
何から入ってもできない人間はできない
ただせめてOSなどのプログラミングを取り巻く環境の扱い方くらいは知っておくべき
455デフォルトの名無しさん:2007/09/07(金) 09:56:28
>>454
ありがとう
やる気が出てきた 台風の中本屋行ってくる

456デフォルトの名無しさん:2007/09/07(金) 11:19:43
台風の中本屋に行くようなやつはプログラマには向いていない
457デフォルトの名無しさん:2007/09/07(金) 11:36:17
そうか?
人が少なくてゆっくり選べるから、お勧めだな。むしろ合理的だ。
あと、水着で行けばもっと合理的だぞ。
458デフォルトの名無しさん:2007/09/07(金) 12:02:17
Javaを覚えるとどんなメリットありますか?
459デフォルトの名無しさん:2007/09/07(金) 12:07:56
>>458
言語を1つ習得できる。
正直、メリットデメリット考えて言語選ぶんだったらVBやったほうが
いい。仕事も多いしな。
460デフォルトの名無しさん:2007/09/07(金) 12:18:35
すみません、スレ違いなのは承知なのですが、
こちらの方達なら何かご存知かと思い、
質問させて頂きます。

http://www.poitan.net/

こちらのサイト、検索結果が全く画面表示されません。
昨日まではちゃんと使えていたのですが、、、。

『FAQ』欄にあるように、Javaスクリプトは有効に
しているのですが。 何か他に原因がありますでしょうか?
461デフォルトの名無しさん:2007/09/07(金) 12:21:25
>>452
バイナリファイルは処理の仕様外ですが、選びさえすれば読んでくれてしまうので、
バイナリファイルをはじきたいのです。

>UNIX由来のfile
一応調べたところfileコマンドの概要はなんとなくわかったのですが、
それはJavaのコードから利用できるのでしょうか。
462デフォルトの名無しさん:2007/09/07(金) 12:26:10
>>459

VB覚えると金持ちになれますか?
463デフォルトの名無しさん:2007/09/07(金) 12:30:45
>>462
金持ちになりたきゃアメリカ行って一発当てて来い。
もしくは宗教の教祖になれ。儲かるらしいから。
日本でプログラマは間違っても金持ちにはなれんからVB覚えても無駄。
何覚えてもむだだよ。マ板いきゃわかるだろ。
464デフォルトの名無しさん:2007/09/07(金) 12:33:48
>>460
Firefox2.0.0.6だがちゃんと使えるぞ?
つーかこんなとこに書かないでポイ探に問い合わせろよ。
それとも宣伝か?
465デフォルトの名無しさん:2007/09/07(金) 12:38:09
>>463

そうなの?
ビルゲイツのようになりたいんです!!
466デフォルトの名無しさん:2007/09/07(金) 12:55:33
>>461
普通にファイルを読み込んでいって、文字以外のものが現れたらエラーにする。
くらいでいいんじゃない?
467デフォルトの名無しさん:2007/09/07(金) 13:09:51
>>466
UTF-8のHTMLファイルを読んだ場合はどうすんだ?それが UTF-8 エンコード
の文字なのかバイナリファイルなのかはどこで区別する?
468デフォルトの名無しさん:2007/09/07(金) 13:10:58
>>465
そうか。まあがんばれや。
469デフォルトの名無しさん:2007/09/07(金) 13:19:05
>>458
暇が潰せる
470デフォルトの名無しさん:2007/09/07(金) 13:54:30
>>465
ビルゲイツはプログラマだが、奴にあったのは商才
471デフォルトの名無しさん:2007/09/07(金) 14:00:46
>>467
451はJISAutoDetectで読んでるらしいから、UTF-8とかそもそも無理
472デフォルトの名無しさん:2007/09/07(金) 14:08:09
>>466>>467>>471
JISAutoDetectなんで確かにUnicodeは関係ないですね。
UTF-8もとりあえず一通り形が出来上がったら追加しようとは思ってるんですけど。
473デフォルトの名無しさん:2007/09/07(金) 14:09:16
460です。 464さん、普通に使用できるんですね。

ポイ探にはメールにて問い合わせ(一ヶ月くらい前)を
しているのですが、未だにお返事がない状態です。
474デフォルトの名無しさん:2007/09/07(金) 14:17:31
>>461
ソースを読めばどうやってファイルの種類の判別やってるかそのロジックが分かるだろうに
アルゴリズムは言語とは無関係だから当然Javaのコードでも利用できる
475デフォルトの名無しさん:2007/09/07(金) 14:21:00
>>474
ああそういうことでしたか。てっきりfileコマンドをjavaから使えば、
といわれているのかと思いました。
そうですね。調べてみます。
ありがとうございました。
476デフォルトの名無しさん:2007/09/07(金) 14:27:11
>>475
いや、fileが存在する環境なら外部コマンドとしてJavaから実行するのも一つの手かもしれない
個人的にはJavaで閉じてしまえるものはそうしたいが好みやその他いろいろあるだろうから
477デフォルトの名無しさん:2007/09/07(金) 14:30:01
変数について教えてください。

今、クラス毎にファイルを分け、
同じパッケージに含めててコーディングしています。

異なるクラス同士でリテラルを共有したいなら、
リテラルを含むクラスを抽象クラスにして
各クラスに継承させれば良いと思うのですが、
変数を共有したいときはどうすれば良いでしょう。

ご教授願います。
478デフォルトの名無しさん:2007/09/07(金) 14:33:31
変数を含むクラスのインスタンスを共有させればいいと思うよ
479477:2007/09/07(金) 14:51:55
>>478
インスタンスの共有とはどういう事でしょうか?

Class1 に変数 n を含んでいるとして、
Class2 と Class3 でそれぞれ

Class1 cs = new Class1();
cs.n として使っても、 Class2 で cs.n が変更されたとき、
Class3 の cs.n は変更されないと思うのですが、違う意味でしょうか。
480デフォルトの名無しさん:2007/09/07(金) 15:16:06
クラス全体で共有したいって意味ならスーパークラスの抽象クラスにstaticで定義すればいいし、
いくつかのインスタンスで共有したいのなら、抽象クラスに非staticで定義して、
インスタンスが保持するその参照が一致するようにしておけばいいんでは?
481デフォルトの名無しさん:2007/09/07(金) 15:19:30
>>477
○○だと思うなら、その通りにやってみればいいのに。
>>479
それのどこが共有してるんだか。
強いて言えば、それはクラスの共有。でも、そんな言い方しないな。
482デフォルトの名無しさん:2007/09/07(金) 15:36:49
class Class1{
  int n;
}
class Class2{
  final Class1 cs;
  Class2(Class1 cs){
    this.cs=cs;
  }
}
class Class3{
  final Class1 cs;
  Class3(Class1 cs){
    this.cs=cs;
  }
}
public class Hoge {
  public static void main(String[] args) {
    Class1 cs = new Class1();
    Class2 cs2=new Class2(cs);
    Class3 cs3=new Class3(cs);
    for(int i=0;i<5;++i){
      cs2.cs.n=i;
      System.out.println("cs.n="+cs.n+" cs2.cs.n="+cs2.cs.n+" cs3.cs.n="+cs3.cs.n);
    }
  }
}
483477:2007/09/07(金) 15:52:45
>>480,481,482
ありがとうございます。
おかげで理解できました。
484デフォルトの名無しさん:2007/09/07(金) 20:33:51
リテラルの共有ってどういう意味?
485デフォルトの名無しさん:2007/09/07(金) 20:47:25
>>484
new String("string") == new String("string") が false になるのに
"string" == "string" が true になる。
486デフォルトの名無しさん:2007/09/07(金) 21:10:27
>>457
あと、歯ブラシとシャンプーを忘れずにな!
487デフォルトの名無しさん:2007/09/07(金) 21:11:30
>>461
氏ね
488484:2007/09/07(金) 21:16:57
>>485
知ってます。
同じように自前で作成したクラスのインスタンスをリテラルとする事が可能で共有できるんですか?
489デフォルトの名無しさん:2007/09/08(土) 01:36:06
>>427
コメントありがとうございました。
今から内容について調べてみます。
誠ありがとうございます。
490デフォルトの名無しさん:2007/09/08(土) 01:39:24
>>427
versionは1.5.0_12でした。
491デフォルトの名無しさん:2007/09/08(土) 02:51:10
>>427
解決しました。MEXAのインストール先がC:\Program Filesになっていたからlibが
C:\SOFTBANK_MEXA_EMULATOR12にインストされていなかったからでした。

どうもいろいろとありがとうございました。
ほんと感謝しています。
492デフォルトの名無しさん:2007/09/08(土) 04:50:54
お前はjavaの基礎からやった方が良い。
悪いことは言わんからSEでアプリ作れるようになってからMEに手を出した方が良いよ。
493デフォルトの名無しさん:2007/09/08(土) 10:21:51
private void functionA(String xxx) {}
private void functionA(Thread xxx) {}

という二つの関数があった時、
functionA(null)
という呼び出しに応じるのはどちら?
494デフォルトの名無しさん:2007/09/08(土) 10:31:37
>>493
コンパイルエラーにならないと言語仕様に反する
495デフォルトの名無しさん:2007/09/08(土) 10:38:13
>494
了解。実はね、JSCL1.2(携帯Vアプリ、S!アプリ)のAPIをボケっと眺めていたら
http://notitle.net/vappli/doc/P5/com/j_phone/io/CameraConnection.html
CameraConnection#setPictureFrameが、両方ともnullを受け取る仕様で、
あれどちらが呼ばれるんだっけ?って思ったんだ
(byte[])nullとか指定しないといけないんだね。API設計ミスなんじゃないのかなぁ
496デフォルトの名無しさん:2007/09/08(土) 10:47:05
>>495
そういうところに気がつくのはすごいと思ったが、
自分でサンプル作って試せば一瞬で分かることなのに。ともね….。
497デフォルトの名無しさん:2007/09/08(土) 10:50:23
>>493の書き込みをするのと同じくらいの時間で確認できるだろうに・・・
498デフォルトの名無しさん:2007/09/08(土) 11:08:26
>>496
まずJDKのインストールからしないと…
499デフォルトの名無しさん:2007/09/08(土) 11:23:21
どうせインストールすらできねーんだろw
500デフォルトの名無しさん:2007/09/08(土) 11:30:06
技術者としての自覚ゼロだな
501デフォルトの名無しさん:2007/09/08(土) 11:43:05
手元にjdkなけりゃ自分で試すより聞いた方が早いんじゃね?
502デフォルトの名無しさん:2007/09/08(土) 12:03:06
早いかどうかはともかく、自分で試せるのに試さず他人任せってのが技術者として失格
503デフォルトの名無しさん:2007/09/08(土) 13:42:39
俺はつまらん技術者じゃないからw
技術者に寄生しておもしろおかしく生きていく真っ当な人間だからjdkなんか入れねえ
504デフォルトの名無しさん:2007/09/08(土) 13:44:13
こうして502が車輪再発明を行ったのは、502の人生で7回目となった
505デフォルトの名無しさん:2007/09/08(土) 13:58:12
技術者としての自覚(笑)
506デフォルトの名無しさん:2007/09/08(土) 14:00:07
>>503
ウンコに寄生してもおもしろくもおかしくもねぇだろ。
あ、スカトロ趣味なのか。それなら納得。
507デフォルトの名無しさん:2007/09/08(土) 14:03:35
>>506
くやしいのうwwwくやしいのうwww
508デフォルトの名無しさん:2007/09/08(土) 14:11:08
初心者だったら自分より技術ある奴に上手く寄生するのは重要だな
何時までも寄生していたらウンコだが
509デフォルトの名無しさん:2007/09/08(土) 14:27:18
ウンコがウンコを笑ってる
510デフォルトの名無しさん:2007/09/08(土) 15:04:17
ゲイツがクソどもに寄生して巻き上げた金で優雅な生活を送ってる時に
その金が野グソの中から出てきたものだろうと気にせんよ
金に綺麗も汚いもない
あるのは搾取するクソと搾取されるクソだ
どっちのクソになりたい?
511デフォルトの名無しさん:2007/09/08(土) 15:13:22
これが本当のクソスレ
512ハートマン:2007/09/08(土) 15:14:58
まるでそびえ立つクソだな
513デフォルトの名無しさん:2007/09/08(土) 15:22:25
残念ながらJavaスレなんでゲイツには巻き上げられていないという話
514デフォルトの名無しさん:2007/09/08(土) 17:33:46
C慣れしているJava初学者です。
カンマ演算子について知りたい事があります。
  for ( i = 0, j = 0; i < 10; ++i, ++j )
の様な所は問題ないのに、
  i = 1, j = 2;
とするとコンパイル出来ないのは、Cをやっていた自分にとっては
直感に反する違和感があります。

この辺をきちんと学習したいのですが、入門書的な本は網羅的でないのが不満です。
Cで言う所のK&R的な、網羅的に文法が学習できる本のお勧めはありますか?
515デフォルトの名無しさん:2007/09/08(土) 17:39:51
>>514
理論的に知りたいならば、言語仕様を嫁
書式とかコンパイルが通り、かつJavaのマナーにしたがっているコードが書けるようになりたいならば、コーディング規約を熟読
後、意外と手堅く文法がまとまっているのはSJC-Pの問題集とかテキストだったりするw

個人的には「Javaのメカニズム―エラー処理・例外で困っているあなたに」って本がオススメ。
516デフォルトの名無しさん:2007/09/08(土) 17:40:48
>>514
これで試してみたけどコンパイルできたし実行時エラーも無かったよ
class ForLoopTest {
public static void main(String[] args){
int i,j;
for (i = 1, j = 2; i < 10; i++, j++) {
System.out.println("i: " + i + ", j: " + j);
}
}
}
コンパイルできなかったときのコードあれば見せてちょ
517デフォルトの名無しさん:2007/09/08(土) 17:48:54
>>516>>514
int i, j;
i = 1, j = 2;
だとコンパイルが通らないと言ってるんだよ、多分。
Javaは1行で1つのステートメントを記述すのが基本だから、
int i, j; が特別に許されているだけ。
これも、コーディング規約的には、
int i;
int j;
と書く、もしくは初期化だけはJavaでは推奨されないから
int i = 1;
int j = 2;
と書くべき。
Cだと宣言にメモリの確保の意味が強いけど、Javaではあんまり意識しちゃいけない

518516:2007/09/08(土) 18:04:33
>>517
ああそういうことか・・・納得。サンクス
519デフォルトの名無しさん:2007/09/08(土) 18:10:04
forの最初と最後の部分だけカンマで区切って複数の文が書けるってだけの話じゃないの?
520デフォルトの名無しさん:2007/09/08(土) 18:45:20
>>514
Java言語仕様が最も詳しい。
ただ、索引が階層化されてて、見づらいし、定義をさがすためにあっちこっちのページに飛ばなきゃいけないからきつい。英語がそこそこ出来るなら、HTML版がお勧め。


for文だと
for ( ForInit; Expresion; ForUpdate ) と言う定義で、
ForInitは StatementExpressionList(式文のリスト)とローカル変数宣言が記述できる

StatementExpressionListの定義はこう
StatementExpression
 もしくは
StatementExpressionList, StatementExpression
                ↑カンマ

つまり、for文の初期化コードで使用するカンマはStatementExpressionListの一要素として定められていて、カンマ演算子というものは存在しない。
書籍やネットでJavaにカンマ演算子がある旨が記載されていたら、厳密には誤り。
521デフォルトの名無しさん:2007/09/08(土) 18:46:16
StatementExpressionの構成要素の中に、Assignment(代入)も含まれているから、
StatementExpressionListは i=1,j=2 のような書き方ができるわけ。

StatementExpression:
Assignment ←これ
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression

一方、j=2; っていうのはExpressionStatementに該当して、
ExpressionStatementは
 StatementExpressoin ; という定義になる。※StatementExpressionにセミコロンが付く。

ここで、StatementExpressionはAssignmentが該当するから、
Assignment ; という形に置き換えられる。

つまり、ExpressionStatementの構成要素にカンマは登場しないから、
 i = 1, j = 2; という書き方は出来ない。

じゃあ int i=0, j=0; は何でOKなのか、というと、ローカル変数の定義という定義が別にあって・・・
522デフォルトの名無しさん:2007/09/08(土) 18:50:42
>>519
そうそう
簡単にいうと、Javaは要所要所でそれぞれ記述の定義が異なるから、カンマが使えるところと使えないところが有るってだけの話。
523デフォルトの名無しさん:2007/09/08(土) 18:50:46
質問です。

栄養ドリンクとポテトチップスの食べ合わせについてなのですが、
これは栄養ドリンクの効果を下げたりすることはないのでしょうか?
健康に害があったりしないのでしょうか?

また、栄養ドリンクとコーヒーの飲み合わせについても同様に教えてください。
524デフォルトの名無しさん:2007/09/08(土) 18:56:20
Java( coffee )と 栄養ドリンクの組み合わせは、
プロジェクトが佳境にさしかかると有効です。健康に害があるのは言うまでもありません。
525デフォルトの名無しさん:2007/09/08(土) 19:00:44
526デフォルトの名無しさん:2007/09/08(土) 19:20:17
>>522
というより、C言語にあるカンマ演算子がJavaには無いってだけの話のような。
527デフォルトの名無しさん:2007/09/08(土) 19:30:00
>>526
まぁそう言い切っちゃうと、じゃあfor文のカンマは何だよ、っていう話になると思って
528デフォルトの名無しさん:2007/09/08(土) 19:32:28
>>527
Javaでは forの初期化部分と更新部分だけ特別扱いされてる、って説明で良いんじゃね?
529デフォルトの名無しさん:2007/09/08(土) 19:36:43
一部のC信者の為に用意されていただけだろう
使わなきゃならない場面なんてほとんどないしな
530デフォルトの名無しさん:2007/09/08(土) 19:38:58
C信者などと言ってるけど、
JavaがC風の文法でなかったらSmalltalkと同じように普及しなかったよ。
531デフォルトの名無しさん:2007/09/08(土) 19:39:20
>>528
for文だけじゃない
これ全部列挙するの面倒
532デフォルトの名無しさん:2007/09/08(土) 19:43:08
なんで全部列挙せにゃならんのだ……
533デフォルトの名無しさん:2007/09/08(土) 19:45:35
だってそうしないと、for以外のカンマは何よ?とか話がひろがりんぐでしょ
534デフォルトの名無しさん:2007/09/08(土) 19:52:01
>>533みたいな性格の奴じゃなければ納得するか引き下がるよ。
535デフォルトの名無しさん:2007/09/08(土) 19:54:18
ふーん
536デフォルトの名無しさん:2007/09/08(土) 19:55:36
>>531
ちなみに、for以外のカンマってどれ?
537デフォルトの名無しさん:2007/09/08(土) 19:57:04
変数宣言で同じ型を複数宣言できる部分ぐらいじゃね?
538デフォルトの名無しさん:2007/09/08(土) 20:03:04
int[] array[];
とかw
539デフォルトの名無しさん:2007/09/08(土) 20:04:54
それカンマじゃねーし
540デフォルトの名無しさん:2007/09/08(土) 20:06:56
javaだとカンマは演算子という位置づけじゃないからこういうのは不可。
a = 1, 2, 3; とか while (a++, b < 10) とか。
541デフォルトの名無しさん:2007/09/08(土) 21:19:04
>>523
スーパーエスパーで答えてみる

栄養ドリンクがうまくオーバライドされて胃の中でポテチと一緒に
取り込まれるので、問題ないよ。

コーヒーはインタフェースなのでUCCとかポッカで実装クラスを用意しないと飲めない。

でも、カルビー・ポテトチップスの今の仕様が分からないので、メーカーのHPで調べれば?

542デフォルトの名無しさん:2007/09/08(土) 23:40:47
シンタックスシュガーというやつですか。
543デフォルトの名無しさん:2007/09/09(日) 23:11:29
ソケットって何ですか?
544デフォルトの名無しさん:2007/09/09(日) 23:16:27
電球を入れる穴だよ
545デフォルトの名無しさん:2007/09/09(日) 23:17:36
コンセントを差し込むところ

冗談はさておき、自分のPCと他のコンピュータの間でネットワーク通信するときに使うもの
java.net.Socket クラスを調べてみれ
546デフォルトの名無しさん:2007/09/09(日) 23:32:26
>>545
プロセスとプロセスの間の垣根を越えて通信する
PC間は関係ナッシング
547デフォルトの名無しさん:2007/09/09(日) 23:51:57
>>546
JMSみたいなものかな?
今度の休みに、調べてみます。
548デフォルトの名無しさん:2007/09/10(月) 00:04:51
socketはネットワークプログラムの基礎だから、簡単なチャットシステムくらい実装できるようには勉強するといいよ
549デフォルトの名無しさん:2007/09/10(月) 00:34:05
http://www.smg.co.jp/seminar/java/index.html

を参考にvistaで 、"J2SE5.0(Java 2 Platform Standard Edition 5.0)"

をインストールしたのですが、環境変数の設定の仕方がよくわかりません。

xpのやり方は書いてあるのですが、vistaはxpと表示が結構違うところがあるので…
お手数ですがご教授お願いします。

ソースコード以前の問題ですいません。
550デフォルトの名無しさん:2007/09/10(月) 00:46:17
551デフォルトの名無しさん:2007/09/10(月) 10:43:12
Javaの勉強用にデスクトップアプリケーションを作るとすると
どのようなアプリケーションが最適でしょうか?
(GUIアプリケーションは未経験です)
552デフォルトの名無しさん:2007/09/10(月) 10:52:41
Eclipse
553デフォルトの名無しさん:2007/09/10(月) 10:58:17
551です。
すいません、開発環境ではなくて
どのようなアプリケーションを作ってみるのが
勉強し易いかってことです。
554デフォルトの名無しさん:2007/09/10(月) 11:02:41
テキストエディタとか電卓とか○×ゲームとか
555デフォルトの名無しさん:2007/09/10(月) 11:06:07
なるほど、ありがとうございます
556デフォルトの名無しさん:2007/09/10(月) 11:15:28
ユーザから受け取った文字列によって分岐させたいと考えています。

switchを利用すると1文字でしか判断できないと思うのですが、
ifを用いて、ひたすらstring.equalsをやるってのも微妙な気がします。

何かよい方法はないでしょうか?
557デフォルトの名無しさん:2007/09/10(月) 11:30:30
HashMap<String, Method> とか
558デフォルトの名無しさん:2007/09/10(月) 11:32:04
>>556
if ... else if をずらずらやるのが一番わかりやすいと思いますよ。

どうしても嫌なら、hashcodeで何とかするとか、enumに変換して何とか
するとか、HashMap で文字列=>処理内容のインスタンス の対応表を作っ
ておくとか。

559デフォルトの名無しさん:2007/09/10(月) 11:40:23
ハッシュとか。
560デフォルトの名無しさん:2007/09/10(月) 13:53:35
hashを利用するか、if〜elseしかやはりないようですね・・・
ありがとうございました。
561デフォルトの名無しさん:2007/09/10(月) 16:05:46
どう考えてもジャンプテーブルの出番。
ハッシュで実装かな。
562デフォルトの名無しさん:2007/09/10(月) 17:46:51
.jnlpという拡張子のついているファイルをダウンロードしたのですが、
どう実行すればいいのか分かりません。
検索してみたらどうやらXMLファイルらしいのですが、余計に訳分かりません。
563デフォルトの名無しさん:2007/09/10(月) 17:56:05
JREをインストールしてください
ダブルクリックで動くようになります
http://java.com/ja/download/windows_xpi.jsp?locale=ja&host=java.com
564デフォルトの名無しさん:2007/09/10(月) 18:49:47
>>560
interface Handler {
  void handle();
}
と定義して、処理の内容は匿名クラスにでも記述。
static HashMap<String, Handler> MAP; として、
イニシャライザで登録。
Handler handler = MAP.get(inputString);
handler.handle();

これでif文はなくなる。
おまけに有効文字列以外はhandlerがnullになるので一石二鳥。
565デフォルトの名無しさん:2007/09/10(月) 18:55:48
俺ならインタプリタパターンとストラテジーパターンで分岐させるかな。
今後の拡張やらがどうせあると踏んで。

正規表現でいければ楽だけど。
566デフォルトの名無しさん:2007/09/10(月) 19:03:16
>>564
null だと例外が出るから、こんなのも。
Handler handler = new Handler() { void handle() {} }; // NullHandler
if (MAP.contains(inputString))
  handler = MAP.get(inputString);
handler.handle();
567デフォルトの名無しさん:2007/09/11(火) 07:20:07
JUnitを使用したDBに対するテストについての質問です。
現在、課題でJ2EE+Tomcat+MySQL環境でのDB接続Webアプリを
作成しています。
DBに対するInsert、Updateを行った際、意図した挿入、更新が行われた
ことを確認するテストについてご意見をお聞かせください。

Tableは次のようになっています。
id( primary key auto_increment), user_id, user_name, insert_user_id, insert_date, update_user_id, update_date

このテーブルに対するinsert、updateで、insert_date、update_dateをサーバタイムで書き込むのですが
この確認をJUnitでどのように行えばよいのかがわかりません。

確認方法など、ご意見をよろしくお願いします。
568567:2007/09/11(火) 07:28:05
追記です。
insert_dateとupdate_dateはミリ秒まで格納されています。
569デフォルトの名無しさん:2007/09/11(火) 08:56:57
Webから画像をダウンロードしたいのですが、URLConnection con = url.openConnection();から
InputStream is = (InputStream) con.getContent();しようとすると実行時に
sun.awt.image.URLImageSource cannot be cast to java.io.InputStreamというエラーになります。
どうしたら画像をファイルにダウンロードできるでしょうか。
570デフォルトの名無しさん:2007/09/11(火) 10:19:31
>>569
URLConnection.getContent メソッドの戻り値は URL が示す情報が何なのか
に依存して変わる。画像の場合は URLImageSource って型になるからキャストに
失敗してる。
単純にバイトストリームがほしいだけなら URLConnection.getInputStream メソッド
を使え。
571569:2007/09/11(火) 10:37:12
>>570
できました。ありがとうございました。
572デフォルトの名無しさん:2007/09/11(火) 12:11:18
自分自身のファイルの場所を知るにはどうしたらいいですか?
たとえばfoo.jarというプログラムがあって
/aaa/bbb/foo.jar   へインストールされて実行された場合は「/aaa/bbb/foo.jar」を
/ccc/foo.jar   へインストールされて実行された場合は「/ccc/foo.jar」を取得したいのです。

new File(".").getAbsoluteFile()ではjava -jar foo.jarで起動した場合はカレントディレクトリが
拡張子の関連付けから起動した場合はホームディレクトリになってしまいました
573572:2007/09/11(火) 12:13:46
×インストール
○ファイルを置いて
意味は通じるとは思いますが。
574デフォルトの名無しさん:2007/09/11(火) 12:25:49
クラスローダに訊いてみるとか

public class Test {
public static void main(String[] args) {
for (URL url : ((URLClassLoader) Test.class.getClassLoader()).getURLs()) {
System.out.println(url);
}
}
}
575デフォルトの名無しさん:2007/09/11(火) 12:38:16
Jakarta Commons-IOのFileUtilsは、
staticメソッドを使ったAPI群だけど、
たとえば、FileUtils#readFileToString()
とかで、巨大なファイルをあるスレッドから読み出している時に、
別のスレッドからこのメソッドにアクセスするのは危険?

マルチスレッド環境でファイル入出力をやるなら、
ファイル入出力処理を各スレッドごとにインスタンス化できるような仕組みを
使うべきでしょうか。
576デフォルトの名無しさん:2007/09/11(火) 12:40:33
>>574
ありがとうございます。助かりました。

参考までに別な方法で失敗した奴w
System.getProperty("user.dir");
System.getProperty("java.class.path");
とするとjava -jarのときはuser.dir + java.class.pathでいけそうなんですが
関連付けから起動するとjava.class.pathが絶対パスになってしまう。
クラスローダーを使うのが確実ですね
577デフォルトの名無しさん:2007/09/11(火) 13:03:01
>>575
変なstatic変数を使ってない限りスレッドセーフ。
578デフォルトの名無しさん:2007/09/11(火) 13:12:12
>>577
レスありがとう。よければもう少し教えてください。
重複する内容ですが、

1.Thread-1からFileUtils#readFileToString()で巨大なファイルを読み込み。
2.Thread-1がまだファイル読み込み中に、Thread-2が同じメソッドを実行開始。

という状態があった場合、Thread-2の読み込み処理は
Thread-1での読み込み処理が終わるまで待たされるってことなんでしょうか?
579デフォルトの名無しさん:2007/09/11(火) 13:19:13
>>578
readFileToString() は synchrinized ではないので、
2スレッド同時に実行される。
580デフォルトの名無しさん:2007/09/11(火) 13:21:43
>>578
メソッドにsyncronizedが付いていたり、wait()メソッドを呼んだりしていなければ、
そういった同期化がされることはない。
2つのスレッドが、並行して同じメソッドを実行する。
インスタンス変数やstatic変数などを使用して同一の変数を
変更しようとしない限り、2つのスレッドはスレッドセーフに実行される。

これを機に、スレッドと同期化について学んでおくといいよ。
581デフォルトの名無しさん:2007/09/11(火) 13:37:00
メソッド内で定義される変数は、スレッドごとの別々のスタックに格納されるからスレッドセーフ
でいいんだっけ
582デフォルトの名無しさん:2007/09/11(火) 14:02:54
最初に呼ばれるServletでservlet.getServletContext()経由で
WEB-INFのパスを取得しています。
ただ、これは一回取れればいいのですが最初に呼ばれるサーブレットが
呼び出されるたびに実行されてしまい無駄な気がします。
一回だけにできないでしょうか?
583デフォルトの名無しさん:2007/09/11(火) 14:06:32
>>582
Servlet#init()で取得して、サーブレットのインスタンス変数に入れる。
が、このメソッドの実行で重くなることは殆どあり得ない。
気にスンナ。
584578:2007/09/11(火) 14:09:31
>>579-581
重ねてありがとうございます。
なんとなく理解できました。

staticメソッドをほぼ同時に複数のスレッドから実行しても、
staticメソッド内で定義されるオブジェクトは、>>581さんの
言うように別々のスタックに入るから、問題なく(干渉無く)
複数スレッドで扱えるということですね。

スレッドと同期化について、ググってきます。

585デフォルトの名無しさん:2007/09/11(火) 14:57:15
JPEGファイルをBMPに変換するライブラリがあったら教えてください。
586デフォルトの名無しさん:2007/09/11(火) 15:02:17
誤爆?
587デフォルトの名無しさん:2007/09/11(火) 15:05:44
誤爆じゃないです
588デフォルトの名無しさん:2007/09/11(火) 15:08:12
589588:2007/09/11(火) 15:08:42
まちがえた >>585
590デフォルトの名無しさん:2007/09/11(火) 15:10:22
ギャグ?
591デフォルトの名無しさん:2007/09/11(火) 15:17:21
誤爆じゃないなら
BufferedImage img=ImageIO.read(new File("A.jpg"));
ImageIO.write(img,"bmp",new File("A.bmp"));
592デフォルトの名無しさん:2007/09/11(火) 16:23:19
SWTって需要ないの?
593デフォルトの名無しさん:2007/09/11(火) 16:38:57
VectorがスレッドセーフでArrayListがスレッドセーフでないというのは、
例えばSwingのTableModelはユーザによる編集などで、
イベントディスパッチスレッドから書き換えられるので、
セルデータを保持するオブジェクトを
デフォルト(DefaultTableModel)のVectorではなくて、
ArrayListに書き換えるとダメだ、というような意味でしょうか。
594デフォルトの名無しさん:2007/09/11(火) 17:32:59
そもそもSwing全体がスレッドセーフじゃないので、
TableModelだけスレッドセーフになってても実はあんまり意味がない。

Swingは必ずイベントディスパッチスレッドから操作するという決まりになっている
(Swingはスレッドセーフじゃないから、使う人が気をつける)
ので、イベントディスパッチスレッドから操作する分にはいくらやっても構わないし、
その限りにおいては、TableModelがスレッドセーフでもそうじゃなくても問題にならない。
595デフォルトの名無しさん:2007/09/11(火) 17:47:46
Vectorがスレッドセーフっていうのは、1つのVectorに対して複数のスレッドから同時にaddしたりremoveしたりしても、壊れませんよということ。
当然、複数のスレッドからaddしまくったら、オブジェクトの順番とかは入り乱れてめちゃくちゃになるが、それはVectorの知ったことじゃない。

ArrayListはスレッドセーフじゃないので、同じようなことをやると、addしたはずのオブジェクトが無いとか、
removeしたはずのオブジェクトがまだ残ってるとか、ArrayList自体がおかしなことが起きる可能性がある。
596デフォルトの名無しさん:2007/09/11(火) 18:29:52
Swingの「スレッドセーフではない」というのはイベントと描画の話で、
別スレッドでデータ操作を行う方が、イベントスレッドを占有せずに済む。
SwingUtilitiesクラスのinvokeLaterメソッドとはお友達になる必要があるけど。

そんな点から見れば、TableModelの実装にVectorが使われていても
おかしくは無い、かな。ま、Collectionsの同期ラップでも良いと思う。
597593:2007/09/11(火) 18:52:04
>>594-596
詳しい回答ありがとうございます。

では、とくに自分ではthreadクラスを使わない場合でも、ユーザーによる編集と、
イベントとは関係ないロジック(例えばmain内のロジック)からの書き換えがあって、
2つが偶然バッティングしたらArrayListだと整合性を保てないということでしょうか。
スレッドなど使った覚えがなくとも、Swing使えば少なくとも2つスレッドができるのですよね。
598デフォルトの名無しさん:2007/09/11(火) 19:16:55
mainってふつう、フレーム表示したらすぐreturnしてしまわない?

>>596
別スレッドからモデルを操作すると、そのスレッド上でモデルのリスナにイベントが飛んでいって、あちこち掻き回す気がする。
ちゃんとイベントディスパッチスレッド上でイベントを起こすスレッドセーフなモデルクラスを自分で実装するのならいいんだろうけど。
599デフォルトの名無しさん:2007/09/11(火) 19:29:48
ttp://java.com/ja/download/manual.jsp
ここからDLしたものをvistaにインストールしたのですが
javaフォルダにjavac.exeがありませんでした
どこからDLすればいいですか?
600デフォルトの名無しさん:2007/09/11(火) 19:41:30
601デフォルトの名無しさん:2007/09/11(火) 19:48:23
602デフォルトの名無しさん:2007/09/11(火) 20:07:09
>>601
ありがとう
603デフォルトの名無しさん:2007/09/11(火) 20:19:51
>>598
ふつうは知らん。
やる事がないならば終わるだけ
604593:2007/09/11(火) 21:53:38
メインはやる事ないと、終わってしまうので、無視できるということですか。
さらにディスパッチスレッドは1つだから、いくらテーブルモデルを書き換えるイベントが
ほぼ同時に多数発生しても、まだスレッドセーフは保たれるわけですね。

皆さんありがとうございました。
605デフォルトの名無しさん:2007/09/11(火) 22:11:11
無視できるっていうか、GUIが表示されてしまえば後はイベントドリブンでプログラムは実行するわけだろ。
GUIが表示された後もメインスレッドが仕事をしなければならない方がどっちかと言えば不自然。
まあ、チャットサーバーのようなアプリケーションであればメインスレッドで通信しているとかというケースはあるけど。
606デフォルトの名無しさん:2007/09/11(火) 22:25:23
>>604
それは、ただシングルスレッドで動いてるだけであって、スレッドセーフとは言わないな。
まぁシングルスレッドに閉じ込めてるおかげで、安全は保たれている。
607デフォルトの名無しさん:2007/09/11(火) 22:34:23
いや、流れ読んでるとそもそも、シングルスレッドモデルとスレッドセーフを切り分けてない奴の方が多いぞ。
全体的に話の流れがおかしいんじゃね?
608デフォルトの名無しさん:2007/09/11(火) 22:57:38
Swingと並行処理が絡むとgdgdになるのは何時もの事。
知ったような書き方をする奴が出たりするが、数行のレスで伝えるのは難しい話題だから仕方なし
609デフォルトの名無しさん:2007/09/11(火) 23:20:54
ようは、

Swingライブラリ  : スレッド危険 混ぜるな

Swingライブラリは、スレッドセーフじゃない。
これは多くの人間が知っている。

だが、どこまでスレッドセーフじゃないのかがわかりにくい。
Swingパッケージ全て?それとも、イベントディスパッチに絡む部分だけ?
なので、TableModelをどうすればいいかという話が出てくるわけだな。

TableModelの実装に関していうと、fireなどでイベントを発生させている部分があるわけで
イベントディスパッチすれっどとは別スレッドで扱われることを想定した作り。
なので、スレッドセーフに作っておかないとおかしなコトになるはず。
イベントを処理する部分じゃなくて、イベントの発生元なんだよね。

って知ったように書いてみました。
ホントはよく知らない。
610デフォルトの名無しさん:2007/09/11(火) 23:23:26
そもそも完全スレッド対応のGUIコンポーネントなんて現実的に不可能だ
実装は可能だけど、それ作ったところでユーザがついてこれない
ってビルジョイが言ってんだっけ
611デフォルトの名無しさん:2007/09/11(火) 23:30:43
>>609
http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/package-summary.html#package_description

>通常、Swing はスレッドに対して安全ではありません。
>すべての Swing コンポーネントと関連クラスには、特に説明がないかぎり、
>イベントディスパッチスレッド上でアクセスしてください。

>この制約は、Swing コンポーネントに接続されたモデルにも適用されます。
>たとえば、TableModel が JTable に接続されている場合、TableModel の変更は
>必ずイベントディスパッチスレッド上で行うようにしてください。


あと、フレームの作成とかも main メソッドでやっちゃうことが多いけど、
本当は invokeLater を起こしてイベントディスパッチスレッド上で作成しないといけない
ってことも、ちゃんと書いてある。
612デフォルトの名無しさん:2007/09/11(火) 23:37:40
本当も何も、EDT 以外で UI コンポーネントを作る奴は
GUI の最初の一歩で踏み間違えているだろ
613デフォルトの名無しさん:2007/09/11(火) 23:45:21
>>611
そうかSwingWorker使ってもテーブルモデルの更新のタイミングは
気をつけないと駄目なのね
614デフォルトの名無しさん:2007/09/11(火) 23:48:22
フレームの作成もダメとははじめて知ったぜ
615デフォルトの名無しさん:2007/09/11(火) 23:55:42
>>612
入門書が、全然違う方向に誘導してる気がするwwww
616デフォルトの名無しさん:2007/09/12(水) 01:12:10
SUNのdocにSwingは全部EDT上でやれって書いてあるのにサンプルコードは軒並みGUIの構築がメインスレッドで行われてるからなぁ。
それどころかEDT無視したサンプルコードもたくさんあるんだけど。

JSR-296で少しはマシになるかな?
617デフォルトの名無しさん:2007/09/12(水) 03:49:54
Javaアプレットが以前は使えてたのに、いつの間にか使えなくなっていた。
『有効』になっていない可能性があるんだが、これはどうしたら有効に出来るの?
618デフォルトの名無しさん:2007/09/12(水) 04:42:26
ImageやBufferedImageから入力ストリームを生成する手順を教えて頂けませんか。
画像ファイルのパスを指定してFileInputStreamにするのはいろいろ見つかったんですが。
619デフォルトの名無しさん:2007/09/12(水) 04:58:43
620デフォルトの名無しさん:2007/09/12(水) 05:42:10
>>619
その後にByteArrayInputStreamですね。
ありがとうございます。やってみます。
621593:2007/09/12(水) 09:14:31
>>605-616
私の持っているGUIの参考書もmainでやっていたので、
何の疑問もなくmainでsetVisbleやってました。
某サイトのサンプルコード見て、「何じゃこりゃ」と思ってました。
大変参考になりました。ありがとうございます。
622デフォルトの名無しさん:2007/09/12(水) 11:18:19
すいません、HashMapについて教えて下さい。
public class A
{
  int i;
  String s;

  public A(int i, String s)
  {
    this.i = i;
    this.s = s;
  }
}

こういうクラスがあったとして

A a = new A(1, "a");
HashMap hm = new HashMap();
hm.put(a, "a");

A b = new A(1, "a");
String s = (String)hm.get(b);

上記処理をするとsがnullになります。(aとbは値が同じなのに別物とされてgetできない)
別インスタンスだからあたりまえとも思いますが、Integerをキーにした場合は中の値を見てくれるのに…とも思います。
実際の値を比較してくれるうまい方法はないでしょうか?
623デフォルトの名無しさん:2007/09/12(水) 11:24:37
>>622
Object#equals(Object) と Object#hashCode() をオーバーライドしないとダメ。

http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Map.html#get(java.lang.Object)
> つまり、このメソッドは、(key==null ? k==null : key.equals(k)) となる
> キー k から値 v へのマッピングがこのマップに含まれている場合は v を返し、
> それ以外の場合は null を返します。このようなマッピングが 1 つだけあります。

http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Object.html#equals(java.lang.Object)
> 通常、このメソッドをオーバーライドする場合は、hashCode メソッドを常にオーバーライドして、
> 「等価なオブジェクトは等価なハッシュコードを保持する必要がある」という
> hashCode メソッドの汎用規約に従う必要があることに留意してください。
624デフォルトの名無しさん:2007/09/12(水) 11:25:41
>>622
hashCode()……
625デフォルトの名無しさん:2007/09/12(水) 11:38:30
>>623-624
ハッシュに対する基礎的なことが分かってなかったようでお恥ずかしい。
ありがとうございました。
626デフォルトの名無しさん:2007/09/12(水) 13:23:15
アホなこと聞くんですが、もし
public static void main(String[] args)throws IOException {
Hoge hg = new Hoge();
hg.perform();
}
-------別のクラス
public void perform()throws IOException{

}
例外をキャッチしないでスルーするとそのメソッドを呼んだそれに例外が押しつけられますよね。
もし上記みたいに終点もスルーしてる場合、特に問題は起きませんが、IOExceptionは
どこに行くんですか?
627デフォルトの名無しさん:2007/09/12(水) 13:28:14
ってかコンパイルエラーにならんの?
628デフォルトの名無しさん:2007/09/12(水) 13:32:18
俺のeclipseではならなかった気がします。
例えばサーブレットのdoGet(---)でも同じ事が言えますよね?
629デフォルトの名無しさん:2007/09/12(水) 13:34:57
自分の経験からですが、コンソールに例外の種類吐いて終わりでしたね。
失礼しました。
630デフォルトの名無しさん:2007/09/12(水) 13:41:25
java3Dをインストールして
ttp://www.javadrive.jp/java3d/base/index1.htmlの
サンプルを実行したのですがエラー続出で困ってます


エラーの種類
パッケージcom.sun.j3d.utils.universeは存在しません。
パッケージjavax.media.j3dは存在しません。
パッケージjavax.vecmath1は存在しません。
シンボルを解決できません。

作業フォルダはjavaで
Pathはc;\java3d-1_5_1\bin
javaのバージョンは1.4.1です。
java3Dのバージョンは1.5.1です。

設定の間違いでしょうか?
631デフォルトの名無しさん:2007/09/12(水) 14:21:53
JListで、パスワードを忘れたときの設定として、

あなたの母親の旧姓は?
最初のクラスの担任の名前は?
好きなスポーツ選手の名前は?


といった選択肢を用意しているのですが、デフォルトで「あなたの母親の旧姓は?」
を選んでいる状態にしたいです。どうすればJListで最初から何かしらを選択している状態にできるのでしょうか?
632デフォルトの名無しさん:2007/09/12(水) 14:37:50
>>631
「選択」はjavadoc に載ってるぞよ。

public void setSelectedIndex(int index)
単一セルを選択します。
633デフォルトの名無しさん:2007/09/12(水) 14:58:50
何方か継承の考え方教えてください
634デフォルトの名無しさん:2007/09/12(水) 15:48:30
>>632
気がつきませんでした。ありがとうございます。
635デフォルトの名無しさん:2007/09/12(水) 16:15:04
パッケージクラスであってもSystem.out.println("hoge");とかやるときはインポートいらないみたいだけど
インポートの有無はどう判断すればいいんでしょうか?
636デフォルトの名無しさん:2007/09/12(水) 16:21:09
>>635
java.lang パッケージだけは特別に宣言の必要が無い。以上。
637デフォルトの名無しさん:2007/09/12(水) 16:22:14
java.langは基本的なものが入っているのでimportしなくてもかってにインポートしてくれる
Systemの正式名はjava.lang.System
638635:2007/09/12(水) 16:24:36
そうだったのか・・素早い回答ありがとう。
639デフォルトの名無しさん:2007/09/12(水) 19:47:41
なんというスルー!かわいそす(´・ω・`)
>630 eclipse使ってるならjarがビルドパスに追加されてないんじゃない?
使ってないなら環境変数に。java3D素人だからかんだけど・・・
とにかくググれば直ぐ答え見つかるよ。キーワードは自分で。
640デフォルトの名無しさん:2007/09/12(水) 21:31:16
>>630
Java3Dは、インストール先のJDKが1つだけだったような気がするんで
もしかして、実行時のJDKと別になってないか?
641デフォルトの名無しさん:2007/09/12(水) 21:41:42
自己解決できない段階なら3Dなんてどうせ扱えないだろ
Swingで少しならした方がいいんじゃないか?
642デフォルトの名無しさん:2007/09/12(水) 22:49:38
SwingよりもGraphics2Dかと・・・。
643デフォルトの名無しさん:2007/09/12(水) 22:55:27
JavaサーブレットとJSPの違いってわかる人いますか?
644デフォルトの名無しさん:2007/09/12(水) 23:14:41
居ます
645デフォルトの名無しさん:2007/09/12(水) 23:25:06
>>644さん
お願いします。
646デフォルトの名無しさん:2007/09/12(水) 23:26:21
>>643
違いすぎて何を言えばいいのやら・・・。
サーブレット:サーバーで実行
JSP:クライアントで実行

っていうか全然似てないから間違えないと思うけど・・・。
647デフォルトの名無しさん:2007/09/12(水) 23:29:48
>>646
JSPはクライアントで実行されるわけじゃない
クライアントはブラウザさえあれば、そのWebアプリが使えるってのがいい証拠
最終的にJavaのソースに変換されてコンパイルがかかる
648デフォルトの名無しさん:2007/09/12(水) 23:34:48
>>646
お前が間違えてるぞ
649デフォルトの名無しさん:2007/09/12(水) 23:34:53
>>647さん
サーブレットとの違いって何ですか?
650デフォルトの名無しさん:2007/09/12(水) 23:36:12
>>646-647
連釣りktkr
651デフォルトの名無しさん:2007/09/12(水) 23:39:41
HTMLの中にJAVAを書く→JSP
JAVAの中にHTMLを書く→サーブレット
初回起動時にコンパイル→JSP→二回目から速い
事前コンパイル→サーブレット→初めから速い
652デフォルトの名無しさん:2007/09/12(水) 23:41:24
>>633
簡単に言い過ぎると。
指定したクラスの機能を持ったクラスを作れる。
指定クラスの中にあるメソッドを上書きできる。

指定クラスを拡張したり一部だけ変更したりするのに使ったりする。
653デフォルトの名無しさん:2007/09/12(水) 23:41:24
ぜんぜんちげーよw
わかってないのにレスすんなよな
654デフォルトの名無しさん:2007/09/12(水) 23:42:05
あ、ごめん>>653>>651
655デフォルトの名無しさん:2007/09/12(水) 23:43:59
誰もわかる人居ないんですか?
656デフォルトの名無しさん:2007/09/12(水) 23:46:44
JSPはコンパイルするとサーブレットになりますので、同じようなものです
657匿名:2007/09/12(水) 23:48:50
TOK2のホムペ上にある、バナーレスを停止したいんですけど、どうしたらいいですか?
サイト内で聞いてみたのですが、応答なしでした。
658デフォルトの名無しさん:2007/09/12(水) 23:53:01
>>651
サーブレットの中にHTMLの生成処理なんて書かなくていいだろw
MVCパターンぐらい勉強しとけよw
659デフォルトの名無しさん:2007/09/12(水) 23:54:51
また質問なんですけど、TomcatはJavaサーブレット、JSPを処理できるアプリケーションサーバというのは調べたりしてわかったんですけど、
具体的にTomcatで何ができるのですか?
660デフォルトの名無しさん:2007/09/12(水) 23:56:06
Javaサーブレット、JSPを処理できる
661デフォルトの名無しさん:2007/09/12(水) 23:56:30
>>659
HTTPリクエストに応答できます
662デフォルトの名無しさん:2007/09/12(水) 23:56:58
もうJSP=HTMLっぽい書き方ができるservletでいいじゃん

でもこう言っちゃうと暗黙オブジェクトやViewとしての役割とかすっとばしちゃうからだめなんだよな

とりあえず servlet jsp MVC あたりでググって自分でもっと調べたほうがいいんじゃね?
663デフォルトの名無しさん:2007/09/13(木) 00:00:00
>>659
Tomcatはservletコンテナですぅ><
664デフォルトの名無しさん:2007/09/13(木) 00:07:24
javaで正規表現の記述方法を教えてください。
下の10個の文字が1個でもあればはじきたいのですが、
正規表現が苦手なのと、エスケープの仕方がわからないのです。

; \ / : * ? " < > |

下のように記述して、矢印の先の結果になるようにしたいのですが・・・

String hoge;

hoge = "ab?cdefg";
System.out.println(hoge.matches("[; \ / : * ? " < > | ]")); → 結果:true

hoge = "abc:de;fg";
System.out.println(hoge.matches("[; \ / : * ? " < > | ]")); → 結果:true

hoge = "abcdefg";
System.out.println(hoge.matches("[; \ / : * ? " < > | ]")); → 結果:false

おねがいします。
665デフォルトの名無しさん:2007/09/13(木) 00:10:15
; \ / : * ? " < > |  のいずれかの文字が含まれていたらtrueにするって言ってる?
なら、正規表現の指定自体、全然ちがう
666デフォルトの名無しさん:2007/09/13(木) 00:18:39
IDEはどの段階で取り入れたほうがいいんですか?
始めの入門レベルから使ったほうがいいのか、ある程度Javaがわかってから使ったほうがいいのか。
667デフォルトの名無しさん:2007/09/13(木) 00:20:59
どっちでも
668デフォルトの名無しさん:2007/09/13(木) 00:27:19
グラフィックイメージをコピーしたいのですが
コピー元 コピー先 幅 を指定したいのです

C#ではこれで全部指定できるのですが
srcRect.X = x0; srcRect.Y = y0;
srcRect.Width = xx; srcRect.Height = yy;
gr.DrawImage(_bmp1, x1, y1, srcRect, units);

JAVAのこれではコピー元の座標が指定できないようです
gr.drawImage(img,x1,y1,xx,yy,this);

ヒントでいいので使う命令か解説のあるページを教えて下さい
669デフォルトの名無しさん:2007/09/13(木) 00:37:12
>665
レスありがとうございます。

正規表現の指定自体が違うとはどういうことでしょう?
matchesで[]の中の任意の1文字が入っていれば
識別できると思っていたのですが・・・

どう指定すればよいのでしょうか?
670デフォルトの名無しさん:2007/09/13(木) 00:39:52
>>666
来年から仕事するってんならIDEからでもいいと思う。慣れろ。
勉強をしている段階の学生ならば最初はコンパイラとかに触れた方がいい
671デフォルトの名無しさん:2007/09/13(木) 00:40:38
"[;\\/:*?\"<>|]"
672デフォルトの名無しさん:2007/09/13(木) 01:17:44
>>671

それでできなくて困っているのです。
どう書けばよいものか?????

String hoge;

hoge = "abcd?efg";
System.out.println(hoge.matches("[;\\/:*?\"<>|]"));
673デフォルトの名無しさん:2007/09/13(木) 01:19:16
できないってのはどうなるって事?
674デフォルトの名無しさん:2007/09/13(木) 01:36:20
>>673
結果がfalseになるんです。
trueになってほしいのです。

以下のようにStringの中に; \ / : * ? " < > | の
1文字でも入っていたらtrueとなる正規表現です。

(以下のような結果になるのがほしいのです)
hoge = "ab?cdefg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true

hoge = "abc:de;fg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true

hoge = "abcdefg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:false

hoge = "abc\\<>defg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true

hoge = "abcd345ほげ「^¥efg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:false

hoge = "abc\\<>defg";
System.out.println(hoge.matches(正しい正規表現)); → 結果:true
675デフォルトの名無しさん:2007/09/13(木) 01:39:16
>>672
Javaで正規表現を書く時は
”” の エスケープ表現と
正規表現としての エスケープ表現を2重に掛ける必要があるから注意。

たとえば、
ドット1つをマッチさせるための表現は
String dot_match = "\\.";
676デフォルトの名無しさん:2007/09/13(木) 01:40:13
>>674
なので、\は、"\\\\"でマッチさせる必要がある
677デフォルトの名無しさん:2007/09/13(木) 01:43:05
既存クラス A があります。(制約により A は変更不可です。)

class A {
void a() { ... sub(); ... }
void b() { ... sub(); ... }
sub() { ... }
}

このクラスを拡張して、a() メソッドが呼ばれた場合だけ sub() の内容をオーバーライドしたいのですが
どのようにするのがもっとも一般的なのでしょうか?
678デフォルトの名無しさん:2007/09/13(木) 01:53:00
class B extends A {
    void sub() {
        if (a から呼ばれた)
            // ほげ処理
        else
            super.sub();
    }
}
679デフォルトの名無しさん:2007/09/13(木) 02:02:03
回答ありがとうございます。
a から呼ばれたかどうかを判断する方法はどうすればよいでしょう?
メンバー変数でフラグをもって、a() 開始時に設定しようかと思ったのですが
クリア漏れとかありそうなので
680デフォルトの名無しさん:2007/09/13(木) 02:04:01
>>674
正規表現がどうこうじゃないと思うよ。

System.out.println("abc".matches("a")); // false
System.out.println("abc".matches("abc")); // true

matches() は与えた正規表現が対象文字列の
「全部」にマッチするかしないかをチェックする。
java.util.regex あたりに使えそうなメソッドがないか調べてみては。
681デフォルトの名無しさん:2007/09/13(木) 02:08:41
>>680
.*表現.*で終わりじゃない?
682680:2007/09/13(木) 02:20:56
>>681
全然思いつかなかったw サンクス。
683デフォルトの名無しさん:2007/09/13(木) 02:36:40
>>677
目的は何?
オーバーライドで実装することが目的なの?
a メソッドが呼ばれたときだけ別処理をすること?
684デフォルトの名無しさん:2007/09/13(木) 07:32:33
>>677
>a() メソッドが呼ばれた場合だけ sub() の内容をオーバーライドしたい
無理

というか、サブクラスでのa()の振る舞いが変わるんだから、a()をオーバーライドするのが筋
a()が巨大なメソッドとかでコピペが発生して困るとしたら、Aの実装者を恨め。
685デフォルトの名無しさん:2007/09/13(木) 08:14:21
Javaの勉強を始めたばかりです。
Cで定数を#defineする様な事は、Javaでは不可?
どこかのクラスでfinalな変数を用意すればいいのかもしれないけど、
変数としてメモリ上に置かれるのが、なんか気持ち悪い。
もっとお手軽に、ただ単にマジックナンバに名前を付けたいだけなのに。
686デフォルトの名無しさん:2007/09/13(木) 08:30:48
こうじゃね?
String regex = "[;\\\\/:\\*?\\"<>|]
hoge = "ab?cdefg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());

hoge = "abc:de;fg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());

hoge = "abcdefg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());

hoge = "abc\\<>defg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());

hoge = "abcd345ほげ「^\\efg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());

hoge = "abc\\<>defg";
p = Pattern.compile(regex);
m = p.matcher(s);
System.out.println(m.find());
687686:2007/09/13(木) 08:31:46
あ、sはhogeの間違い
688686:2007/09/13(木) 08:33:24
うぉ、String regex = "[;\\\\/:\\*?\\\"<>\]"
689686:2007/09/13(木) 08:34:38
String regex = "[;\\\\/:\\*?\\\"<>|]"
むぅ
690686:2007/09/13(木) 08:40:40
"|"もエスケープしないと駄目な気がする。"\\|"かな?
691デフォルトの名無しさん:2007/09/13(木) 09:33:24
>>685
そのマジックナンバをクラスファイルにばらまかないことで
デバッグをしやすくしている設計だと思ってくれ。
どうしてもしたければ、純正ではないがいくつかプリプロセッサがあるので
それを使えばいいと思う。
692デフォルトの名無しさん:2007/09/13(木) 09:40:04
Javaでデータベースを使おうと思うのですが、種類が多くどれを使おうか迷っています。

使い方としては、ソフトウェアで大量のデータを素早く選別してアクセスするために使いたいのです。
求めるものとしてはPC間の可搬性があり、ある程度の速度があるリレーショナル・データベースが望ましいです。
また、複数のスレッドから同時にアクセスするような場合はないです。

まだまだ若輩者ですが、助言よろしくお願いします。
693デフォルトの名無しさん:2007/09/13(木) 09:52:25
>>692
その条件だけなら、MySQLをISAMで使うのが良いかな。
でも、スレ違いだと思う。
694デフォルトの名無しさん:2007/09/13(木) 09:54:02
>>692
Java実装のDB?
H2はいかが?

というか迷っているなら全部試すのが一番早い。
自分の思う機能が揃っているか確かめておけ。
695デフォルトの名無しさん:2007/09/13(木) 10:02:17
>>692
それだけの条件なら、大抵のDBMSは満たすよ。
もうちょっと条件を出して。例えばこんな。
・用途は?商用システム?オープンソース?ホビーユース?
・有料でもいい?無料がいい?
・想定するデータ量は何バイト程度か?
・OSは?Windows? Linux? 何でも?

分からなかったら、PostgreSQLかOracle XEあたりでいいんじゃない?
データ量が少なく軽量でいいのなら、HSQLDBもあり。

DB板行った方がいいような気もするけど。
696デフォルトの名無しさん:2007/09/13(木) 10:13:50
>>685
プリミティブ型の場合、定数はメモリに置かれず展開されてコンパイルされることもある。
インスタンスの場合はメモリに置かれるのはしょうがない。
プリミティブ型なら気にせず static final していいんじゃね?
だいたいメモリに置かれようが展開されようが、どっちでもいいだろ。そんなに
速度に対してクリティカルなシステムつくるわけじゃねえんだし。
697デフォルトの名無しさん:2007/09/13(木) 10:33:15
>>685
public final な定数を定義して、new して利用してるとしたら止めたほうが良し。

Java にはマクロはないから、プリミティブ型なら
とある interface に public static final な定数を定義するぐらいか。
static final なら、コンパイル時にその使用箇所に値が展開される。

オブジェクト型なら、Flyweight パターンを使うのかな…
698692:2007/09/13(木) 10:50:16
朝の質問にもかかわらず、即レスありがとうございます。非常に助かりました。

>>693
すいません、Javaで使うためここで質問してしまいました。
ISAMについてはほとんど知らないので少し勉強してきます。

>694
HSQLDBは知っていたのですが、H2は知りませんでした。
いまから試してみようと思います。

>695
すいません、すれ違いでした。誘導ありがとうございます。
HSQLDBは今一番使おうと思っています。

とりあえずDB板をみながら、H2, HSQLDBなどを試してみようと思います。
アドバイスありがとうございました。
699デフォルトの名無しさん:2007/09/13(木) 10:54:04
>>668
幅、高さの指定じゃないんだが、java.awt.Graphics の
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)
ってメソッドを使ってみろ。
700デフォルトの名無しさん:2007/09/13(木) 11:38:05
>>686
検証してから書き込めば問題なかろうに
private static final String REGEX = "[;\\\\/:*?\"<>|]";
private static final String[] TEXTs = {"abcdefg", // false 以下 true
"abcde;fg", "abc\\defg", "abc/defg", "abc:defg", "abcde*fg",
"ab?cdefg", "abcd\"efg", "abc<defg", "abc>defg", "abcde|fg",;

public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
for (String text : TEXTs) {
Matcher m = p.matcher(text);
System.out.printf("\"%s\": %b%n", text, m.find()); }}
701デフォルトの名無しさん:2007/09/13(木) 11:54:35
Windows+JDK6環境で、
存在するテキストファイル "C:\tmp.txt"
をWindows上のエディタで編集作業中に、
Java側で

 File f = new File("C:\\tmp.txt");
 boolean rtn = f.canWrite()

とすると、結果のrtnは常にtrueになります。
File#calWrite()メソッドが判定できる書き込み可否条件は、
同じJVM内とかで、ホストOS?側で対象ファイルが
どう扱われているかについては関知しないんでしょうか?
702デフォルトの名無しさん:2007/09/13(木) 11:57:54
>>701
そのWindows上のエディタってやつ、本当にテキストファイルをロックしてる?
排他制御してないなら、それはtrueであってるだろうよ。
703デフォルトの名無しさん:2007/09/13(木) 12:07:11
>>702
ありがとうございます。
まさにそれだったようです。orz

言われて、数種類のテキストエディタで編集状態にして
確認したところ、どれもこれも排他制御はしていない模様。。。
ブラウザのIEで開いた状態でcanWrite()を試したら、
ようやく例外を投げてくれました。。。
704703:2007/09/13(木) 12:15:47
すみません、全然違いました。。。
自らの手で、C:\tmp.txtの読み取り専用属性をONにしてたじゃないか。。。
バカバカ。俺のバカ。。。orz

Win側から何やってもcanWriteはtrueのまま。。。
開いたファイルを排他制御してくれるアプリを探すのが先ですね。。。
705デフォルトの名無しさん:2007/09/13(木) 12:24:53
一応、俺の使ってる TeraPad だとオプションから排他制御の有無を指定できるが
706デフォルトの名無しさん:2007/09/13(木) 12:46:18
TeraPadですね。ありがとうございます。
さっそくダウンロードして試してみます。
707デフォルトの名無しさん:2007/09/13(木) 13:12:48
>>705
TeraPadを使って、確認取れました。
重ね重ねありがとうございます。
708デフォルトの名無しさん:2007/09/13(木) 13:53:21
JavaでカラーのBMPをモノクロのBMPに変換することはできますか?
709デフォルトの名無しさん:2007/09/13(木) 14:00:53
できます
710デフォルトの名無しさん:2007/09/13(木) 14:00:56
>>708
そういうプログラムをつくりゃあ、どんな言語でもできるだろうよ。
手軽にしたけりゃツール使うか、imagemagickでも使えば?
711707:2007/09/13(木) 14:25:23
あれっ、なんかまたFile#canWriteで
TeraPadで排他かけて開いたのに、
結果がtrueになってる。。。

わけわからなくなってきますた。。。
徹夜3日目は、さすがにアタマがまわらない。。。orz
712デフォルトの名無しさん:2007/09/13(木) 14:33:30
>>711
書き込めなかったらそのとき考える

ぶっちゃけ例外使え
713デフォルトの名無しさん:2007/09/13(木) 14:40:33
canWrite はパーミッションを調べるだけだと思ふ。

だいたい、canWrite で書き込み可能を確認した次の瞬間に
他のプロセスによって書き込み不可にされる場合もありうるわけだし、
実際に書き込んでみて失敗を捕まえる方がいいと思うよ?
714デフォルトの名無しさん:2007/09/13(木) 14:44:02
713が正しいみたい。ようはcanWriteはリードオンリーかどうかを調べるだけのメソッド。
参考になるかわからんが、この辺呼んでみたら?

@IT:Java TIPS -- テキストファイルへの同時書き込みを防ぐ
http://www.atmarkit.co.jp/fjava/javatips/024jspservlet015.html
715デフォルトの名無しさん:2007/09/13(木) 15:37:21
携帯アプリを作ってて
その上でのjava質問なんですが、
ここでいいですか?
716デフォルトの名無しさん:2007/09/13(木) 15:45:33
よくないんですか?
717デフォルトの名無しさん:2007/09/13(木) 15:51:28
携帯アプリ固有の質問ならこっちの方が早いかも。

iモード携帯電話用Java(iアプリ) Part15
http://pc11.2ch.net/test/read.cgi/tech/1187677946/

まあここでもすれ違いじゃないと思うけどね。
718デフォルトの名無しさん:2007/09/13(木) 15:56:12
質問の内容によるかもしれないんで、
質問投げてみます。もし違う板・スレで聞いたほうがよければ誘導お願いします。

Windows JDK6 J2SE1.6 の環境で
eclipse3.2 使ってS!アプリ(MIDP1.1)を作ってます。

import java.util.Calendar;でカレンダークラス?を読みこんで
カレンダーを作っているんですが、
firstMonth = Calendar.getInstance();
firstMonth.setTime(dateToDisplay.getTime());
firstMonth.set(Calendar.DAY_OF_MONTH, 1);

こんな感じで月の最初の日にちを取得することはできるのですが、
月の最後の日にちを取得するのにgetActualMaximum()を使おうとすると
エラー(定義されていません?)がでます。
roll()やadd()でやろうとしたのですが、それも同じようにエラーがでてしまいます。

こういった原因はどこを探せばいいのでしょうか?
719デフォルトの名無しさん:2007/09/13(木) 16:13:52
>>718
吐かれたエラーを元に
Javaのソース見たり
googleで検索したり
720デフォルトの名無しさん:2007/09/13(木) 16:17:15
JSP     : MSX BASIC インタプリタ
サーブレット: MSXべーしっ君
721デフォルトの名無しさん:2007/09/13(木) 16:19:09
>>718
MIDP の Javadoc を見れ
残念ながら MIDP の Calendar にはそういったメソッドがない
http://java.sun.com/javame/reference/apis/jsr037/java/util/Calendar.html
722デフォルトの名無しさん:2007/09/13(木) 16:23:22
723デフォルトの名無しさん:2007/09/13(木) 17:43:21
>>721
ありがとうございます。
そっちを見なきゃいけなかったんですね・・
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Calendar.html
こっち見てましたorz

>>722
基本関数が使えないとこんなベタなやり方でやるんですね・・
そのスレの>>122みたいなやり方はいまいち僕には理解しにくいんで、
public static int getDayID(int Y,int M) {
int I[][]=new int[][]{{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};
int S = (Y % 4 == 0 && (Y % 100 != 0 || Y % 400 == 0)) ? 0 : 1;
return I[S][M];
}
こんな感じにしましたらできました。
皆さんありがとうございます。
724デフォルトの名無しさん:2007/09/13(木) 19:06:52
>>723
カレンダのインスタンスに対して
set(Calendar.DATE, 0)
すれば前月の末日とれるんじゃね?
725デフォルトの名無しさん:2007/09/13(木) 20:53:33
>686

ありがとうございます。
890でできました。

\に対してエスケープするのに\\\\となるとは
まったく予想していなかったのと|に\\でエスケープ
できることも知りませんでした・・・
726デフォルトの名無しさん:2007/09/13(木) 21:35:01
質問なのですが、
ApacheはHTTPサーバの中で一番有名なサーバである。
情報の送信を行うコンピュータのことである。
HTML文書や画像等の情報が蓄積されており、ブラウザからの要求に応じて、情報を送信するものである。

であっているでしょうか?
727デフォルトの名無しさん:2007/09/13(木) 21:44:13
>>726
情報の送信 情報の送受信
ブラウザからの要求 クライアントからの要求

・・・でその質問はJavaなのか?
728デフォルトの名無しさん:2007/09/13(木) 21:50:00
Apacheはコンピュータじゃないな、コンピュータソフトウェアだよ。

・・・でJavaなのか?
729デフォルトの名無しさん:2007/09/13(木) 22:00:48
まだょぅι゙ょなんだから大目に見てやれ
730デフォルトの名無しさん:2007/09/13(木) 22:07:42
前の質問は解消したんですが
グラフィックで点を打つ命令がありません
ラインで同じドットを結んでもダメでした
点を打つ方法はありますか?
731デフォルトの名無しさん:2007/09/13(木) 22:08:01
>ApacheはHTTPサーバの中で一番有名なサーバである。
今の連中がapache httpd以外知らないだけだから間違ってるような。
有名どころといえば3つあるだろ。

・・・で、java関係ないよな?
732デフォルトの名無しさん:2007/09/13(木) 22:10:52
まあ、一般人も含めて一番有名なHTTPサーバーならApacheじゃね?

・・・で、Javaはどこ?
733デフォルトの名無しさん:2007/09/13(木) 22:23:23
>>730
君の言う点ってのは小さな円の事?
だとしたら小さな円を描けば良いんじゃね?
734デフォルトの名無しさん:2007/09/13(木) 22:43:47
小さな円で一応点らしきものをかけました
1ピクセルにおさまっているかわかりませんが
1命令で点打つ命令ないんですかね?JAVAは
735デフォルトの名無しさん:2007/09/13(木) 22:53:11
点ってどんな意味なんだ
まさか、ディスクトップ上の1ドットの事とか言わないよな?
736デフォルトの名無しさん:2007/09/13(木) 23:01:19
そうです
737デフォルトの名無しさん:2007/09/13(木) 23:20:23
fillRectで1*1の四角を描いてはどうだろうか。
738デフォルトの名無しさん:2007/09/13(木) 23:20:32
そりゃ無理だわwwwww
739デフォルトの名無しさん:2007/09/13(木) 23:21:44
>>737
それ、半径1の円を打つのと変わらんよ。

>>736
Java2Dの2Dの意味解るか?
740デフォルトの名無しさん:2007/09/13(木) 23:25:50
2次元
741デフォルトの名無しさん:2007/09/13(木) 23:28:24
ならば点(Point)と描画の意味を考えてみろ。
点を描画するという事が本来は矛盾する行為という事だ
742デフォルトの名無しさん:2007/09/13(木) 23:30:45
BufferedImage.getRGB()
BufferedImage.setRGB()
じゃ駄目なのん?
743デフォルトの名無しさん:2007/09/13(木) 23:31:14
>>741
ん?そういうイデア論的な立場に立てば、本来線も描画できないんだが。
744デフォルトの名無しさん:2007/09/13(木) 23:34:05
そういやJava2Dにput系メソッドなかったな。
まあ高レベルAPIだから当然だが。
だいたい1ドット打つネイティブコードの差異吸収って思ってるよりめんどくさいぞ。
745デフォルトの名無しさん:2007/09/13(木) 23:34:21
>>743
だから「R1の円を描くことがドットを打つ事と同じ」でいいだろって意味と推測
746デフォルトの名無しさん:2007/09/13(木) 23:36:01
そもそもJavaの座標系ってディスプレイの座標系とは違うわけだしなぁ
普通に使うと概ね一致するだけで・・・
747デフォルトの名無しさん:2007/09/13(木) 23:42:03
BufferedImage.setRGBもよさそうですが 検索してみると
グラフィックを配列に置き換えてそこに書き込む方法もあるみたい
748デフォルトの名無しさん:2007/09/13(木) 23:46:18
どちらにせよ画像の1ピクセルを塗りつぶす事しかできないというこったな
拡大とか色々な要素も絡むわけで、1ドットと考えるよりも頭をやわらかくして考えるべきだろう
749デフォルトの名無しさん:2007/09/13(木) 23:54:55
1ドットと1ピクセルの違いが分かってないというオチだったりして
タイル(ピクセルデータの配列)に色突っ込むのは1ドットじゃなくて1ピクセルだぞ。
750デフォルトの名無しさん:2007/09/13(木) 23:57:53
BufferedImage.setRGBか配列でやってみます
どうもありがとう
751デフォルトの名無しさん:2007/09/14(金) 00:00:31
ドットに拘っている時点で大きな勘違いしているに違いない
752デフォルトの名無しさん:2007/09/14(金) 03:13:45
なぜジャバにはポインタが無いのでしょうか?
また有った場合、何が出来ると思われますか。
753デフォルトの名無しさん:2007/09/14(金) 03:34:28
という宿題が出たんだなw
情報処理か?
754752:2007/09/14(金) 04:15:51
いえ宿題ではありません。
たんなる妄想です。

String str = "Hello, World!";
Pointer<String> pstr = Pointer<String>.salvage(str);

みたいな…
ネイティブ弄ったら出来るのかしら?
755デフォルトの名無しさん:2007/09/14(金) 05:21:44
ポインタ使いたけりゃC#でもやれば
Cとかでもいいよ
756デフォルトの名無しさん:2007/09/14(金) 06:47:58
Dの方が良いんじゃね。未だ実装に難ありだが。
757デフォルトの名無しさん:2007/09/14(金) 09:49:54
ポインタっていうか、イテレータはあるだろ。
C系のポインタっていうのは、ようするにイテレータの機能を使ってるわけで、
それ以外の用途は間違いであり危険と思う。
そもそもメモリアドレスを自由に変えれるってアセンブリかよ、やつらは危険すぎる。
758デフォルトの名無しさん:2007/09/14(金) 10:11:56
javaはプリイティブ以外はポインタだらけでしょ。見えないだけで
>>754
弱レファレンスぽいと思ってしまった
759デフォルトの名無しさん:2007/09/14(金) 11:20:07
>>754
その、 Pointer<String> を使って、何をしたいつもり?
760デフォルトの名無しさん:2007/09/14(金) 11:29:46
ポインタって入れ物とその中身を同時に操作できる謎の機能って印象だな
761デフォルトの名無しさん:2007/09/14(金) 12:36:32
>>752
>なぜジャバにはポインタが無いのでしょうか?
ゴスリンのおっさんが入れなかったから。

>また有った場合、何が出来ると思われますか。
JavaVM をクラッシュさせられる。
普通にやってもクラッシュできるけど、より簡単にってことで。
あとバッファオーバーフローの脆弱性が簡単に追加できる。
762デフォルトの名無しさん:2007/09/14(金) 13:20:50
Pointerってクラスならあるよ、たしか
763デフォルトの名無しさん:2007/09/14(金) 13:28:45
直にメモリアドレス指すことがポインタの本質じゃない罠
オブジェクトを間接参照したいだけなら↓でいいじゃん

class Pointer {
Object o;
public void set(Object o) {this.o = o;}
public Object get() {return o;}
}

ポインタの演算の方の機能が欲しいならnioにそれっぽいのあるし
764デフォルトの名無しさん:2007/09/14(金) 15:07:45
youtube data apiを使って、videoidから動画情報を取得するJSPを作りたいのですが
gdata-client-1.0.jarとgdata-youtube-1.0.jarは必要なのでしょうか?

ATOM、RSS、もしくはJSON形式でデータを入手してそれをJavaで扱うだけで特に何も必要ないと思っていたのですが
http://code.google.com/apis/youtube/developers_guide_java.html#GettingStarted
公式HPに必要であると書いてあったので質問させて頂きます
765デフォルトの名無しさん:2007/09/14(金) 21:24:31
JTextPane内でタブを入力したときのタブの幅を変えたいのですが
そのようなことはできるでしょうか?
766デフォルトの名無しさん:2007/09/14(金) 21:33:13
>>765
答え: できます。
767765:2007/09/14(金) 21:52:13
>>766
教えてもらえないでしょうか?
768デフォルトの名無しさん:2007/09/14(金) 21:57:50
// タブの設定
FontMetrics fm = getFontMetrics(getFont());
int charWidth = fm.charWidth('m');
int tabLength = charWidth * 8;
TabStop[] tabs = new TabStop[2];
for (int j = 0; j < tabs.length; j++) {
tabs[j] = new TabStop((j + 1) * tabLength);
}
TabSet tabSet = new TabSet(tabs);
SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setTabSet(attrs, tabSet);
int l = getDocument().getLength();
getStyledDocument().setParagraphAttributes(0, l, attrs, false);
769765:2007/09/14(金) 22:09:16
ありがとうございます!
770デフォルトの名無しさん:2007/09/14(金) 22:29:22
質問力って大事だよね
人間って処理ステップが多くなるほど嫌気がさす生き物だからさ
771752:2007/09/14(金) 22:43:11
>>755-763
レスありがd
なんか作ってみるよ

>>770
あと日本語力か…
どっちもないや…orz
772デフォルトの名無しさん:2007/09/14(金) 23:19:07
すいません、JUnitで質問させてください

あるクラスをjunitでテストしようとしたんですが、
nullpointerエラーが出てしまい、原因を探していました。

テストするクラスを空クラスにし、junitテストクラス内に
原因らしきメソッドを記述した所、eclipseでエラーが表示されて
コンパイルが通りません・・・。

原因らしきメソッドはBeanUtilsのcopyPropertiesなんですが、
どなたかなぜエラーが出てしまうのかご存知でしたら教えて頂きたいです・・。

次レスにソースを記述します。
773デフォルトの名無しさん:2007/09/14(金) 23:21:31
以下がテスト対象としている空クラスです。
------------------------------------------------------------------
package test;

import org.apache.commons.beanutils.BeanUtils;

public class Test1 {
}
}
-------------------------------------------------------------------
以下がjunit用のテストクラスです。
------------------------------------------------------------------
package test;

import junit.framework.TestCase;
import org.apache.commons.beanutils.BeanUtils;

public class Test1_test extends TestCase {

public void testTest() {

TestBean tb1 = new TestBean();
TestBean tb2 = new TestBean();

tb1.setName("てすと");

BeanUtils.copyProperties(tb2, tb1);
}
}
774デフォルトの名無しさん:2007/09/14(金) 23:22:05
とりあえずエスパーなんだが、Commonsのライブラリは色々と依存関係があるぞ。
バージョンも確認して必要な他のライブラリが不足してないか確認汁

あと、JUnitを通さなければ発生しないの?
775デフォルトの名無しさん:2007/09/14(金) 23:23:28
以下が、エラーの原因となるcopyPropertiesのテストのテストBeanです。
------------------------------------------------------------
package test;

public class TestBean {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
--------------------------------------------------------------------

宜しくお願い致します。
776デフォルトの名無しさん:2007/09/14(金) 23:26:37
>>774
早速返信ありがとうございます!

上記のjunitテストクラス内のソース(copyProperties部分)を、
テスト対象のクラス内に記述すると、eclipseのエラー表示がなぜか消えるんです・・。
777デフォルトの名無しさん:2007/09/14(金) 23:29:44
>>776
ほかの資料を何もみないで悪いが、
BeanUtils.copyProperties の仕様じゃないの?

TestBean class の private メンバーがコピーできなくて null になってるとか…
778デフォルトの名無しさん:2007/09/14(金) 23:30:23
てか、コンパイル通ってないだけと違うか?
BeansUtilのjarにパスは通してある?
779デフォルトの名無しさん:2007/09/14(金) 23:30:46
元々は、junitでテストしようとした対象クラスのcopyPropertiesの部分で
どうしてもエクセプションが出てしまい、junit内で単純なソースで試してみようと思ったら
やはりjunitソース内にcopyPropertiesを記述すると怒られてしまいました・・・。

かれこれ3日程グーグル先生や、自力で回避方法を探ったのですが、
どうしても原因がわからずこちらで質問した次第です。
780デフォルトの名無しさん:2007/09/14(金) 23:34:02
>>777
Bean の Property をコピーするのに、その仕様はないと思われ
781デフォルトの名無しさん:2007/09/14(金) 23:34:57
>>777
ググってそう感じてはいたのですが、確信がもてませんでした・・。
やっぱりそうなのかも・・orz

>>778
eclipseでパスは通して確かに通してあります。
なのになぜ・・
782デフォルトの名無しさん:2007/09/14(金) 23:35:01
>>779
Eclipseのメッセージを書け、話はそれからだ
783デフォルトの名無しさん:2007/09/14(金) 23:36:33
いきなりたくさんの方のレスがあって正直感動してます・・
784デフォルトの名無しさん:2007/09/14(金) 23:38:43
>>782
eclipseでは、copyPropatiesの行で、
I
この行にマーカーがあります
nvocationTargetException
IllegalAccessException

と表示されています。
785デフォルトの名無しさん:2007/09/14(金) 23:41:21
>>784のエラーですが、テスト対象となるクラス(class Test1)
に記述するとなぜかエラー表示がなくなります・・。
786デフォルトの名無しさん:2007/09/14(金) 23:41:59
>>784
それ、例外の未キャッチじゃね?
マーカークリックして、とりあえずtry-catchで囲んでみろ
んで、実行してスタックとレースを張るべし
787デフォルトの名無しさん:2007/09/14(金) 23:51:30
>>786
eclipseでのエラー表示が消えました!!

eclipseでjunitを実行してみたのですが、
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:130)
at org.apache.commons.beanutils.BeanUtilsBean.<init>(BeanUtilsBean.java:110)
at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:68)
at org.apache.commons.beanutils.ContextClassLoaderLocal.get(ContextClassLoaderLocal.java:80)
at org.apache.commons.beanutils.BeanUtilsBean.getInstance(BeanUtilsBean.java:78)
at org.apache.commons.beanutils.BeanUtils.copyProperties(BeanUtils.java:114)
at test.Test1_test.testTest(Test1_test.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
788デフォルトの名無しさん:2007/09/14(金) 23:53:46
org.apache.commons.beanutils Class BeanUtils
public static void copyProperties(java.lang.Object dest, java.lang.Object orig) throws
java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException

>>787
ちょ…張る前に良く見たほうが
789デフォルトの名無しさん:2007/09/14(金) 23:54:58
>>787
ライブラリが足らない
Commons-loggingを内部で使っている
790787:2007/09/15(土) 00:06:29
連投規制に引っかかった為携帯で…

>>788,789

ありがとうございます!!
NoClassなんちゃらは、バス通しているライブラリからも見つからない事だったんですね…

皆様本当に有難うございました!
これで日、月の休出はなくなりそうです(ノ_・。)
791デフォルトの名無しさん:2007/09/15(土) 00:08:51
この程度で休日出勤かよw
792デフォルトの名無しさん:2007/09/15(土) 00:09:46
bean-utilsは、bean-utils.jar以外にもextで別jarが入ってる筈
793デフォルトの名無しさん:2007/09/15(土) 00:20:15
2,3人の30分を使って20時間前後を空けたんだとしたら、お得…なのか!?
まあなんだ、>>774のエスパー様がすばらしかった、と… なんだかな…
794デフォルトの名無しさん:2007/09/15(土) 00:22:02
学生かと思ったら社会人かよw
795デフォルトの名無しさん:2007/09/15(土) 00:36:26
こんなんで残業代請求しないでくれよ〜〜〜〜
796デフォルトの名無しさん:2007/09/15(土) 00:45:24
これに三日もかけたってことは、そもそも問題の切り分け方とか、
原因究明アプローチの方法が間違ってるんじゃないかな?
797787:2007/09/15(土) 00:52:37
みなさま、本当に単純な事を気づかずお手数をおかけして申し訳ありませんでした・・。

会社では、これがテスト環境と言われて渡された物を使用していたので、
まさかlibが足りないとは思っていませんでした・・orz
これ以前に、この原因を見つける途中に共通関数のバグを見つけたりして、
どこかソース内で他の原因があるものと・・。

初歩的なな問題で申し訳ありませんでしたが、
eclipseのエラーログ等これで少しはCからjavaの技術者に近づけたようで本当にいい経験になりました。

今後、少しでも早くこちらで質問に答えられるように精進したいと思います!
798デフォルトの名無しさん:2007/09/15(土) 00:53:51
ちなみに本日は体調不良で会社を休んだんですが、
この問題が頭から離れない為、自宅で検証してました・・・。
799デフォルトの名無しさん:2007/09/15(土) 01:46:28
伸びてると思ったらライブラリの依存関係も解決できない職グラマか・・・。
linuxでもいじって修業したら?
800デフォルトの名無しさん:2007/09/15(土) 01:51:29
>>799
修行も何も運の要素しかないだろ、それ
801デフォルトの名無しさん:2007/09/15(土) 03:00:40
なんで必須ライブラリの依存性解決が運なんだ。あほかw
802デフォルトの名無しさん:2007/09/15(土) 03:52:52
>>801
なんかの合性悪くて動かないとか、そういうのばっかじゃん
はっきり言って運だよ
803デフォルトの名無しさん:2007/09/15(土) 04:26:24
commonsは・・・運というか、バージョン依存性がありまくるからな・・・
どうかと思うわ、あのライブラリ。
使うの躊躇する。
804デフォルトの名無しさん:2007/09/15(土) 08:12:58
POMちゃんと書いておいてくれればいいんだけど、たまにいい加減な奴があるな
805デフォルトの名無しさん:2007/09/15(土) 11:23:24
今回の人はJavaの経験が少ないようだし、一式を丸投げされてはまっていたらしいから仕方ない状況だとは思うぞ。
それにJavaやってきた人ならば、1回くらいはライブラリの依存関係で半日くらいのハマリは経験してるだろ?
806デフォルトの名無しさん:2007/09/15(土) 14:25:24
>>805
String型の長文を書くときに、よく
String str = "〜"
+ "〜"
+ "〜"
);
とかするんですけど、これって全部を一つに囲った場合と比べて遅くなりますか?
807806:2007/09/15(土) 14:26:48
すいません、先頭の”>>805”は無視してください。
808デフォルトの名無しさん:2007/09/15(土) 14:28:06
>>806
リテラルor定数だけなら遅くはならないが、
そのサンプルはコンパイルエラーだな。
809デフォルトの名無しさん:2007/09/15(土) 14:50:09
>>806
コンパイル時に結合されちゃうから問題ない
中に変数が入るとダメだけどな。
とはいえ、パフォーマンスを気にするほど遅くないので気にスンナ
810806:2007/09/15(土) 14:51:37
>>808
即レスありがとうございました。
これで気兼ねなく使えます。
811806:2007/09/15(土) 14:52:56
>>809
ありがとうございます。これまでずっとStringBuilder使ってたので、ずいぶん楽になります。
812デフォルトの名無しさん:2007/09/15(土) 15:09:46
>>811
StringBuilderのが良いぞ。
Stringの連結は自動フォーマットをかけた時に崩れやすいから。
もしくは、こんな風に書く。
String str = "";
str += "1行目";
str += "2行目";
str += "3行目";
ソースの可読性の為にフォーマッターにも優しい記述で。
813デフォルトの名無しさん:2007/09/15(土) 15:43:55
>>812
Builder は非同期だからってやつですね。
可読性ってのにも賛成です。未来の自分に優しく!

で、後者なのだが…私の記憶では是は忌むべき記述法(追加毎インスタンス生成)なのだが、
ううむ…最近のコンパイラはこれも最適化してくれるのか
814デフォルトの名無しさん:2007/09/15(土) 15:49:08
>>813
変数が含まれないケースでは最適化される。
なので、定数として長い文字列を宣言する場合は有効。
しっかりと切り分け出来るPGならいいけど、よく解ってない人に書かせるってならば、Builder/Bufferで統一させた方がいいかも。
815デフォルトの名無しさん:2007/09/15(土) 16:14:51
>>813
「非同期」の意味分かっているか?
816デフォルトの名無しさん:2007/09/15(土) 16:25:45
swingのTimerについて質問です。
自分で調べ、なんとかクラス内で

ActionListener timerEvent =
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
//中身
}
};
Timer tim1 =new Timer(delay,timerEvent);
tim1.start();

のように記述してタイマーを利用できるようになったのですが、
ActionListenerの中からタイマーを止めたり、delayを変更したいとき、
どのように記述すればよいでしょうか。

中身の時点では tim1 は宣言されていないし、
timerEvent を宣言する前には tim1 は生成できないし・・と。
817デフォルトの名無しさん:2007/09/15(土) 16:36:03
>>815
解り辛い表現で申し訳ない。
利用条件は理解して使い分けているつもりです。
818デフォルトの名無しさん:2007/09/15(土) 16:41:09
>>816
良く解らん。
タイマーとリスナーで何をやりたいんだ?
819816:2007/09/15(土) 16:54:23
>>818
記述不足で失礼。
タイマーの動作をActionListenerの中身で記述しているつもりなのですが、
そのタイマーによって呼び出される動作の中から、
何らかの条件によってタイマー自体を止めたいのです。

もしくはそもそもTimerの使い方が変なのでしょうか・・?
820デフォルトの名無しさん:2007/09/15(土) 16:56:13
何を言ってるのか良くわからんがメンバに持てば?
821デフォルトの名無しさん:2007/09/15(土) 17:02:50
Timer timer; // メンバ変数
---
ActionListener timerEvent =
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
   if(条件) {
       timer.stop();
    }
}

822816:2007/09/15(土) 17:16:49
>>820,821

ありがとうございました、おかげで解決しました。
言われてみれば簡単な事なのに、3時間近く悩んでましたorz
823デフォルトの名無しさん:2007/09/15(土) 17:28:43
>>822
気にスルナ。俺の知り合いで二年間メソッドはメインからしか呼び出せないと思ってたヤツがいるから。
824デフォルトの名無しさん:2007/09/15(土) 20:19:42
特定のキー(F5とか)が押されたらプロセスを終了する
ようなプログラムを書きたいんですが、どのクラスを
どう使えばよいのかわかりません。
どなたか教えていただけませんか?
825デフォルトの名無しさん:2007/09/15(土) 20:21:36
GUIなのかCUI(コンソール)なのか解らんと答えようがない。
あと、プロセスってどういう意味で使っているのかを説明汁
826デフォルトの名無しさん:2007/09/15(土) 20:22:31
ActionListnerインタフェース
827824:2007/09/15(土) 21:54:15
返信ありがとうございます。

>>825
CUIです。プロセス=プログラムという意味で使いました。

>>826
ActionListnerについて調べましたが、調べた範囲では
ActionListnerは特定のFrameに対してフォーカスが定まるような
状況でないと使えないようでした。

プログラムが動作している状態なら常にキーのタイピングを検知できるよに
したいんですが、ActionListnerで実装できるんでしょうか?
828デフォルトの名無しさん:2007/09/15(土) 22:00:51
>>827
CUIか
ごめん、これGUIだわ
本当にごめん・・・
829デフォルトの名無しさん:2007/09/15(土) 22:08:44
それは無理
そもそもコンソール上での打鍵はOS依存だし
830デフォルトの名無しさん:2007/09/15(土) 22:12:02
>>829
関係ない人間だが、勉強になったわ。ありがとう。
831デフォルトの名無しさん:2007/09/15(土) 22:16:35
>>827
代替手段はJavaで別のプログラムを起動してSocketかなにかで通信する。
もしくはJava以外のプログラムでプロセスを強制終了する
どちらにせよ強引に割り込まないと無理。
ていうか、なんで強制終了させなきゃいけないの?
832デフォルトの名無しさん:2007/09/15(土) 22:39:50
jettyとかって、ctrl+cのshutdown hook使ってなかったっけ。ってかキーはctrl+cに縛られるけど。
833デフォルトの名無しさん:2007/09/15(土) 22:45:56
アプリケーションが自分で終了できる仕組みがない事に問題があるのでは?
834デフォルトの名無しさん:2007/09/15(土) 23:59:06
さてはキーロガーを作る気だな。
835デフォルトの名無しさん:2007/09/16(日) 00:05:54
>>834
変な風に煽るのやめろよ。
実行側環境(JRE)に依存するウイルス作る馬鹿がどこにいるんだよ。
836デフォルトの名無しさん:2007/09/16(日) 01:24:46
>>833
要件によるんじゃね?

そもそも、CUIなのにキーイベントを監視する必要性があるほうがおかしいと思うナー
せめてkillシグナルを受け取って終了するとか、標準入力からコマンドを受け付けて終了するとか、
終了用ファイルの有無を監視するとか、そういうのが普通じゃないの?
837デフォルトの名無しさん:2007/09/16(日) 03:18:01
シグナルの受け取り方もOS依存でね、これがまあ、winの糞っぷりときたら・・・。
838デフォルトの名無しさん:2007/09/16(日) 14:06:08
Javaからコンソールを立ち上げて殺すってのはどうだ。
839デフォルトの名無しさん:2007/09/16(日) 15:04:10
>>838判断が出来ないの?
殺すなんて言葉は良くないよ
840デフォルトの名無しさん:2007/09/16(日) 15:33:09
えっと、killのことですよね?殺すっていいますよね。。。
誰か、こういうときどう突っ込んでいいのか教えてください
841デフォルトの名無しさん:2007/09/16(日) 15:47:10
>>840
throws UnreadAirResponseException
842デフォルトの名無しさん:2007/09/16(日) 16:04:31
$ kill -Kill 839
843デフォルトの名無しさん:2007/09/16(日) 17:32:47
そういえばJavaって他のプロセスにアタッチするときってどうするんだろう
JNIに頼るしかないよね?
844デフォルトの名無しさん:2007/09/16(日) 17:37:18
Javaで他のJavaにってこと?
RMIだってあるじゃん
845デフォルトの名無しさん:2007/09/16(日) 18:03:28
プロセスにアタッチっつってんだろおおおお
846デフォルトの名無しさん:2007/09/16(日) 18:10:25
最初からJavaで書くなよ・・・
847デフォルトの名無しさん:2007/09/16(日) 18:16:54
「プロセスにアタッチ」って一般的な用語じゃないし。
デバッガでも書きたいのか。
848デフォルトの名無しさん:2007/09/16(日) 18:17:00
socket
849デフォルトの名無しさん:2007/09/16(日) 19:40:18
プロセスにアタッチってどういうこと?
フォークじゃなくて?
どっちにしてもMS-DOSの糞実装が邪魔する話になって来てるな。
850デフォルトの名無しさん:2007/09/16(日) 20:40:56
Applet を Firefox でみているのですが、Applet のクラスを変更しても、Firefoxの画面が変わりません。
firefoxの更新ボタンやキャッシュを消したりしましたが同じです。
Sample.classのファイル を消しても同じ画面がでます。
どうしたら、いいのでしょうか?

---------------------------
<HTML>
<BODY>
<APPLET CODE = "Sample.class" WIDTH = 500 HEIGHT = 500>

</APPLET>
</BODY>
</HTML>
851デフォルトの名無しさん:2007/09/16(日) 20:47:45
>>850
IEでも同じ現象が起きるのか?
IEで反映されるのならばブラウザの問題。
火狐のスレに行って聞いたほうが早いだろう
原因の本質ではないかもしれないが、500の部分もダブルコーテーションで囲っとけ。
852850:2007/09/16(日) 21:10:20
IEでも試しましたが同じでした。。。
853デフォルトの名無しさん:2007/09/16(日) 21:28:38
>>850
クラスがコンパイルされてないんじゃね?
そのHTMLとクラスファイルのある場所の構成を書いてみ
854デフォルトの名無しさん:2007/09/16(日) 21:32:21
俺も試したけど、同じ事象になった
バージョンは1.6.0_02
Javaコントロールパネルからインターネット一時ファイルを消してもダメ
この状態でFirefoxのキャッシュを全て消して、Firefox自体を再起動すればうまくいきそうだけど、
いまニコ動見てるから、誰か変わりに頼む
855850:2007/09/16(日) 21:32:23
c:\test\sample.class
c:\test\sample.java
c:\test\xxx.html

ですべて同じディレクトリにあります。
856デフォルトの名無しさん:2007/09/16(日) 21:35:45
>>855
ためしにHTMLを少し変更してリロードしてみれ
857854:2007/09/16(日) 21:37:01
そういえば、Javaコンソールを立ち上げて、キャッシュ消せるんだった
コマンドは忘れた
たしかコンソール立ち上げると、各コマンドの説明が出るはずだからわかるとおもう
Javaコントロールパネルの詳細設定でタスクトレイのアイコンを出すか、コンソールを常に表示するか、設定すればOK
858デフォルトの名無しさん:2007/09/16(日) 21:40:00
後はVMがClassをロードしてしまい、そのキャッシュというかロードされたクラスがVM(クラスローダー)に残っている可能性が高いな
859デフォルトの名無しさん:2007/09/16(日) 21:40:16
こんなのあったけど、めんどいから丸投げで

Javaアプレットをキャッシュからではなく、毎回読み込むには?
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1411166029
860デフォルトの名無しさん:2007/09/16(日) 21:40:20
Firefoxならツール→JavaConsoleで表示できるな
プラグインを入れていればだけど
861デフォルトの名無しさん:2007/09/16(日) 21:42:12
こっちかな?
コントロールパネルのJavaの設定から、キャッシュをクリアしてみて。
クラスファイルとかはブラウザのキャッシュとかには入らない模様。
862デフォルトの名無しさん:2007/09/16(日) 21:42:25
Firefox再起動、又はクラスローダキャッシュをクリア(x)後再読込でいけたよ
863デフォルトの名無しさん:2007/09/16(日) 21:43:26
>>859
そのタグはHTMLのキャッシュ指定だよ、ちなみに無視される事もある。
864850:2007/09/16(日) 21:49:13
>862

できましたありがとうございました。
865デフォルトの名無しさん:2007/09/16(日) 21:52:14
おまいらこういう簡単なことには食いつきいいなw

って言おうとしたけど、荒れそうだから辞めたいんだけど、
でもやっぱり言ってみたいこの葛藤をどう処理すればいいですか?
866デフォルトの名無しさん:2007/09/16(日) 21:53:26
>>865
難しい質問でも自演したら?
867デフォルトの名無しさん:2007/09/16(日) 22:01:06
>>866
自演は飽きたよ
自分で相手をバカにしたくせに、相手にバカにされるとイラっときて、
くだらないレスの応酬するのも疲れるから、我慢してイライラを飲み込むんだけど、それも疲れた
誰か俺にこういうときのうまい対処法をウィービングしてくれまいか
子供の喧嘩をしてこなかったせいで、こんなことでストレスためてる大人が居ます

こういうことを書くと、スレを荒らすな、とか板違いとか、いろいろ言われるんだろうな
気が滅入りながらも、書き込みボタンをポチっとな
868デフォルトの名無しさん:2007/09/16(日) 22:03:25
>>867
あんたとは、いい酒が飲めそうな気がする
うまくコミュニケーションが可能な場所がありゃいいんだがな
869デフォルトの名無しさん:2007/09/16(日) 22:06:56
>>867
スレ違いとわかってて書き込むんだからどうしようもないな
ストレスためてまで答えてくれなくていいから、スレを閉じてくれ
870デフォルトの名無しさん:2007/09/16(日) 23:01:31
>>867
団塊ジュニアの典型的性格だな、それ
871デフォルトの名無しさん:2007/09/16(日) 23:36:13
マルチコアのCPUをフル活用したいのですが、現在はシングルスレッドのプログラムしか書いていません。
やはり少しでも早くしたければ、マルチスレッドでプログラミングする必要がありますか?
872デフォルトの名無しさん:2007/09/16(日) 23:44:50
>>871
その質問だと、「あります」で終わるんだけど、いい?
873デフォルトの名無しさん:2007/09/16(日) 23:45:06
>>871
解らない。
マルチスレッドにすれば早くなるかと言えば必ずしもそうとも言えず、シングルスレッドの方が早い場合もある。
なにを並列に処理させるか、が重要。
とはいえ、マルチコア当たり前の時代になってきたので、並列処理に関しては学習しておくといいと思う。
874デフォルトの名無しさん:2007/09/16(日) 23:47:55
探索をしているので、並列処理は可能なのですが、プログラムが複雑になるので迷ってるんです。
計算時間が膨大なので、少しでも短くなると助かるのですが。
875デフォルトの名無しさん:2007/09/16(日) 23:48:36
追記。
スレッドセーフに設計すると、どうしてもパフォーマンスはトレードオフの関係になる。
スレッドセーフにする事によるパフォーマンス低下よりも並行処理させる効果が高くなると判断できるならばマルチスレッドにする方がいいが、逆もあるということ。
876デフォルトの名無しさん:2007/09/16(日) 23:50:31
>>874
探索にIOが絡んでくるならば、確実に効果は出るはず。
ただ、現在シングルスレッドで作られているプログラムを後からマルチスレッドに対応させるのだけは自重するべき。
877デフォルトの名無しさん:2007/09/16(日) 23:52:41
IOの書き込み自体の処理を並列化したところで、結局IO待ちが発生するから意味は無いしね
つかいどころは、例えば、エンドユーザがファイル保存を指示して、すぐにレスポンスを返すために、
ファイル保存処理をスレッド化しておく、とか
あとはダウンローダーのダウンロード処理なんかもスレッド化の対象だね。
ダウンロードが完了するまでアプリケーションが固まってたら、誰も使いたいと思わないし
878デフォルトの名無しさん:2007/09/16(日) 23:56:34
>>874
探索処理をしている間、先に処理できるものがあるかどうか、っていうのを考えてみて
あるいは、探索処理を細かくわけて、並列に実行できるところがあるのか、どうか
たとえば、探索対象A,B,Cがあって、
AとBは同時に探索できて、AとBの処理が終わればCの処理が実行できるっていうんなら、
AとBをスレッド化させれば早くなる
879デフォルトの名無しさん:2007/09/16(日) 23:57:09
>>877
それは逆だ。
IOが発生すると処理は多少なりともブロックされるわけで、その間はCPUは遊んでいる。
従って別のスレッドにCPUを使う仕事をさせられる為、効率があがる。
なので、grepのように大量のファイルへのIOがある場合、並行処理は効果が高い。
880デフォルトの名無しさん:2007/09/16(日) 23:58:53
>>878
マルチコアであれば、という前提条件が抜けているぞ。
シングルだと遅くなるので注意。
881デフォルトの名無しさん:2007/09/17(月) 00:01:10
>>879
あーちがぅぅ
やっぱり誤解させてしまった
書き込み処理そのものを並列化しても意味が無い っていうこと
ディスクに書き込む部分の処理をスレッド多重でやる
たとえば、複数ファイルに書き込む処理とか

スレッドA→ ファイルA書き込み 
スレッドB→ ファイルB書き込み   ⇒ ディスクが1つしかないなら、結局 → A →B →C (順不同)
スレッドC→ ファイルC書き込み
882デフォルトの名無しさん:2007/09/17(月) 00:01:48
>>880
マルチコアなんでしょ?
883デフォルトの名無しさん:2007/09/17(月) 00:05:14
Texみたいなことが2chで出来ればTexが普及すると思うんだよね
もしくはTexエンジンをブラウザ実装するとか
884デフォルトの名無しさん:2007/09/17(月) 00:12:07
>>883
理工系の学生以外は喜ばないだろ
せいぜいがWikiフォーマット止まり
885デフォルトの名無しさん:2007/09/17(月) 00:17:27
数学板とかローカルには実装したらいいかもしれんがその他では無駄だろ
886871:2007/09/17(月) 00:17:57
>>875-882
ええっと、一気にアドバイスをいただいて少し混乱してるんですが、
マルチコアなら同時に二つのスレッドが実行できるっていうのはあってます?
だとすれば、なんのIOも含まない処理なら、
同じ量をシングルスレッドでするのとマルチスレッドでするのとを比べると、マルチスレッドの方が早いと思うんですが、あってますよね?
887デフォルトの名無しさん:2007/09/17(月) 00:23:32
マルチスレッドは同期のロスが必ず入るから、単純に倍にはならない
デュアルコアなら丁度2つのスレッドが走る状態だと最も効率がいいが、
それ以上だとスレッドの切り替えにかかるロスがあるので効率は下がる

結論
デュアルコアならスレッド2つを大体同じくらい使うように設計すると最も効率が良い
が、実装も複雑になるので素人はシングルスレッドで書いたほうが早い
888デフォルトの名無しさん:2007/09/17(月) 00:25:46
>>886
マルチコアなら同時にスレッドを2つ以上実行する時の効率があがるだけ。
(シングルでも当然マルチスレッドはできる)

マルチスレッドにすれば早くなるかは設計次第。
理想的に並列処理が実現できるならば最大で倍の速度は出るかもしれない。
でも、現実問題としてそこまで理想的な並行処理ができる事は少ない。
マルチスレッドにすればそれだけ実装の手間がかかるし、テストしにくい。
おまけに一番難しいのはどのように分割するかに正解がない。
バグがあっても早ければいいというわけじゃないだろ?
889871:2007/09/17(月) 00:32:34
うーん、やってる探索が簡単なので、マルチスレッドのほうが早いと思ったんですが、
話を聞いてるとリスクが多そうですね。
時間的にも総余裕があるわけではないので、今回は見送ろうと思います。

マルチスレッドについては、また日を改めて勉強することにしました。
アドバイスをくださった皆さん、本当にありがとうございました。
890デフォルトの名無しさん:2007/09/17(月) 00:37:14
最後の最後でマルチスレッド化は秘密のバグを埋蔵するのと同じだから、それが賢明
891デフォルトの名無しさん:2007/09/17(月) 01:07:25
箱○は1コアで2スレッド扱えて3コアあるんだよな。
そう考えると3万は安いw
892デフォルトの名無しさん:2007/09/17(月) 02:33:45
すっごく当たり前なのかもしれないんですが、
一つのsocketで入力、出力Streamって一つだけですよね?_?
動的にStream数増減させたいんだけど、そのつどnew socketするしかないのかなと思いまして。
inputStream.readInt()で読み込まれたら、Streamを別スレッドに渡してやって
また次のinputStream.readInt()で待つみたいな方法ないですかね
893デフォルトの名無しさん:2007/09/17(月) 02:46:39
>>892
当然ながらその通り。
相手が複数であるならばその都度ソケットを開くしかない。
相手が単一ならば複数開かない方が結果的に早いと思う。
あと、よほどのことがない限りはObjectをシリアライズして渡す方が楽だよ
もっと楽なのはRMIだけど
894デフォルトの名無しさん:2007/09/17(月) 02:59:34
下記の問題なのですが、どなたか分かりますか?
お願いします。

以下のような Example クラスがあります。
increment メソッドを使用して count の値を +1 しています。

実行するとコンソールには加算前、加算後共に "0" と出力されます。なぜでしょう?


public class Example {
     public static void main(String[] args) {
int count = 0;
System.out.println("加算前 = " + count);
increment(count);
System.out.println("加算後 = " + count);
}
private static void increment(int count) {
// 加算
count++;
}
}
895デフォルトの名無しさん:2007/09/17(月) 03:01:34
値渡しだからです
896デフォルトの名無しさん:2007/09/17(月) 03:06:43
はい。そうだとは思っていたのですが、
この問題に対しての値渡しの説明を詳しく書くとしたら
どういう風に解答していいか、分からなかったので。
どうなんでしょうか?
897デフォルトの名無しさん:2007/09/17(月) 03:09:55
OOPなら普通カウンタを隠ぺいしてインクリメントした値を返すメソッドを持たせるんだけどな。
898デフォルトの名無しさん:2007/09/17(月) 03:11:36
詳しく書くも何もjavaにはcall by valueしかないから。
899デフォルトの名無しさん:2007/09/17(月) 03:21:14
mainとincrementのcountは同じものでない(値渡し)
staticなcountを作って使えば良い(回答違い?)
incrementってprivateなのか
900デフォルトの名無しさん:2007/09/17(月) 03:23:36
>>893
ありがとうございます。
相手(接続マシン)は単一なのですが、複数スレッド使って通信します。
複数のスレッドで同一のStreamを共有するのは処理がややこしくなるので、
別Streamを用意しなくてはと思ってました。
やはりStreamを増やすには新しくsocketを作るしかないのですね。
StreamにStreamを渡すことって出来るのかな?なんて思ったのですが、
シリアライズできません!って例外投げられました。
ちなみにStreamにStreamを渡すこと
って出来るのでしょうか(汗)
901デフォルトの名無しさん:2007/09/17(月) 04:25:09
そんなマルチプレクサみたいな機能はない
自分でそういった仕組みを作ってもそんなに難しくないと思うけど、
イヤならおとなしく複数のソケットを作っとく方がいいと思う
902デフォルトの名無しさん:2007/09/17(月) 09:36:00
Java上でツリー構造を使いたいのですが、組み込みのクラスなどありますか?
SwingのほうのライブラリにJtreeというツリー構造を表示するクラスがあるみたいなんですが、
純粋なツリー構造のクラスが見つかりません。
またないとすれば、自分で作るべきでしょうか?
903デフォルトの名無しさん:2007/09/17(月) 10:12:27
904デフォルトの名無しさん:2007/09/17(月) 11:38:26
Hoge hogehoge(){
return new Hoge();
}

piyo(){
Hoge hoge = hogehoge();
//ここでhogeに対する処理
}

こう書いた場合、hogehogeで作ったインスタンスをpiyoで使うことに問題はありませんよね?
スコープの理解が曖昧なので、hogehogeの中で作ったインスタンスを外で使うのはまずいのかな?と不安になっています。
905デフォルトの名無しさん:2007/09/17(月) 11:41:32
>>904
Javaのインスタンスはすべてヒープに作られるから大丈夫
906デフォルトの名無しさん:2007/09/17(月) 11:52:38
>>902
JTree は純粋に表示をするだけで、ツリー構造のデータ自体は DefaultTreeModel で管理されてる
DefaultTreeModel の方は、お望みの、表示を伴わない純粋なツリー構造のクラスだが・・・

表示する目的がないなら、用途に合わせて自分で作った方がいいんじゃね
907902:2007/09/17(月) 11:58:20
>>906
そうですか。いかにもGenericsで作られてそうだったので、
車輪の再発明になるかと思い、躊躇していました。

アドバイスに従って一から作ってみようと思います。レスありがとうございました。
908デフォルトの名無しさん:2007/09/17(月) 12:05:27
昆虫の脚の数って(一部例外除き)6本固定じゃん
この6って数字もfinalで定数にするべき?
「昆虫クラスだからわかりそうし、定数にすると打つのも読むのも面倒だし、いいかな」
と思ってるんだけど、やっぱり避けたほうがいい?
909デフォルトの名無しさん:2007/09/17(月) 12:06:14
>>905
安心しました。
ありがとうございます。
910デフォルトの名無しさん:2007/09/17(月) 12:11:19
した方がいいと思う
ソースコードに突然 6 とか書いてあっても、何の意味の 6 なのかわかりにくくない?
911デフォルトの名無しさん:2007/09/17(月) 12:18:20
>>907
車輪の再発明にはならんよ。
Tree構造作るのはパターンだけど、作るたびに要件が違うから簡単なユーティリティクラスにするのが難しい。
だから、作りたい構造にあわせて作って問題がない。
中でArrayListとか使えば作るのは簡単なわけだから。
912デフォルトの名無しさん:2007/09/17(月) 12:21:03
>>908
いくつかの解法はあるけど、脚の数は定数にはしないべきかな。
private final としておいて、コンストラクタで定数のデフォルト値(=6)を設定する.
こうすれば原則としては6本になるが、サブクラス化などをして6本以外の昆虫に拡張できるようになる。
自分は、昆虫クラスに例外があるってならばそうする。
913デフォルトの名無しさん:2007/09/17(月) 12:59:13
6本以外の昆虫っているの?
914デフォルトの名無しさん:2007/09/17(月) 12:59:18
>>908
それは分類学上の定義なので、6本脚が昆虫で4本脚はそれ以外と定義するとすれば、
当然constになるね。何をもってクラスの唯一性を識別するかによる。
たとえば昆虫クラスと人間クラスはどうちがうの?という話になる。
915デフォルトの名無しさん:2007/09/17(月) 13:08:12
俺は使えるところはすべてstatic, finalにしてるよ。
ソースコードが読みにくくなるけど、それがついてるだけで安心できる。
初心者は配列のfinalには気をつけるべきだろうけどね。
916デフォルトの名無しさん:2007/09/17(月) 13:16:26
配列の中身をfinalにすることってできないの?
917デフォルトの名無しさん:2007/09/17(月) 13:18:44
できるよ
918デフォルトの名無しさん:2007/09/17(月) 13:19:42
>>917
どうやって?
919デフォルトの名無しさん:2007/09/17(月) 13:19:50
幼虫の足は何本にすればよいですか?
920デフォルトの名無しさん:2007/09/17(月) 13:22:57
>>918
ラッパーを使えばよかった気がするけど忘れた。
確かEffective Javaの最初のほうで読んだ気がする。
921デフォルトの名無しさん:2007/09/17(月) 13:46:47
超初心者です。現在、Eclipseでi-appliを作ろうと思っているのですが
いざ実行してみようとすると、

Reason check the details
詳細
com.nttdocomo.eclipse.DoJaBuildException: Failed create jarC:\Users\user_name\workspace\MyProject\bin\Project_name.jar


というエラーが出てしまいます。JARファイルの作成に失敗している事はわかるのですが
どう対処すればいいのか良く解りません。ご教示お願いします。

Eclipseは3.*、DoJaは5.0です。
922デフォルトの名無しさん:2007/09/17(月) 13:50:35
配列へのアサインをfinalにしたいんだったら
専用クラス作った方が早い。
ワザワザ、割り当て出来るかどうか考える操作に効率がいいとは思えない。
専用クラスでセットは1回のみ、という要件は簡単に実装できるでしょ。
923デフォルトの名無しさん:2007/09/17(月) 13:54:09
>>921
超初心者が携帯からJavaに入ろうとすることが間違い
せめて簡単な入門書程度を終わらせてからにするべき
924デフォルトの名無しさん:2007/09/17(月) 13:56:44
配列の中身はfinalにできないけど、外部クラスに公開しなければOK。
getterで取得させたい場合は、
return new Arrays.copyOf(array, array.length);
でコピーを返す。
ただし、コピーであると知らずに操作して問題が起きても俺は知らん、って方法。
925デフォルトの名無しさん:2007/09/17(月) 13:57:25
>>923
解りました。些細な問題という事ですね。もう一度調べなおしてみます。
926924:2007/09/17(月) 13:57:58
new いらね
927デフォルトの名無しさん:2007/09/17(月) 14:05:51
>>925
違うっての。
問題が何か切り分ける事もできなければ、質問しようにも相手に何が解っていないのかが伝わってないんだよ。
つっこみをいれるならば、
実行しようとしてみるってなんだ?
コンパイルは通ったのか?
それはプラグインの問題じゃないのか?
Javaのバージョンは?
Eclipseは3.1 3.2 3.3 でかなり違うが?
928デフォルトの名無しさん:2007/09/17(月) 15:49:08
JTableに行、列の挿入削減機能を実装して、
メニューから機能を実行できるようにしています。
JMenuItem(Action)にCtrl+Aなどのキーボードアクセラレーションを設定したのですが、
セルを選択した状態だと、アクセラレーションのコマンドの入力により
JTableのセルが編集状態に遷移してしまい、うまく機能を実行できません。
うまい解決方法があれば、お知恵を拝借したいのですが。
929デフォルトの名無しさん:2007/09/17(月) 15:51:53
コード見なきゃわかんねーよ
930928:2007/09/17(月) 16:10:29
関係ないコーディングのミスでした。
質問する前の確認不足で申し訳ないです。
931デフォルトの名無しさん:2007/09/17(月) 17:19:29
配列のfinalがどうのといってたヤツ、俺が見たのはたしかこれだったと思う。

Java講座 > 2.5. 配列フィールド定数
ttp://www.sgnet.co.jp/java/chapter0205.html
932デフォルトの名無しさん:2007/09/17(月) 17:25:06
>>931
それでも、結局はクラス内部での変更は防止できないんだけどね。
外から見て定数なだけ。
933デフォルトの名無しさん:2007/09/17(月) 17:31:13
>>932
たしかにな。
結局のところ、Javaでは根本的にオブジェクトの変更は不可避だってことだろう。
934デフォルトの名無しさん:2007/09/17(月) 17:38:05
>>933
どうしてもってならば、配列では実現できないから不可変なListに保持して使う時に配列を生成するしかないだろう。
とはいえ、生成した配列自体は可変。
935デフォルトの名無しさん:2007/09/17(月) 17:42:11
防御的コピーと定数化はまた目的が別だろ
936デフォルトの名無しさん:2007/09/17(月) 17:46:06
配列を定数化したいができない。
仕方ないので防御的コピーで外部からの変更からはガードする。
だから、まったく別の話ではない
937デフォルトの名無しさん:2007/09/17(月) 17:54:57
>>936
Javaではそうかもしらんが一般論では違うだろ
防御的コピーで返す値は定数とは限らんわけで
938デフォルトの名無しさん:2007/09/17(月) 17:56:43
java.util.concurrent.locks.ReentrantReadWriteLock に関して質問です。
いわゆる読込み/書き込みロックを実現するクラスかと思いますが、次のような理解で間違いはないでしょうか?

・書き込みロックを取得しようとすると読込みロックが存在しないタイミングまでブロックされた後でロックがかかる。この時、他の読込み/書き込みはブロックされる
・読み込みロックを取得しようとすると書き込みロックが取得されていなければ処理が実行され、他のスレッドが読み込みロックを取得していても並列に処理される
939デフォルトの名無しさん:2007/09/17(月) 18:05:30
>>938
あってるはず。

不安だったら自分でAPIリファレンス読んでくれ。
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/locks/ReadWriteLock.html
940デフォルトの名無しさん:2007/09/17(月) 18:10:35
>>939
レスあり。
リファレンスを読んでみたんだけど、いまいちピンとこなくて。
941デフォルトの名無しさん:2007/09/17(月) 20:29:11
扱う画像は同じだと仮定すると
BufferedImageとImageIconはどちらが多くのメモリーを消費するのでしょうか。
942デフォルトの名無しさん:2007/09/17(月) 20:37:49
>>941
おまえは何を言っているんだ?
943デフォルトの名無しさん:2007/09/17(月) 21:01:13
>>942
・BufferedImageに画像Aを描画したもの(幅、高さは画像Aと同じ)
・画像AのURL情報を元に生成したImageIcon

この2つのオブジェクトが使用するメモリーを比較したいのですが・・・
944デフォルトの名無しさん:2007/09/17(月) 21:09:19
>>943
差があったとしても、その差がアプリケーションの挙動に影響を及ぼすほどのサイズだと考えられるか?
945デフォルトの名無しさん:2007/09/17(月) 22:01:32
きっと何千枚とオンメモリで保持するんでしょ
946デフォルトの名無しさん:2007/09/17(月) 22:05:16
自己解決しました。
947デフォルトの名無しさん:2007/09/17(月) 23:18:20
eclipseからJARファイルをどうやって作るのでしょうか?
948デフォルトの名無しさん:2007/09/17(月) 23:23:19
File -> export -> Java -> JAR file で作れんじゃない
949デフォルトの名無しさん:2007/09/17(月) 23:38:54
>>948
作れました。
神さま、ありがとうございます
950デフォルトの名無しさん:2007/09/17(月) 23:44:13
>>949
神様じゃなくて948に感謝しろww
951デフォルトの名無しさん:2007/09/17(月) 23:45:41
948を伊勢神宮にまつっても問題ないと思うな。
952デフォルトの名無しさん:2007/09/18(火) 00:00:26
コマンドプロンプト使ってるんだけどJavaは正式なパッチ名として認識されませんとか出てくる
なんでかな
953デフォルトの名無しさん:2007/09/18(火) 00:03:08
954デフォルトの名無しさん:2007/09/18(火) 00:03:46
パス切れよ
955デフォルトの名無しさん:2007/09/18(火) 00:07:10
ああ、すまん
ありがとう。
956デフォルトの名無しさん:2007/09/18(火) 13:02:08
サーブレットの勉強中なのですが、フォームを使って値の受け渡しをするところでわからないことがあるので質問させてください。

フォームのサブミットボタンを押したとき、テキストボックスなどに入力されたものとは別に変数を作って値を持たせるにはどうすればよいでしょうか?
その値や変数は利用者が設定するのではなく、ブラウザ側で自動的に設定されるようにしたいと考えています
957デフォルトの名無しさん:2007/09/18(火) 13:31:30
>>956
hidden使う。
でも、java関係ないね。
958デフォルトの名無しさん:2007/09/18(火) 15:10:48
>>272さん
お返事ありがとうございます。返事をしたつもりでいて遅くなって申し訳ありません。
ところでJMFひらけましたが、1フレームごとにキャプチャってどうすればよろしいでしょうか?
JMFサンプルとかが英語ばっかりでかなり大変なので・・・
959デフォルトの名無しさん:2007/09/18(火) 15:14:16
sage忘れ
960デフォルトの名無しさん:2007/09/18(火) 18:07:01
>>958
>>267さんで>>349のことで>>276さんへかしら
961デフォルトの名無しさん:2007/09/18(火) 21:43:24
strutsで作ったシステムのWARファイルを作ったら、
プログラムはWARファイルの中のファイルを実行するんですか?
WARを解凍して、解凍したファイルを実行するんですか?
962デフォルトの名無しさん:2007/09/18(火) 21:52:41
それがどうした?
963デフォルトの名無しさん:2007/09/18(火) 23:34:03
socketについて質問です。
以下のように送信側で1を送信し通信終了、
受信側で1を受信して通信終了とコーディングしたのですが、エラーになってしまいました。

送信側
out.write(1);
out.flush();
socket.close();
-----------------
受信側
int i = in.read();
socket.close();

実行すると、
送信側で SocketException socket closed
受信側で EOFException
って出ます。

送信完了後に切断したいのですが、どうしたらいいのでしょうか。
964デフォルトの名無しさん:2007/09/18(火) 23:57:17
>>963
通信の基本を勉強した方がいいんじゃね?

てか、電話だってどっちかが「切る」んだろ
話すだけ話して聞いたか確認せずに勝手に切られたら相手困るじゃねーかww
965デフォルトの名無しさん:2007/09/19(水) 00:48:10
かなりくだらない質問でちょっと気が引けるのですが・・・
最近System.out.printと書くのがめんどくさくなってきたんで、こんなクラスを作ってみました。

public class S {
  public static final S o = new S();
  public void p(Object o){
    System.out.print(o);
  }
  public void p(int i){
    System.out.print(i);
  }
  ・
  ・
  ・
}

使用例
S.o.p("test");

作ったのはいいんですが、どうも納得いきません。
System.out.printの略だとわかりやすいように作ったんですが、これはこれで打ちづらいです。
もう少しスマートで使いやすくならないでしょうか?
966デフォルトの名無しさん:2007/09/19(水) 00:53:52
アホってよく言われないか?
967デフォルトの名無しさん:2007/09/19(水) 00:58:17
>>965
public class S {
private static java.io.PrintStream out = System.out;
public static void p(Object o){
System.out.print(o);
}
public static void p(int i){
System.out.print(i);
}
:
:
}

使用例
S.p("test");
968デフォルトの名無しさん:2007/09/19(水) 00:58:45
ヒント1: static import
ヒント2: java.util.logging または log4j
ヒント3: sysout + [Ctrl + O]
969デフォルトの名無しさん:2007/09/19(水) 01:00:23
>>967
private static java.io.PrintStream out = System.out; は要らねえ
970デフォルトの名無しさん:2007/09/19(水) 01:05:58
全てのSystem.out.printを使うクラスにpublic void p(Object o)等々をこぴぺで入れておく。
staticコンテクストから呼ばれる可能性があるならpublic static void p(Object o)にしておく。
使用するときはp("test")だけで呼べる。
971デフォルトの名無しさん:2007/09/19(水) 01:14:42
967のS.pをstatic importすれば完璧
972デフォルトの名無しさん:2007/09/19(水) 01:20:08
ぶっちゃけめんどくなるほどsysoutばっか使うプログラムってあるかぁ?
コード補完で十分だろ
973デフォルトの名無しさん:2007/09/19(水) 01:25:13
notepad.exeでも使って書いてるんじゃまいか?
974デフォルトの名無しさん
>>967>>969
少しだけ短くなりますね。
"."が少なくなるのはいいですね。

>>968
ヒント1
import static java.lang.System.out;
public class Test{
 public static void main(Strin[] args){
  out.println("");
 }
}

目んたま飛び出るかと思いました。
こんな便利機能があるとは。
1.6でコンパイルしていたんですが、Eclipseに警告されて1.5でコンパイルしました。

ヒント2
コーディングが少し長いですが、気軽にログに残せるのはいいですね。
勉強になります。

ヒント3
[Ctrl + O]というのがよくわかりませんが、Eclipseを使用しているのでCtrl+Spaceを押してみたら勝手に変換してくれました。
第三者にもわかりやすく、自分も楽ちんでとても良いですね。
短時間で多くの事を学べました。感謝の極みです。

>>970
使用頻度の高いSystem.out.printを毎回ちょこちょこ書くのがめんどうだったんで
最初は>>965みたいなものを継承して作ってました。
private void sop(Object o){
 System.out.print(o);
}