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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下の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 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。

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

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

JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/

次スレは>>980あたりで。
2デフォルトの名無しさん:2006/10/22(日) 13:45:18
【初心者】Java質問・相談スレッド92【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1159642341/l50

これは使わないの?
3デフォルトの名無しさん:2006/10/22(日) 13:52:59
ここは偽スレ。本スレはこちら

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
4ぴゅあ:2006/10/22(日) 14:09:37
偽スレなんて思ってませんよ。わちき一人が我慢すればいいことなので……
5デフォルトの名無しさん:2006/10/22(日) 15:45:20
このスレは偽物です。

本スレはこちら

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50

6デフォルトの名無しさん:2006/10/22(日) 18:10:37
for文を使って
2次元配列をつくるのにはどうしたらいいんですか?
7デフォルトの名無しさん:2006/10/22(日) 18:15:19
>>6
int[][] a = new int[10][];
for(int i = 0; i < a.length; i++) a[i] = new int[10];
8デフォルトの名無しさん:2006/10/22(日) 18:27:04
>>6

このスレは偽物です。

本スレはこちら

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
9ぴゅあ:2006/10/22(日) 18:40:00
なんでもいいけどさ

向こうでは本物とも偽物ともくだらんことは一言も言い出してないし
向こうでは本スレではないと明言されてるんじゃないの?
10デフォルトの名無しさん:2006/10/22(日) 18:53:58
こっちでいいのかな?初心者なんですが質問させてください。

日付 項目1 項目2 ・・・
20061019 a e ・・・
20061020 b f
20061023 c g
20061024 d h

のようなデータがあったとします。
行が一つのインスタンスになっていて、日付をキーとしてデータを取得したいのですが
このようなデータを格納するのに、なにかいいクラスないでしょうか?(多次元のHashとか?)

例えば、key=20061023 のときに下記のようなメソッドを作ってデータ取得したいと思っています。

get項目1(key) → return c
get項目2(key) → return g
get項目1(key,1) → return b (keyの1日前の項目1のデータ)
11デフォルトの名無しさん:2006/10/22(日) 19:01:37
>>9
むこうのスレに(・∀・)カエレ!
12デフォルトの名無しさん:2006/10/22(日) 19:16:21
>>10
> return b (keyの1日前の項目1のデータ)
1日前、じゃなくて、一つ前の日付の項目1のデータ…… なのか。

例えば SortedSet<日付> s; Map<日付, List<項目>> m; とかして
m.get(key).get(1)
m.get(key).get(2)
m.get(s.headSet(key).last()).get(1)
13ぴゅあ:2006/10/22(日) 19:21:21
>>10
>行が一つのインスタンスになっていて
というのはそういうクラスを既に作ってあるということ?
(匿名でもできなくないけどちゃんと作った方が楽だと思うし)

>なにかいいクラスないでしょうか?(多次元のHashとか?)
その上で、行方向だけみればいいので多次元とか考える必要はなくて
1次元配列として考えられますよね

そして
>日付をキーとしてデータを取得したい
というところからキーと値のペアを持てるのはMap(くらいかな?)

(キーが一意になることを前提としてみれば)
・キー部分(日付)を取り出してMapを作る
・先のクラスには値部分だけを持たせてキーと値のペアでMapを作る
とか考えられるんじゃないでしょうか
HashMapを使うのかどうかとかは目的に応じて適したものを使えばいいと思う

或いは
>get項目1(key) → return c
>...
とかの部分はそのMapを操作した結果から1行を得てそれぞれにアクセスするとか
Mapを含めて操作するクラスを作って必要なメソッドを用意しておいてやるとか
14デフォルトの名無しさん:2006/10/22(日) 19:23:42
それだったら SortedSet<日付> 使わずに
SortedMap<日付, List<項目>> で行けそうな感じもする。

もっとも、1つ前の日付とか1つ後の日付ならともかく、
3つ前とか 4つ後とかだと面倒くさい。

Map<日付, Integer> m; List<List<項目>> l; とかして
l.get(m.get(key)).get(1)
l.get(m.get(key)).get(2)
l.get(m.get(key) - 1).get(1)

とか、そんな感じの方が良いか。
15デフォルトの名無しさん:2006/10/22(日) 20:03:34
>>12-14
レスありがとうございますっっ
コレクションをほとんど使ったことないもので、ものすごい参考になります

>>12
すいません、1日前じゃなくて1つ前のデータでした。
MapのValue値にList型をいれるという発想がなかったようです orz
s.headSet(key).last()ってのは、
keyより小さいSortedSetを取り出して、その最後を返す=keyの一つ後ろを返すってことですよね

最初の書き方が悪かったんですが、1つ前のデータだけじゃなくてN個前のデータが取得したいのでコレは保留でしょうか

>>13
既にクラスがあるのではなく、
データをどのようなクラス(or配列)にいれるのがベターかという話しです

最初は
int[] data,koumoku1,koumoku2 とやってたんですが、
日付をキーとして取り出せないことで破綻しまして。。。

MapのValueにクラスが入る発想がなかったので、
多次元Hashとかアホなことを考えてしまったようです

>>14
Map<日付, Integer>と、日付に対してIntegerを割り当ててるのは、N個前を表現するためですか?
そうだとしたら、Mapを作る時点で日付の一番古いところに値0、それ以降は値++って感じでMapを定義すればいいんでしょか?
16デフォルトの名無しさん:2006/10/22(日) 20:04:59
2007年のクリスマスは、サンタクロースの大井競馬場での騎乗のため
中止となります。また、それに伴いましてクリスマスイヴやプレゼント交換会
も中止となります。ご了承下さい
http://2chart.fc2web.com/2chart/2007kurichuusi.html
また、昨年お伝えしましたように、2006年のクリスマスも中止です。
http://2chart.fc2web.com/2chart/2006kurisumasuchuushi.html

毎年、各所でこのような楽しいクリスマスの風景が見られましたが
自粛でお願いします。
http://2chart.fc2web.com/2chart/tanosiikurisumsu.html
17デフォルトの名無しさん:2006/10/22(日) 20:10:48
>>15
言葉足らずでごめんね。

> Map<日付, Integer>と、日付に対してIntegerを割り当ててるのは、N個前を表現するためですか?
yes

> Mapを作る時点で日付の一番古いところに値0、それ以降は値++って感じ
そんな感じで。
18ぴゅあ:2006/10/22(日) 20:31:05
>>15
>既にクラスがあるのではなく、
>データをどのようなクラス(or配列)にいれるのがベターかという話しです
取り敢えずやってみるとかなら兎も角も
行の全ての項目を持つかキーと値を別としたクラスを作っておくと
1つのオブジェクトとか考えられて楽かもね
後々も

キーで探したい仕組みというのと、行内の各項目とはまた別でしょ?

Mapが作れた後は、キーをどう扱うかだけ考えればいいことになると思うし
例えば
・キーとなる日付の行を基準に存在する行に対して±nとか
・日付に対して±nの日付をキーとして探すとか
作ったMapに対して操作するクラスがあればいいわけで
機能を増やしたければメソッドを作りこんでいけば

行が取り出せれば、行の単位としたオブジェクトから各項目を取り出したりすればいいわけだし
(それは行単位としたクラスにメソッドがあればいいでしょ)
>>13で言ったのと同じことしか言ってないですけどね
19デフォルトの名無しさん:2006/10/22(日) 20:40:20
>>17-18
どもどもー
とりあえず>>17みたいな感じで作っていき、
あとはメソッドを作り込んで対応してみようと思います。

まじ、参考になりまくりでした。ありがとうございまっす!
20デフォルトの名無しさん:2006/10/22(日) 20:40:26
兄弟スレッド
【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
21デフォルトの名無しさん:2006/10/22(日) 23:21:15
>>10です、先ほどはありがとうございました。

>>14

Map<日付, Integer> m; List<List<項目>> l; とかして
l.get(m.get(key)).get(1)
l.get(m.get(key)).get(2)
l.get(m.get(key) - 1).get(1)

を参考に実装してみたんですが、List<List<項目>> l; のところって、例えば

ArrayList<Integer> koumoku;
ArrayList<List> l;

for(int i=0;i<size;i++){
koumoku.add(i番目の項目1のデータ);
koumoku.add(i番目の項目2のデータ);
l.add(koumoku);
}

ってやると、koumokuにデータがどんどん追加されていってしまいますよね。
なので、koumokuを大きさsizeの配列にしてみたんですが、それだと

koumoku[date_map.get(key)].get(1)
koumoku[date_map.get(key)].get(2) 
koumoku[date_map.get(key)-1].get(1) 

とかでアクセスできてしまうので、
lを作成した意味がないような気がするんですが、なにか根本的なところが間違ってるんでしょうか?
22ぴゅあ:2006/10/23(月) 00:25:23
>>21
根本的に間違っているといえば・・・
forループの中1回分がkoumoku1個分を作り上げlにaddするつもりですよね?

たぶんkoumokuはforループの外でnewしてあるんだと思うけど
そのコードではforループの回数分"1個のkoumokuに"addされていくことになるでしょう

forループ1回毎にkoumokuをnewしてやらないと
「i番目のkoumoku」とはならないんじゃないでしょうか
(koumokuは内側のList<項目>を作るつもりで、lは外側のList<...>のつもりの筈?)


>koumoku[date_map.get(key)-1].get(1)
>とかでアクセスできてしまうので、
は前半が片付かないと…と思うので保留


あと、折角
>ArrayList<Integer> koumoku;
>ArrayList<List> l;
のように書くなら
ArrayList<Integer> koumoku;
ArrayList<ArrayList<Integer>> l;
がいいんじゃないかと思うけど
(Listインターフェイスの範囲でしか使わないならArrayListの部分はListでも可)
23ぴゅあ:2006/10/23(月) 00:39:39
あぁ あと
>List<List<項目>> l;
とするということは2次元配列を扱おうとしていることになるでしょうから
(Listとか関係なく)2次元配列の扱い方について調べてみるといいのかも

そうすればforループの中をどうすればいいかとか
判ってきたりするんじゃないでしょうか
24デフォルトの名無しさん:2006/10/23(月) 00:51:36
んーと、Listの中にListを入れる構造にする理由がよくわからないんですよね

ArrayList<Integer>[] koumoku;
ArrayList<ArrayList<Integer>> l;

for(int i=0;i<size;i++){
koumoku[i] = new ArrayList<Integer>();
koumoku[i].add(i番目の項目1のデータ);
koumoku[i].add(i番目の項目2のデータ);
l.add(koumoku);
}

int out = koumoku[date_map.get(key)-1].get(1):
//int out2 = l.get(date_map.get(key)-1).get(1));

って感じで一応期待の結果は得られたのですが、これだと
out と out2 は同じ結果を返すので、

ArrayList<ArrayList<Integer>> l;

は不要かなぁと思ったわけです。

そもそも、koumokuを配列にしてるのがおかしいんでしょうか?
25デフォルトの名無しさん:2006/10/23(月) 01:09:56
>>23
あぁぁ、2次元配列ってそういうことですか。やっと理解したような気がします。

ArrayList<Integer> koumoku;
ArrayList<ArrayList<Integer>> l;

for(int i=0;i<size;i++){
koumoku = new ArrayList<Integer>();
koumoku.add(i番目の項目1のデータ);
koumoku.add(i番目の項目2のデータ);
l.add(koumoku);
}

int out2 = l.get(date_map.get(key)-1).get(1));

ってforの中でkoumokuをnewしとけば
わざわざ配列にしないでも2次元配列みたいに扱えるんですね
26ぴゅあ:2006/10/23(月) 01:33:44
>>24
>そもそも、koumokuを配列にしてるのがおかしいんでしょうか?
>>14とかの話を前提とするならおかしいということになるでしょう

ArrayList自体が既に配列のようなもので…
挙げられたコードだと"l.add(koumoku[i]);"になるべきでしょうね
(一応これにより辻褄は合う筈ですが"[i]"なしでうまく行きました?)

でもkoumoku自体は項目nのデータを持つ配列(=行)にしたいわけで
lは各行(を作ったkoumoku)を持ちたいわけですから
koumokuは1行分として持てばいい
なのでkoumokuを配列にする必要はないですよね

koumoku ... 1行分の各項目を持つArrayList(配列)
l ... koumoku(1行分)を行ごとに持つArrayList(配列)
(koumokuは1行ごとに作り直している)
と考えてみてはどうでしょう

lはkoumoku(ArrayList<Integer>)を持つArrayListなので
ArrayList<ArrayList<Integer>>ということになる

>int out = koumoku[date_map.get(key)-1].get(1):
これはkoumoku[n]でn行目が取れて
koumoku[n].get(1)でn行目の2番目の項目を取り出している
ということになりますよね

koumokuを配列とする(ArrayList<Integer>[] koumoku;)なら
lは不要ともなるでしょうけど…

要はkoumokuの"[]"(配列)の部分をlに任せるか(行数はaddした任意の数)
koumokuを配列(行数はsizeで決めておく)にするかの違いでしょう
27デフォルトの名無しさん:2006/10/23(月) 01:36:10
JAVAでシリアル通信をしてる方いますか?相談に乗ってください。
rxtxを使ってシリアル通信でデータを取り込もうとしているんですが、
19200bpsでデータを取り込もうとすると、とたんにレスポンスが悪くなります。
10msec間隔で8文字受信してリアルタイムにprintlnで表示をするプログラムを動かしてみた
のですが、5秒間、500個のデータを表示し終わるのに9秒くらいかかっています。
5秒で通信が完了しているのはプロトコルアナライザで確認しました。
5秒(通信完了)時点でのデータ表示数は300個弱、その後3−4秒くらいダラダラと表示
しつづけるのです。
プログラム自体は、単純です。シリアルポートイベントリスナで受信を引っ掛けて、\rが出るまで
StringBufferに溜め込んでprintlnで表示しているだけです。
jdkのバージョンは1.5.0_08
jreのバージョンは1.5.0_06
rxtxのバージョンは2.1-7r2
osはwindows2000sp4
です。PC用のアプリケーションを作るのは初めて(マイコンでのプログラム経験はあり)なんですが
19200bpsで、この遅さはあり得ないだろ、と思っています。きっと俺の勘違いか思い込みだと思うのですが、
なにか気づいた点がありましたらアドバイスください。m(_ _)m
28デフォルトの名無しさん:2006/10/23(月) 01:41:38
>>27
prontln
は負荷がおっき〜のでバッファに保存して、
ボトルネックがprintlnかシリアルポートかき莉分けてみては。
29デフォルトの名無しさん:2006/10/23(月) 01:44:04
>>27
まさかとは思うが、println() がボトルネックになってたとか、そーゆー話じゃないよね?
30デフォルトの名無しさん:2006/10/23(月) 01:44:41
今、世論調査用の入力フォームをアプリケーションとしてJavaで作成しているのですが
メニュー画面から入力フォーム(入力用テキストフィールド等が配置してある)
に行きさらにボタンを押すと2枚目の入力フォーム・・・というような画面遷移の処理の仕方が全く分かりません。
ラベルの配置等個々の画面の表示等は教本片手になんとかできたのですが
Javaでプログラムをするのが初めてなものですいません、どなたかご教授お願いします。
31ぴゅあ:2006/10/23(月) 01:53:55
>>25
そんなとこです

ArrayListの中身って、オブジェクトの配列になっていたりします
("います"と言ってしまってもいいのか?)

Integer[] koumoku;
とかとしてしまうと、予め要素数が判っている必要がありますが
ArrayListにしてやると、足りなくなったら拡張してくれるので
(内部ではサイズを変えて(拡張して)newし直している)
必要な要素数が予測できないとき(要素数が可変の配列として)ArrayListとかで一度受け取ってから
後でサイズを得て、ピッタリサイズの配列に作り直すとか
よくやられているみたいです
32ぴゅあ:2006/10/23(月) 02:07:59
なので、書き方こそ違うけど
2次元配列辺りとかが解ってくると(似た形にはなったりすると思う)
その辺りも解ってくるんじゃないかと思います

という肝心なところを書き忘れてました。。。
33ぴゅあ:2006/10/23(月) 02:16:04
あとは

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50

に来てもらえば詳しく解説します。。。
34デフォルトの名無しさん:2006/10/23(月) 02:17:23
うざーー
35ぴゅあ:2006/10/23(月) 02:18:54
>>33は偽者。みんなわかるよね?
36デフォルトの名無しさん:2006/10/23(月) 02:29:49
>>31-32
長々とまじでありがとうございました。
コレクション使ったことなかったけど、だいぶ使い方がわかりましたっっ

ここの板IDでないのが(´・ω・`)
37デフォルトの名無しさん:2006/10/23(月) 02:46:14
きもいので
List<? extends List<Integer>>
くらいに汁
38デフォルトの名無しさん:2006/10/23(月) 07:59:52
このスレは初めて来ましたけど
レベルの高い人と全然駄目な人が混在してますね。
>>28-29、37さんはもう少し勉強したほうがいいですよ。
39デフォルトの名無しさん:2006/10/23(月) 13:03:07
>>38
ぴゅあ乙
40デフォルトの名無しさん:2006/10/23(月) 13:30:48
41デフォルトの名無しさん:2006/10/23(月) 16:48:46
[Microsoft][ODBC Microsoft Access Driver] マシン '自分のマシン名' の
ユーザー 'admin' によってロックされているので、更新できませんでした。
っていうエラーがでるんだけど、どういうエラー?
42デフォルトの名無しさん:2006/10/23(月) 16:54:09
レコードロックかなんかだろ。 つーかjava関係ないし
43デフォルトの名無しさん:2006/10/23(月) 18:43:20
最大値と最小値を求めるメソッドを教えてください
44デフォルトの名無しさん:2006/10/23(月) 19:03:45
宿題はそれ用のスレがあるですよ。
45デフォルトの名無しさん:2006/10/23(月) 19:08:00
宿題ほどでもないと思うんですが。。。
46ぴゅあ:2006/10/23(月) 19:19:46
>>43
Math.min,max

こっちで質問してもらっても良いですよ
【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
47デフォルトの名無しさん:2006/10/23(月) 19:30:38
>>46は偽者。みんなわかるよね?
48デフォルトの名無しさん:2006/10/23(月) 19:33:42
java.utilCollections.max&min
49デフォルトの名無しさん:2006/10/23(月) 19:55:27
質問です。
Vectorでクラスの配列をリストで管理するように
整数の配列をリストで管理するようなクラスってありませんか??
50デフォルトの名無しさん:2006/10/23(月) 20:20:38
>>49
jakarta commons primitives
51デフォルトの名無しさん:2006/10/23(月) 20:28:50
JavaServletを使ってファイルが送信されてくるのを待つプログラムを作りたいのですが、
どこかに参考となるようなサンプルソースコードが掲載されたサイトはありませんか?
52ぴゅあ:2006/10/23(月) 20:55:52
あちしは>>28,>>29の言ってることはあり得るんじゃないかと思ってますよ。。。
(その後、どうだったかとかがないし・・・)


>>30
ページ毎に配置して破棄して…なんてごにょごにょやるとかいう地道?なのもあるだろうけど

JFrameのContent Paneに乗せているということならContent PaneってJPanelらしいので、
(APIリファレンスのJFrameの中の「Using Top-Level Containers」辺りも見てみるとか
英語だけど・・・ ググッたらどっかに邦訳とかあったような・・・ 気の所為かも。。。)

Content PaneにJPanelを乗っけてやれば、殆どそのまま今やってるのをJPanel上に移せそうですよね
各ページ毎にJPanelを作って乗せてやって、表示/非表示を切り替えてやればいいんじゃないかと
(表示/非表示についての似た話があったのは前スレだったのかな・・・?)

ただ、JFrameではあまり色々といじってないので、ちゃんと試して確認してね
ですけど。。。

或いは先のページ(中程)を見てみると、Content Paneを差し替えるとかできそうなので
もしかしたら表示/非表示よりシンプルに?行ったりするのかもですけど
ただ、Content Paneごとページ単位で差し替えていいようなデザインとかだったら…だし
通常はJPanelを作って乗せるとかの方がいいのかも
(何かのときに試してみようかとも思ってるけど
もし試してみたら、こんなだったとかあると嬉しかったりするけど…)
53ぴゅあ:2006/10/23(月) 20:58:45
>>51
もしかしてファイルのアップロードとか?
"Servlet アップロード"とかでググってみれば色々出てくると思うけど
54デフォルトの名無しさん:2006/10/23(月) 21:07:15
私はドットコムというサーバー会社を借りています。
昨日私宛に1通のメールが届きました。

http://www.do-to.com/

マイルーム「トピックス:10月22日付」にてご案内の通り一部の
旧コバルトJサーバー復旧にあたりハードディスク取替えのため
各サイトについて担当エンジニアにて至急に再設置作業が行われ
ています。

再設置を完了しだい各サーバーは本日夜間から順次接続を再開し
初期トップページが開きますので下記のサーバー初期アカウント
にて管理ページへログインしパスワード変更及び追加ユーザー・
メールアドレス設定とお手元よりページファイル等のFTP転送
をご処理ください。

私なりに考えてみたのですがこれってサーバーが故障したので別に移しました。
後はそちらでFTPなどし直して下さい。みたいなメールに見えるんですけど
昔からのデータも消えてしまいましたしCGIなどの設定なども解りません。
メール設定なども最初からやらなければならないし。


サーバー会社ってみんなこんな感じなんでしょうか?
55デフォルトの名無しさん:2006/10/23(月) 21:10:56
なにこのうざい語り口調で適当な事しか言わない変な固定
56デフォルトの名無しさん:2006/10/23(月) 21:39:11
すみません意味解んないんですけど私の捉え方が間違っているんですかね?

どうしてもドットコムから送られてきたコノメールが良い様にとらえる事が出来なくて。違う観点があるのでしたら聞かせてもらえますか
57デフォルトの名無しさん:2006/10/23(月) 23:56:43
質問させて下さい。
Javaアプリケーションでファイルコンバータを作ろうと思っています。
Java1.4.2_12
そこでファイルダイアログを開く為にFileDialogクラスを使ってみましたが
・拡張子が選択できない。(”すべてのファイル”しかない。)
・初期参照フォルダパスが設定できない。
FileDialogで上記の設定ができるでしょうか?
もしくは別なファイルダイアログクラスはありますでしょうか?

よろしくお願いします。
58デフォルトの名無しさん:2006/10/24(火) 00:46:12
>>49
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(64);
list.add(32);
Collections.sort(list);
System.out.println(list.get(0));
System.out.println(list.get(1));

要1.5
59デフォルトの名無しさん:2006/10/24(火) 01:10:31
>>57
java.awt.FileDialog だったら

> 拡張子が選択できない。
setFilenameFilter 使う。
ただし、Sun のJDK使ってるなら、Windowsでは機能しないらしい。

> 初期参照フォルダパスが設定できない。
setDirectory 使う。

Swing だと JFileChooser かな。
60デフォルトの名無しさん:2006/10/24(火) 01:14:11
JFileChooser chooser = new JFileChooser();
FileFilter pngFilter = new FileFilter() {
public boolean accept(java.io.File f) {
return f.isDirectory() || f.getName().toLowerCase().endsWith(".png");
}
public String getDescription() {
return "PNGファイル(*.png)";
}
};
FileFilter jpgFilter = new FileFilter() {
public boolean accept(java.io.File f) {
return f.isDirectory() || f.getName().toLowerCase().endsWith(".jpg");
}
public String getDescription() {
return "JPEGファイル(*.jpg)";
}
};

chooser.setCurrentDirectory(new java.io.File("C:\\Program Files"));
chooser.addChoosableFileFilter(pngFilter);
chooser.addChoosableFileFilter(jpgFilter);
chooser.setFileFilter(pngFilter);
chooser.showDialog(null, "ファイルを開く");
6157:2006/10/24(火) 01:49:22
>>59-60
回答ありがとうございます!
探し求めていたものはまさにこのようなクラスです。
本当に助かりました。
感謝です!!
6230:2006/10/24(火) 02:41:45
>>52
まさかこんなに丁寧に答えてくださるとは思ってもみませんでした
ありがとうございます
がんばってみますね
もしその方法を試されて成功された場合はまた教えてください
63ぴゅあ:2006/10/24(火) 13:55:35
>>53
ドンピシャです!参考になりそうなソースが出てきました。ありがとうございます!
64デフォルトの名無しさん:2006/10/24(火) 13:57:11
なんでマ板ってID出ないのかな。
出た方が便利なのに。
6551:2006/10/24(火) 14:09:17
>>63は私じゃありません!誰かがぴゅあさんを陥れようとしているのです。。。
66デフォルトの名無しさん:2006/10/24(火) 15:51:24
ぴゅあが出てからAA荒らしがなくなったのが全てを物語ってる
67デフォルトの名無しさん:2006/10/24(火) 16:54:05
javaの画像処理について初投稿します
       public PixelGrabber(Image img,int x,int y,int w,int h,int[] pix,int off,int scansize)
を使用してimgのピクセルデータをint型のpixに格納はできました。
int型のpix(例えばpix[0])には-16705004というイミフな数字が格納されます。
このpix[0]に対して
r_pixels[a][b]=(color_in2[a][b]>>16) &0x000000ff;
g_pixels[a][b]=(color_in2[a][b]>>8) &0x000000ff;
b_pixels[a][b]=(color_in2[a][b]) &0x000000ff;
を行うと、各rgb成分として1,26,20が取り出せました。
このようなint型のrgb成分から-16705004のようなイミフな数字を逆に取り出すにはどのようにすればいいのでしょうか?
よろしくお願いしますm(_ _)m
6867:2006/10/24(火) 16:58:57
r_pixels[a][b]=(color_in2[a][b]>>16) &0x000000ff;
g_pixels[a][b]=(color_in2[a][b]>>8) &0x000000ff;
b_pixels[a][b]=(color_in2[a][b]) &0x000000ff;
でななくて
red = (pix[0] >> 16) & 0x000000ff;
green = (pix[0] >> 8) & 0x000000ff;
blue = (pix[0]) & 0x000000ff;
です
69デフォルトの名無しさん:2006/10/24(火) 17:03:15
>>67
半透明を指定するアルファ値を不透明に固定で良いなら

final int alpha = 0xFF;
int argb = (alpha << 24) | (red << 16) | (green << 8) | blue;

必要があるなら & 0xFF とかでマスクする。
7067:2006/10/24(火) 17:11:38
ありがとうございます!
上記の方法で解決しました!
2chでこんなやさしくされたの初めてだ(´ー`)
71デフォルトの名無しさん:2006/10/24(火) 17:17:31
ColorConvertOpを使ってフルカラーをインデックスカラーに変換したいのですが、
以下のようなソースだと、あらかじめパレットを用意しておく必要がでてきてしまいます。
パレットを自動的に最適化してくれるような方法はないでしょうか?

//パレット
byte[] rs = {-1, 127, 0, 0};
byte[] gs = {-1, 0, 127, 0};
byte[] bs = {-1, 0, 0, 127};
IndexColorModel colormodel = new IndexColorModel(2, 4, rs, gs, bs);

//一時的に使うイメージ
BufferedImage tmpimg = new BufferedImage(
orgimg.getWidth(), orgimg.getHeight(), BufferedImage.TYPE_BYTE_BINARY, colormodel);

//変換
ColorConvertOp colconvop = new ColorConvertOp(null);
colconvop.filter(orgimg, tmpimg);

また、パレットを作成するときにbyte配列を取りますが、
Javaではbyteは-128から127なので、128以上は表現上マイナスになってしまいます。
これは仕様なのでしょうか?
72デフォルトの名無しさん:2006/10/24(火) 20:38:46
初歩的な質問ですが...
GUIアプリケーションを作成した後, アイコンをダブルクリックして実行するようには出来ないんですか?
73ぴゅあ:2006/10/24(火) 20:44:19
>>65
そんな仕様もないのは放っときゃあいいと思うけど
肝心の質問の方は解決できましたか?
74ぴゅあ:2006/10/24(火) 21:01:40
前のスレッド
http://pc8.2ch.net/test/read.cgi/tech/1159700963/702
以降と似た話だと思いますよ

>アイコンをダブルクリックして実行する
ということだけを求めるのなら
バッチファイルにしたのでもいいんじゃないかと思うんですけど
75デフォルトの名無しさん:2006/10/24(火) 21:18:59
>>72
exewrap や JSmooth でぐぐる
76デフォルトの名無しさん:2006/10/24(火) 21:47:27
>>75
ありがとうございます.
また質問ですが, jarコマンドでマニフェストファイルを一緒に格納したのですが,
圧縮後のアーカイブファイルの中のマニフェストファイルのMain-Class: xxxの行が消えてしまうのです.
何故でしょうか?
7776:2006/10/24(火) 21:58:53
事故解決しました\(^o^)/
7876:2006/10/24(火) 22:28:37
度々すみません.
別PCで試してみたところ, "JavaVMを作成できませんでした"というコメントが出てきたのですが, これは何が問題なのでしょうか?
79デフォルトの名無しさん:2006/10/24(火) 23:06:01
JREはインストールしてある?
80デフォルトの名無しさん:2006/10/25(水) 10:55:01
>>78
JREが複数インストールしてあって、レジストリと呼び出すjava.exeの整合性が取れてないとか?
81デフォルトの名無しさん:2006/10/25(水) 16:02:24
Jamesを触り始たのですが、最初の起動から躓きましたorz

run.batを起動すると,
Using PHOENIX_HOME: C:\java\james-2.2.0
Using PHOENIX_TMPDIR: C:\java\james-2.2.0\temp
Using JAVA_HOME: C:\jdk1.5.0_05
Invalid or corrupt jarfile C:\java\james-2.2.0\bin\phoenix-loader.jar

と言われてしまいます。
JAVA_HOMEをjdk1.4.2にしても同様です。

run.batの中身は替える必要があるのでしょうか?
Jamesのバージョンは2.2です。よろしくお願いいたします。

82デフォルトの名無しさん:2006/10/25(水) 16:59:10
(1) org.xml.sax.InputSource から getCharacterStream() で Reader を取得する。
(2) Reader から順に文字を char[] へ読み込む(実際にはこの後これをリモートへ転送)
(3) char[] を受け取った側はファイルに書き込む。

と言う処理を行おうとしています。

(3)でファイルを書き込む際、エンコーディングを指定しておかないとまずいように
思うのですが、それは InputSource#getEncoding() の結果と言うことになるのでしょうか?
例を書かせて頂きますと
●local(読み込み)●
char[] buffer = new char[256];
Reader reader = inputSource.getCharacterStream();

for (int n = 0; (n = reader.read(buffer)) != -1; ) {
//...buffer を転送...
}
●remote(書き込み)●
File serverImage = new File("foo");
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(serverImage, true));
                   //★encoding指定の場合はここに引数追加
writer.write(buffer, 0, length);

※上書きフラグが true になっているのは転送<->書き込みを繰り返して完成させるためです。

目的は、(3)で書き込まれるファイルが、(1)の元々 InputSource が示していたものと
同じイメージであることなのですが、InputSource#getEncoding() は必ずしも
エンコーディングを返してくれるものではないように読めるので、心配しています。
なお、別の都合で InputSource#getByteStream を当てにするのは無理になっています。
うーん、InputSource を理解してない?
83デフォルトの名無しさん:2006/10/25(水) 17:49:46
>>82
入力のInputSourceをどうやって作成したかによって、できることとで
きないことがある。

A. new InputSource(InputStream)だった場合
→getEncoding()はnull、getCharancterStream()はnull
B. new InputSource(Reader)だった場合
→getEncoding()はnull、getByteStream()はnull
C. new InputSource(String)だった場合
→getEncoding()がnon-nullのこともあるかもしれない
いずれの場合も、setEncoding(String)が呼ばれていればgetEncoding()
がnon-nullかもしれない。

なので、InputSourceがどう作られるかの仮定が持てない場合は、「元
と同じエンコーディングにしたい」は不可能。
84デフォルトの名無しさん:2006/10/25(水) 18:01:50
>>83
ありがとうございます。オーバーヒートしかけてましたが、
悩みつつあった内容と同じでした。

もう少しゴテゴテと周辺で起こりそうなことを加えると

・(挙げていない点でしたが)Reader で渡している以上、Reader の読み込み時点で
 文字化け等が起こって無いことは渡すものの責任

・Reader と言うことは内部的には Unicode で渡るのだから、明示的にエンコーディングを
 指定した転送後の展開を意図するならば、「例えば」setEncoding しておけ。
 と言っても、これを見るかどうかは受け取り側次第。
 その結果文字化けが発生したらどうしようもない。強いて言えば決めてないことが悪い。

・ストリームであれば復元に関してこのような考慮は無いので、
 一般的には Reader やシステム ID でなくストリームで渡す。
 (ファイルへ書くだけならそのままであるし、その後にエンコーディングが必要な
  パーズ処理などをもしやるのであれば、正しくコピーされたファイルの中身
  から判別、といった道も自由)

つまり元々の回答には答えがないと言うか…
85デフォルトの名無しさん:2006/10/25(水) 19:43:04
C言語のソースをJavaのソースにコンバートしてくれるツールってないですか?
86デフォルトの名無しさん:2006/10/25(水) 20:17:35
>>85
実はその逆をやってくれるツールが欲しい。
探してるのですがそういうのをご存知なら加えて教えてもらいえないでしょうか?
87ぴゅあ:2006/10/25(水) 21:24:48
>>85,>>86
その手のには、java2cとかjava2c++とか(或いはその逆)
或いはj2cとか・・・
名前が付けられたりする傾向があったりするし
"Java C コンバート"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
88デフォルトの名無しさん:2006/10/25(水) 21:46:58
cのJVM向けのコンパイラでも用は足りるな
89デフォルトの名無しさん:2006/10/26(木) 00:35:35
AspectJを学ぼうとしたら何処のサイトがいいでしょうか?
すれ違いならば何処のスレで聞けばいいですか?
90デフォルトの名無しさん:2006/10/26(木) 10:52:43
"AspectJ"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
91デフォルトの名無しさん:2006/10/26(木) 16:16:12
Java 5.0 Update 8で、1と0が1600個並んだ文字列を指定してFileInputStreamを開いたら、
Windowsごと落ちた。
1.4.2_12だと単にFileNotExceptionをスローするだけで、JVMもOSも無事だった。

JVMのバグ?
92デフォルトの名無しさん:2006/10/26(木) 16:30:46
>>91
1.5.0_09-b01 では FileNotFoundException 投げるけど。

import java.io.*;
public class test{ public static void main(String[] args) throws Exception {
 String s = "";
 for(int i = 0; i < 800; i++) s+="10";
 FileInputStream in = new FileInputStream(s);
 in.close();
}}

みたいな感じのコードでチェック。
93デフォルトの名無しさん:2006/10/26(木) 17:55:17
同時ダウンロードのアルゴリズムを教えてください。
例えばファイルAが複数のサーバ上にあり、それぞれのサーバに接続しデータを受信
することにより早くダウンロードしたいのです。
94デフォルトの名無しさん:2006/10/26(木) 17:59:42
"同時ダウンロードのアルゴリズム"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
95デフォルトの名無しさん:2006/10/26(木) 18:38:59
ここのスレの回答はググレばっかりだなw
96デフォルトの名無しさん:2006/10/26(木) 19:31:14
iアプリをちまちま作りたいと思っているんですが、アプリ作成に最適なフリーソフトは何ですか?

携帯からスマソ
97デフォルトの名無しさん:2006/10/26(木) 19:45:14
"iアプリ、最適なフリーソフト"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
98デフォルトの名無しさん:2006/10/26(木) 21:19:21
JavaはあるバージョンのSDKで書かれたコードを別のバージョンのSDKに変えてもそのまま通ってくれるんですか?
99デフォルトの名無しさん:2006/10/26(木) 21:22:15
バージョンによる
10098:2006/10/26(木) 21:29:54
>>99
そうなんですか、ややこしいですね…


v1.3で書かれたコードからv5.0では、どういう実情なのでしょうか?
101デフォルトの名無しさん:2006/10/26(木) 21:42:24
>>100
1.4 とか 5.0 で deprecated になったメソッド使ってるとか、
1.4 で予約語に指定された assert、5.0 で予約語に指定された enum とかを
変数名、フィールド名、メソッド名に使ってなければ大丈夫だと思うけど。
102デフォルトの名無しさん:2006/10/26(木) 21:51:22
enum予約語化のインパクトは絶大だった・・・
103デフォルトの名無しさん:2006/10/26(木) 21:56:15
ではv1.4.1で書かれたコードからv5.0ではどうでしょうか?
104デフォルトの名無しさん:2006/10/26(木) 22:02:47
>>103
>>101  の通り。
基本的に昔のコードはコンパイルは通る。
まずは試してみればOK。
10598:2006/10/26(木) 22:06:58
>>101
ドキュメント読んでみて、非推奨項目に引っかからなければ原則大丈夫ってことかな。

とりあえず5.0で試してみます。ありがとうございました。
106デフォルトの名無しさん:2006/10/26(木) 22:19:18
1.4 → 5.0 のインパクトに比べれば、どんなこともインパクトに欠ける。
107デフォルトの名無しさん:2006/10/26(木) 22:34:17
数字のインパクトか!?
108ぴゅあ:2006/10/26(木) 22:50:08
>>105
取り敢えず見てみるというところでは
コンパイルしてみれば
ワーニングやエラー出してたり(出させられたり)してなかったかなぁ?

それに対してどうしようかってときに
リファレンス見ていったりしたのでもよいだろうと思うけど
109デフォルトの名無しさん:2006/10/26(木) 22:53:31
>>102 そうでもなかった。
110デフォルトの名無しさん:2006/10/26(木) 23:03:12
setTimeoutでページをジャンプさせる時に履歴を残さないようにしたいのです。
location.replaceを使えばいいように思うのですが、どうしてもうまく出来ません。
よろしくお願いします。

111デフォルトの名無しさん:2006/10/26(木) 23:51:51
>>110
JavaScriptならこっち
http://pc8.2ch.net/php/
112デフォルトの名無しさん:2006/10/26(木) 23:52:38
こっちでしたorz
http://pc8.2ch.net/hp/
113デフォルトの名無しさん:2006/10/27(金) 01:41:58
"setTimeout ページをジャンプ"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど

114デフォルトの名無しさん:2006/10/27(金) 11:09:28
deprecatedなだけなら残ってるんじゃ
1.3未満の環境で作ったGUI周りは動きがおかしくなる事が間々あるな
115デフォルトの名無しさん:2006/10/27(金) 11:47:55
package 宣言がないとコンパイル出来ない、等も。
いずれにせよ、対処はそれなりに簡単。
116デフォルトの名無しさん:2006/10/27(金) 13:10:19
これってお金とかかかるんですかぁ〜?
タダなら始めようと思ってるんですけど
117デフォルトの名無しさん:2006/10/27(金) 13:14:20
計算結果(誤り表示)部分をクリックするとすべてがクリアされるようにせよ

クリアするメソッド?クラス?はなんですか?
118デフォルトの名無しさん:2006/10/27(金) 14:08:39
"計算結果(誤り表示)部分をクリックするとすべてがクリアされるようにせよ

クリアするメソッド?クラス?はなんですか?"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
119デフォルトの名無しさん:2006/10/27(金) 14:45:58
>>118
ぴゅあさん。ありがとうございます。
自己解決しました!
120デフォルトの名無しさん:2006/10/27(金) 17:21:51
現在アプリケーションを自作しているのですが、
CardLayoutでだいたいJPanel(正確にはJPanelを継承したクラス)70から80枚。
そして各1枚に平均4枚ほどのJPanelそしてその上にJLabelやJButtonや他の
コンポーネントも多数張り付けています。(JButtonはだいたい4つぐらいが平均かと思います。
JLabelは多いもので40ぐらいそのほかJListやJTextFiedも多用)です。
レンダリングが旨くいっていないということではなくFrameががくがく震えます。

Jarファイルのサイズとしては6mbから7mbぐらいでそれほど大きくはないのですが、
フルスクリーン表示で画面がときどき小刻みに揺れます。
他のマシーンでも動かしてみたのですが、やはり時々ゆれてしまいます。
2台ともかなりHigh specなマシーンです(1台目は4の3.8にメモリ2GB・2台目は3.0のメモリ1GB)。
ただ2つともノートン2006がインスコされてあり原因がどちらだかわかりません。
これからアンインストールして試して見ますが、
このぐらいコンポーネント数でやはりリソース不足か何かでこういう現象が起きてしまうのでしょうか?
できるだけリソースを開放するように作ってありますが、CardLayout上に張ってあるコンポー
ネント群はnewすると切り替えにかなりの時間がかかってしまい出来れば避けたいのでいい
方法はないでしょうか?宜しくお願いします。



121デフォルトの名無しさん:2006/10/27(金) 17:35:08
何のソフトを入れているとWindowsが重くなるのかリスト
ttp://gigazine.net/index.php?/news/comments/20060911_system_delay/
122デフォルトの名無しさん:2006/10/27(金) 17:40:11
120へ。
そんなにゆれる?
ソースは?
123デフォルトの名無しさん:2006/10/27(金) 18:32:26
>>119
なんで「デフォルトの名無しさん」が、ぴゅあ様だってわかったんだろ?
124デフォルトの名無しさん:2006/10/27(金) 18:40:31
>>120
CardLayout直下のJPanel 半分ぐらい削って、がくがく震えるかってのを
JPanel の数が無くなるまで繰り返してみる、とかして原因特定できないか?
125デフォルトの名無しさん:2006/10/27(金) 18:54:01
>>123
あれだけAA荒らしで荒れてたスレがぴゅあが来てから不自然に静かになったことから察しろ
126デフォルトの名無しさん:2006/10/27(金) 19:03:16
普通にとんでもない量のリソースを食うんじゃなかろうか。
127デフォルトの名無しさん:2006/10/27(金) 19:08:09
>121
dクスです。Norton先生がトップを走っているので怪しいと思うのですが、マシンがかなり
早いので大丈夫かと思っていたのですが・・・ノートン板で前にその記事をみたのでそうかと思った
のですが、プロセスをみているとそれほどメモリ食っていないんですよね・・・でも最終的には
ノートン外してみます。他のマシンでも試したいのですが、自分の使えるのがこの2台と
ロースペックのノート1台なので・・・

>122
はい、かくかくと揺れます。丁度、PowerPointやJavaScriptのホームページ
でブルブル震えるようなエフェクト。あれを小さくした感じです。頼まれた人に見せたのですが、別に
気にならないだけどと言ってくれますが、リソース不足でプログラムが落ちる可能性もなくはないので
ことが心配なので放っても置けません。javaのオプションでヒープ領域は大目にとってありますが、
他のoptionは入れていません。

後ソースは本当に長すぎて出せないです・・・大体170クラスあって平均しても一クラス800から
1000行程度はあるのでとてもだせないです。全部一人で書いているので許可がいるとかそういうこと
はないんですが・・・

原因の箇所がわかっているかもしくはこの部分を見れば分かるというのであればだせますが・・・

自分はコンパイラ(コード生成部)とかレンダリングエンジンを書いたことはあるのですが、
Javaを使ってGUIのシステムを作ってくれと頼まれたので本やインターネット上で探しつつ
3ヶ月ほど前から気合を入れて作ってようやく完成にちかづいたのですが、GUIを使っての製作
は今回が初めてなものでコレぐらいのコンポーネントでゆれてしまうのかなぁ・・・と思い投稿させ
ていただきました。

あまりGUIを使ったプログラムを書いた経験がないのでもしそういう現象があればお聞きできれば
と投稿させていただきました。宜しくお願いします。
128デフォルトの名無しさん:2006/10/27(金) 19:16:20
>124
そうですね。最終的にそれ以外のリソースを削りまくってだめならプログラムを
分割する予定ではいます。あとNortonを外して・・・ でもあとできることといったら
Objectをプールして使いまわすぐらいなんですよね。

最終的にはプログラムのチューニングは徹底的にやろうとは思うのですが、やはりCardLayoutに
はってあるコンポーネントを外すしかないんですかね・・・できれば避けたかったのですかね・・・

>126
そうですよね・・・
129デフォルトの名無しさん:2006/10/27(金) 19:55:28
ところで震えるのは、フレーム(アプリの一番外側)なんでしょうか?
130デフォルトの名無しさん:2006/10/27(金) 20:10:01
>129
そうですね。フルスクリーンでやっているので中がゆれるというよりも
フレーム(JFrame継承したフレーム)ごと揺れるといった現象です。
当たり前ですが、フルスクリーンといってもゲームやスライドショー等
で使われるレンダリング手法は取っていません。

リサイズも出来なければ右上のcloseボタンで閉じることも禁止しています。
131ぴゅあ:2006/10/27(金) 21:31:37
>>130
結構乗せているものは多そうと受け取りましたけど
レイアウトってそのサイズや配置を自動的に算出してくれますよね
実際に試してみなきゃ判らないとは思っているけど
・なんか計算し直しばかりが繰り返されてしまっている
・各コンポーネントに対して計算するときに変な端数が?
とかあったりするとかあるのかなぁ?とか思ったりしてみますけど・・・

最近あまり触ってる時間とか作れてないので
自分でもやってみようかな?というところまでは
行けなかったりするだろうなぁ
というところだったり。。。
132デフォルトの名無しさん:2006/10/27(金) 21:47:49
Apache(Tomcat) や Jakarta Commons の FileUpload にバグってありますか?
最近、趣味で Servlet と JSP を使ってアップローダを作成したのですが、
その中の部品として上記 Commons を利用しているので気になっています
また、Commons を利用して作ったアップローダを公開するのはライセンス
違反になってしまいますか?
この辺の事情に詳しい方、どうか教えてくださいm( _ _ )m
133デフォルトの名無しさん:2006/10/27(金) 22:16:28
何のライセンス違反?
134デフォルトの名無しさん:2006/10/27(金) 22:22:47
>>133
Commons のです
135デフォルトの名無しさん:2006/10/27(金) 22:23:51
まず、ライセンス読んでみた?
136デフォルトの名無しさん:2006/10/27(金) 22:26:58
英語なので挫折しました・・・orz
137デフォルトの名無しさん:2006/10/27(金) 22:29:58
>>130
ここで言うフルスクリーンと言うのは、
画面一杯に広がるような処理を書いてたりするんでしょうか。
(どちらかというと「最大化」に近いようなもの。)
その場合、画面サイズ取得・サイズ更新が
不必要に起きてないか確認すると
何かの手がかりが得られるかも知れません。
138デフォルトの名無しさん:2006/10/27(金) 22:49:41
A.javaとB.javaをパッケージに含んでいて、

A.javaで
public class A{
B[] b=new B[10];

public A(){
for(int i=0;i<10;i++)
b[i].member=i;

for(int i=0;i<10;i++)
System.out.println(b[i].member);
}

B.javaで
public class B{
public static int member;
}

自分としては出力結果が0,1,2,3,4,5,6,7,8,9となって欲しいんですけど、
9,9,9,9,9,9,9,9,9となってしまいます。
C言語のtypedef structの感じでclassを使ってるのが良くないのか、よく分かりません。
エスパーで指示して貰えませんか?
139デフォルトの名無しさん:2006/10/27(金) 22:57:59
staticやめればちゃんと表示される
140ぴゅあ:2006/10/27(金) 23:00:28
>>138
>エスパーで
というのがどんなものか教えて貰えませんか?

エスパーで指示とか解らんので、取り敢えず

>public static int member;
クラス変数(クラスフィールド)について理解してみるのがいいでしょう
141132:2006/10/27(金) 23:02:31
ライセンスについてはもう一度調べてみることにします
ところで、バグの方はどうでしょうか?
142138:2006/10/27(金) 23:03:29
>>139-140
thx

>>140
ごめんなさい。
【マジレス】超初心者の質問に答えるスレ17【エスパー】
http://pc8.2ch.net/test/read.cgi/win/1161170982/
こんなものです。
143デフォルトの名無しさん:2006/10/27(金) 23:19:34
>>138
public class A{
public static void main(String args[]){
new A();
}

public A(){
B[] b=new B[10];
for(int i=0;i<10;i++) {
b[i] = new B(i);
b[i].member=i;
}
for(int i=0;i<10;i++){
System.out.println(b[i].member);

}
}
}


class B{
public int member;
B(int a){
member = a;
}
}
144ぴゅあ:2006/10/27(金) 23:24:55
>>142
なるほど ありがとう

でも、エスパーでなくても答えを考えられるだけのものを
質問としてちゃんと揃えられていると思いますよ


>A.javaとB.javaをパッケージに含んでいて、
は、まぁこの場合余計なものだったりするだろうけど

・期待している結果
・期待通りではなかった実行結果
・それを分析できる材料(ソースコード…分析するに十分な)
145138:2006/10/27(金) 23:25:40
>>143
ありがとう。
NullPointerExceptionで困ってました。
146ぴゅあ:2006/10/27(金) 23:26:37
あ・・・

>>142
で、「よく分かりません。」がなんとかなりそうだったか
というところが重要だろうけど・・・
147ぴゅあ:2006/10/27(金) 23:30:26
>>145
あぁ 確かに・・・

>B[] b=new B[10];
で入れ物は作ってるけど
クラスBをインスタンス化して入れてるところがなかったね
148138:2006/10/27(金) 23:34:02
>>147
いろいろありがと。
時間とらせてスマンかった。
149ぴゅあ:2006/10/27(金) 23:55:12
ごめんなさい

>>147のは>>145,>>143と入れた方がよかったかな・・・と
書いたあとでちょっと気になりました。。。
150デフォルトの名無しさん:2006/10/28(土) 00:04:11
>>132
ライセンスは問題なし。ASLに従って
「このプロダクトにはApache Software Foundationの製品が含まれています」の
一文が製品情報に含まれていればOK。
バグはある。というか無いわけがない。
Apacheのjiraを見れ。
151デフォルトの名無しさん:2006/10/28(土) 08:42:39
import java.awt.*;

public class Awt01 {
Frame frame;

public Awt01() {
frame = new Frame( "フレーム" );
frame.setSize( 200, 100 );
frame.setVisible( true );
}

public static void main( String[] args ) {
Awt01 awt01 = new Awt01();
}
}
上のコードは入門のJAVAテキストに書いてあったものですが、
これをeclipseで実行しようとすると、エラーが出てしまいます。
public class Awt01  のpublicを消すとなぜか普通に動きます。

eclipseには”public 型 Awt01 はそれ独自のファイル内に定義されなければなりません。”とでてました。
どういう意味なのかさえ検討つかないのです。教えてください。
152デフォルトの名無しさん:2006/10/28(土) 09:09:49
>>151
Awt01 って名前のトップレベルな public クラスは
Awt01.java の中で宣言されないといけない。
大文字小文字も区別されるので注意。
153デフォルトの名無しさん:2006/10/28(土) 09:12:46
>>151
このスレは偽物です。

本スレはこちら

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50


154127:2006/10/28(土) 15:11:38
>131
遅れてごめんなさい。
レスありがとうございました。
ピュアさんどうもありがとうございます。
一応レイアウトマネージャーは今まであるものが不便だったので一応自作しました。
JPanelを継承しているクラスで使っているこのレイアウトマネージャーに原因があるのかも
しれないのでもう一度見直します。かなり単体テストをしまくったのですが一応もう一度慎重に
調べてみます。後使い方も調べてみます。あとはNortonを外したりいろいろやって見ます。

>137
ありがとうございます。
そうですね・・・みんなこれはやっていることなので参考にしながらやってみたのですが・・・

他の皆さんもありがとうございました。
ここでレスしてくださった方法と自分が知る限りの方法で原因を探り
後2週間程度で仕上げに入ってテストに入りたいと思います。
いろいろ参考になりました。本当にありがとうございました。
155デフォルトの名無しさん:2006/10/28(土) 15:31:20
>>151
全角スペースとか、全角アルファベットとか入ってないかチェク
publicを消していい訳は無い
156デフォルトの名無しさん:2006/10/28(土) 15:36:41
>>151
ファイル名とクラス名が一致していないとダメ。大文字小文字も一致させてね。
ファイル名は Awt01.java になってる?
157デフォルトの名無しさん:2006/10/28(土) 16:25:02
すごい初心者的な質問です。

int[] a = new int [128];
のaなのですが、一体何クラスなのでしょうか。

.length で配列の長さが取れるのが不思議でなりません。
Arrayクラスというのを見てみましたが、それではないようです。

それになんで .length() ではなく .length で長さが取れるように設計されているのでしょうか。
くだらない質問ですが、どなたか解説していただけませんでしょうか。お願いします。
158デフォルトの名無しさん:2006/10/28(土) 16:32:24
こんにちは。ぜひ相談させて下さい。

サーバサイドJavaの話なのですが、特に制限されてなかったので・・・。
Mayaaを使用したことある方、ぜひお願いします。



mayaaファイル内の変数の条件によって、Strutsのtaglibを用いて作成したhtml要素に、
属性を付加することはできますか?



htmlテンプレートに

<input id="xxx" type="text">

があったとして、mayaaファイル内で、

<html:text m:id="xxx" name="..." property="..."/> (例

とすれば、テキストボックスが作成されますが・・・。
しかし、これに属性を追加する方法がわかりません。

<m:echo> と <m:attribute>を使うことも考えましたが、
これはテンプレート上のタグをそのまま出力するためのものですよね。



識者の方、ご解答よろしくお願いします。
159デフォルトの名無しさん:2006/10/28(土) 16:35:22
>>157
int[] クラスです。.length は隠しフィールドです。
配列は言語仕様上特別扱いされているので
API リファレンスを見るより言語仕様書を見た方がいいでしょう。
160デフォルトの名無しさん:2006/10/28(土) 16:36:14
インターフェースと抽象クラスの使い道がよくわかりません。
メソッドの内容がかかれてないのに、なんの役に立つのと初心者の私にはおもうのですが。
多重継承できないJAVAには必要とかかれてましたが、なおさらパニクってます。

161デフォルトの名無しさん:2006/10/28(土) 16:40:57
>>158
"サーバサイドJava Mayaa"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
162デフォルトの名無しさん:2006/10/28(土) 16:44:15
>>158

ググりましたし、メーリングリストも全てチェックしたのですが、、、
多少ヒントになる話題はあっても(条件分岐を伴うm:attributeによる属性追加 等)、
 『属性追加の対象がtaglibによるものである』
といった、ポイントに触れるものはありませんでした・・・。
163デフォルトの名無しさん:2006/10/28(土) 16:56:58
byte[] buff = new byte[1024];
int n = is.read(buff);
st = new String(buff);
System.out.println(st); // ここではちゃんとTESTと表示される

if(st.equals("TEST"))
処理

このようなコードでbuffに"TEST"という文字を送っても
処理の部分が実行されません。
何故でしょうか?
164デフォルトの名無しさん:2006/10/28(土) 16:57:12
>>162
MLに投げたらいいんじゃないの?
165デフォルトの名無しさん:2006/10/28(土) 16:59:55
>>163
isいらんやん

printlnで表示されたからといってequalsじゃないだろ
buff 1024バイトあるんだろ?Stringの後ろはどうなってるかチェックしてみ。
166デフォルトの名無しさん:2006/10/28(土) 17:03:43
ServerSocketクラスの勉強をしているんですが、

ServerSocket s = new ServerSocket(1333);

このようにポートを開放?してもセキュリティ的に大丈夫なんでしょうか?
よくわからないんですがなんとなく心配です。
167デフォルトの名無しさん:2006/10/28(土) 17:06:19
>>165
なるほど。buffの使ってない部分が影響してるということですか
では、この方法で文字列を比較することはできないんでしょうか?
文字列の最後に\0を付加することでできたりするんですかね?
168デフォルトの名無しさん:2006/10/28(土) 17:26:19
HTMLの表示にGeckoを使用すため、Webclient 2.0 Alpha 3.0 と Mozilla 1.7.12 をダウンロード・解凍し
下記のページを参考に各種設定を行いました。
tp://null.michikusa.jp/misc/webclient.html

ディレクトリとビルドパスの設定は次のように行いました
 ・プロジェクト…C:\workspace\gecko\
 ・Mozilla.exeのディレクトリ…C:\workspace\gecko\mozilla
 ・webclient.jarのパス…C:\workspace\gecko\mozilla
 ・VM引数の設定…
   -DJava.library.path=C:\workspace\gecko\mozilla;C:\workspace\gecko\mozilla\components
   -DBROWSER_BIN_DIR=C:\workspace\gecko\mozilla

mozillaディレクトリの内容はmozilla-win32-1.7.12.zipを解凍して得られたフォルダに
webclient_2_0_a3_win32.zipを解凍して得られたwebclient_2_0_a3_win32フォルダから
webclient.jar、javadomjni.dll、webclient.dllをコピー、また\webclient_2_0_a3_win32\componentsの
javadom.dllを、mozilla\componentsにコピーしたものです。

その後、テストとして同ページからSimpleBrowser.java(tp://null.michikusa.jp/misc/SimpleBrowser.java)を
eclipse上で実行したところコンパイルは正常に行われるのですが、実行段階で
java.lang.NoClassDefFoundError: Exception in thread "main" が表示されてしまいます。
ビルドパスの設定が間違っているのでしょうか。
169デフォルトの名無しさん:2006/10/28(土) 17:34:12
"HTMLの表示にGeckoを使用すため、Webclient 2.0 Alpha 3.0 と Mozilla 1.7.12 をダウンロード・解凍し
下記のページを参考に各種設定を行いました。
tp://null.michikusa.jp/misc/webclient.html

ディレクトリとビルドパスの設定は次のように行いました
 ・プロジェクト…C:\workspace\gecko\
 ・Mozilla.exeのディレクトリ…C:\workspace\gecko\mozilla
 ・webclient.jarのパス…C:\workspace\gecko\mozilla
 ・VM引数の設定…
   -DJava.library.path=C:\workspace\gecko\mozilla;C:\workspace\gecko\mozilla\components
   -DBROWSER_BIN_DIR=C:\workspace\gecko\mozilla

mozillaディレクトリの内容はmozilla-win32-1.7.12.zipを解凍して得られたフォルダに
webclient_2_0_a3_win32.zipを解凍して得られたwebclient_2_0_a3_win32フォルダから
webclient.jar、javadomjni.dll、webclient.dllをコピー、また\webclient_2_0_a3_win32\componentsの
javadom.dllを、mozilla\componentsにコピーしたものです。

その後、テストとして同ページからSimpleBrowser.java(tp://null.michikusa.jp/misc/SimpleBrowser.java)を
eclipse上で実行したところコンパイルは正常に行われるのですが、実行段階で
java.lang.NoClassDefFoundError: Exception in thread "main" が表示されてしまいます。
ビルドパスの設定が間違っているのでしょうか。
"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
170ぴゅあ:2006/10/28(土) 17:51:38
このスレは偽物です。

本スレはこちら

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50

171デフォルトの名無しさん:2006/10/28(土) 18:04:08
>>167
if(st.indexOf("TEST")!=-1)
172デフォルトの名無しさん:2006/10/28(土) 18:10:21
>>160
「ポリモフィズム」とか「多態性」とかでググってみると良いかも。
DIコンテナのサンプルコード読むのもお勧め。

ここで抽象的な話しても、多分理解してもらうのは難しい。
実用アプリやフレームワーク設計とか始めると
分かってくる(=実感する)と思う。

>多重継承できないJAVAには必要とかかれてました
破り捨てた方が良い。
173デフォルトの名無しさん:2006/10/28(土) 18:14:28
>>167
String のコンストラクタに、
バイト数指定できるやつがあるから
それを使ってみたらどうでしょう。

st = new String(buff, 0, n);
174デフォルトの名無しさん:2006/10/28(土) 18:22:17
>>168
エラーを改変してコピペしてませんか?
175デフォルトの名無しさん:2006/10/28(土) 18:31:20
 String st="か";
 byte[] byt=st.getBytes();
 System.out.println(byt);
 System.out.println(st.getBytes());

 出力結果
 [B@145d068
 [B@758fc9
このコードではなぜか異なる結果が出てしまいます。
Stringの方の出力結果が、bytの出力と同じ結果を返すようにするにはどうすればよいでしょうか?
どうかよろしくお願いします。
176デフォルトの名無しさん:2006/10/28(土) 18:34:16
JAVAのコンパイル(javac)に10秒以上かかるのですが、
「ClassPath設定しなをせば?」といわれたのですが
どうやるんでしょうか?あと、yahooなどのゲームができない
(「JAVA 仮想マシン」をダウンロードというテロップが出て、
ダウンロードを押すと、No Java Installedというページに逝き、
画面の左上に赤い×がついてしまいます。
一応、JAVAも実行できる環境だし、インターネットオプション見ても
「JAVA SUN」に1項目、「マイクロソフト VM」に3項目、JAVA関連にチェックついてます。
JAVA SUNをインストールしているとJAVA VMはインストールできないんでしょうかねぇ・・
ほとんど知識ないまま質問してしまいましたが、JAVAのコンパイル速度と、ヤフーゲームなどを
できるように直したいです。宜しくお願いします。
177ぴゅあ:2006/10/28(土) 18:35:07
>>154
Nortonという言葉が何度か出てきているのが目に止まりましたけど
絶対にとは言えないけど、問題は他にあって、
Nortonの影響の可能性は低いんじゃないかと思ったりします
早めに確認しておいたりする方が安心?できたりするのかも知れませんけど

でも、Nortonがあると動かせないということになったりすると
今時、困ったもんですよねぇ。。。
178ぴゅあ:2006/10/28(土) 18:37:21
>>157,>>159
>int[] クラスです。
というのはあまりにも・・・(配列オブジェクトとか?)
と思ったのでザックリ読んでみたのですけど

int型の"配列型のオブジェクト"という扱いであって、
明示的なクラスというのはなさそうに思えたりします

lengthはフィールドということになっています
が、配列は言語要素の深く関わる実装で、
ArrayクラスのようなAPIリファレンスに現れるのとは違って
表に見えない形のクラスとして存在しているんじゃないかと思います
(無理矢理当て嵌めるならObjectクラスから継承された無名クラスのようなもの?)
なのでArrayクラスとかでもないし、APIリファレンスにも出てこない

言語仕様の"10.配列"辺りを読んでみるといいんじゃないでしょうか
179デフォルトの名無しさん:2006/10/28(土) 18:49:42
180デフォルトの名無しさん:2006/10/28(土) 18:52:48
10日で覚えるJAVAの本を買ったのですが、理解できないところあるので、ご示唆ください。
public〜略
public static〜略

String myStr = new String("サンプル”)
System.out.println(myStr);
以下略
実行結果はサンプルを表示するのはわかるのですが、
Stringは文字列を扱うということは分かるのですが、 myStrと newStringの意味がわかりません。

myとnewの使い方の意味をおしえてください。
181デフォルトの名無しさん:2006/10/28(土) 18:56:32
JAVAアプレットにBMP形式の画像ファイルの読み込み,
表示をさせたいのですが、表示させることができません。
どうすればよろしいのでしょうか?

182デフォルトの名無しさん:2006/10/28(土) 19:00:05
>>180
変数の概念をわかっていないようです

これはわかる?
int myInt = 0;
数字型を扱うmyIntという変数に0を入れる

上と同じこと
String myStr = new String("サンプル");
文字列を扱う変数myStrに サンプル という文字列を入れる

myは命令ではなく変数名として名づけただけ、無くてもいい
183デフォルトの名無しさん:2006/10/28(土) 19:01:24
184デフォルトの名無しさん:2006/10/28(土) 19:02:59
あらま、釣りでしたか
185ぴゅあ:2006/10/28(土) 19:20:52
兄弟スレ

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
186デフォルトの名無しさん:2006/10/28(土) 19:25:07
>>183
その調子でどんどん検索しろ
ほとんどの質問が昔のコピペだ。
187ぴゅあ:2006/10/28(土) 20:30:56
>>167
既にいくつか挙がっているし、
書くまでもないかもですけど

>System.out.println(st);
で見る前に
>int n = is.read(buff);
の後でbuffとnがどうなっているか調べて
stに期待通りのStringとして得られるようにする
(取り敢えずstのlengthを採ってみると4ではないことが判ったりするのかも)

そうすれば
>if(st.equals("TEST"))
>処理
とかも問題なく処理できるようになると思いますけど

isって恐らくInputStreamとか(InputStreamReaderとか)だったりするのだろうと思いますけど
readするものがBufferedReaderで受けられるものとか判っているのだとすれば
BufferedReader#readLineメソッドとか使うと楽になったりするかも?
と思ったりしますけどね
188ぴゅあ:2006/10/28(土) 20:39:01
兄弟スレ

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
189ぴゅあ:2006/10/28(土) 20:43:51
>>158
>識者の方
ではないですが、Mayaaって
http://mayaa.seasar.org
のこと?

MayaaとStrutsの共存とか
なんかぶつかったりするものとか、
適用/機能する順番とかあったりするんだろうか?
とも思ってしまいましたけど
サンプルページに"Mayaa単独版"とか"Struts利用版"とか出てるみたいなので
もしまだ見てないのだとすれば参考にできるものもあったりするのかも?
190デフォルトの名無しさん:2006/10/28(土) 20:47:41
その mayaa なら seasar スレの方が良くね?
あのスレは一見すると煽り合いばかりだが
まともな質問には丁寧な回答が返って来る。
191ぴゅあ:2006/10/28(土) 20:48:51
>>160
まずはインターフェイスについてググッてみるとかして
色んな人の解説(1つだけではなく色々な)を読んでみるといいかと思います
大抵、インターフェイスについての話と共に
抽象クラスとの使い分けとかの話も出てくるんじゃないかと思います
192ぴゅあ:2006/10/28(土) 21:04:08
>>166
特に問題ないんじゃないでしょうか

その後に続くコードを(総合的にはプログラム全体として)
シッカリ考えて作ってあるかだと思いますよ
193ぴゅあ:2006/10/28(土) 21:10:44
それから兄弟スレ

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50

194デフォルトの名無しさん:2006/10/28(土) 21:39:23
ちょっとjavaプログラミングでわからないことがあるので教えてください。
スレ違いならごめんなさい。

Stringbuffer ques1 = new Stringbuffer(100);
Stringbuffer ques2 = new Stringbuffer(100);

ques1.append("hoge");
ques2.append("choko");

for(i=1;i<3;i++)
System.out.println(ques + "i");

とやれば、hogeとhageガ表示されると思いましたが、このままだと
ただの文字列なので、ques1 ques2と表示されるだけです。
なにか、このような方法でques1と2の内容を表示する方法ないですか?
195194:2006/10/28(土) 21:40:45
ごめん、hogeとchokoガ表示されると思いましたが、

の間違いです。
196デフォルトの名無しさん:2006/10/28(土) 21:42:02
"hoge hage"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど

197デフォルトの名無しさん:2006/10/28(土) 21:51:21
>>194
StringBuffer[] ques ={
 new StringBuffer(100),
 new StringBuffer(100)
};
ques[0].append("hoge");
ques[1].append("choko");
for(int i = 0; i < ques.length; i++){
 System.out.println(ques[i]);
}
198ぴゅあ:2006/10/28(土) 21:52:38
Stringbufferとforの共存とか
なんかぶつかったりするものとか、
適用/機能する順番とかあったりするんだろうか?
とも思ってしまいましたけど
199デフォルトの名無しさん:2006/10/28(土) 21:56:54
>>194
Perl の eval のようなことをしたいって話ですよね?
その手の動的に変数を組み立て・・・と言うことであれば
リフレクション(reflection)APIを使用する必要があります。

ttp://java.sun.com/docs/books/tutorial/reflect/object/get.html
この例だと height の値をリフレクション経由で名前(=文字列)で取得してます。
200デフォルトの名無しさん:2006/10/28(土) 21:58:17
>>199
ques1 と ques2 がローカル変数なら、リフレクション使っても無駄。
201158:2006/10/28(土) 21:58:41
>>164
そうですね、MLにも投げてみます!

>>189
Struts + Mayaa のサンプルは全て舐めてしまいました(^^;
私の質問させていただいたような使い方はありませんでした・・・。


>>190
確かに・・・。



とりあえず、MLへの参加と、seasarスレの訪問を試みます。
みなさん、ありがとうございます。
202ぴゅあ:2006/10/28(土) 22:02:59
>>194
まずはStringbufferについてググッてみるとかして
色んな人の解説(1つだけではなく色々な)を読んでみるといいかと思います
大抵、Stringbufferについての話と共に
for文との使い分けとかの話も出てくるんじゃないかと思います
203デフォルトの名無しさん:2006/10/28(土) 22:04:54
× Stringbuffer
○ StringBuffer
204ぴゅあ:2006/10/28(土) 22:05:11
>>197
ques というのはあまりにも・・・(配列オブジェクトとか?)
と思ったのでザックリ読んでみたのですけど

StringBuffer型の"配列型のオブジェクト"という扱いであって、
明示的なクラスというのはなさそうに思えたりします

lengthはフィールドということになっています
が、配列は言語要素の深く関わる実装で、
ArrayクラスのようなAPIリファレンスに現れるのとは違って
表に見えない形のクラスとして存在しているんじゃないかと思います
(無理矢理当て嵌めるならObjectクラスから継承された無名クラスのようなもの?)
なのでArrayクラスとかでもないし、APIリファレンスにも出てこない

言語仕様の"10.配列"辺りを読んでみるといいんじゃないでしょうか
205デフォルトの名無しさん:2006/10/28(土) 22:11:02
ぴゅあ様、配列すら理解してないのか……
206デフォルトの名無しさん:2006/10/28(土) 22:14:04
そういや >>194も、ぴゅあ様も Stringbuffer って書いてるな……
207ぴゅあ:2006/10/28(土) 22:16:35
>>206
そんな仕様もないのは放っときゃあいいと思うけど
肝心の質問の方は解決できましたか?
208158:2006/10/28(土) 22:22:16
ttp://java-house.jp/ml/archive/j-h-b/023392.html

ここらへん参考になりますか・・・?
209デフォルトの名無しさん:2006/10/28(土) 22:24:05
>>208
ぴゅあ様の ご参考になってくれれば良いね。
210デフォルトの名無しさん:2006/10/29(日) 03:23:07
エレベータっぽいアプリを作ってみようと思っています。
今ボタンを押されたときの処理を作っているのですが、
mainメソッドのbuttonControl.button();の部分でIOExceptionが出てうまくいきません。
IOExceptionについて調べたのですが解決できず・・・・どなたか教えてください。

import java.io.*;
class ButtonControl {
void button()
{
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
System.out.println("エレベータへようこそ!行きたいフロアのボタンを押してください。");
String charfloor = br.readLine();
int floor =Integer.parseInt(charfloor);
System.out.println("あなたは" + floor + "階に行くボタンを押しました");
}

public static void main(String[] args)
{
  ButtonControl buttonControl = new ButtonControl();
  buttonControl.button();
}

}
211ぴゅあ:2006/10/29(日) 03:28:48
もしかしてエレベータっぽいアプリとか?
"IOException"とかでググってみれば色々出てくると思うけど
212デフォルトの名無しさん:2006/10/29(日) 03:29:12
あ、ちなみにmainメソッドは別のクラスにあります。
テストさせるために移しました。
213デフォルトの名無しさん:2006/10/29(日) 03:29:58
>>211
そうです。もうちょっと調べてきます。悔しい
214ぴゅあ:2006/10/29(日) 03:35:37
こちらで質問してもらえば解答できると思いますよ

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
215ぴゅあ:2006/10/29(日) 03:37:17
>>210,>>212
そのコードでIOExceptionが出ているのですか?
例外発生時のスタックトレースを提示して欲しいですね
(発生箇所によっては入力待ちまで進んでいてどういう入力をしたかとか)
216デフォルトの名無しさん:2006/10/29(日) 03:48:27
>>215
回答ありがとうございます。
Eclipseで作業していたのですが、コマンドプロンプトのjavacでコンパイルしてみたら

ButtonControl.java:10: 例外 java.io.IOException は報告されません。スローするには
キャッチまたは、スロー宣言をしなければなりません。
String charfloor = br.readLine();

こんなんがでました。。
217ぴゅあ:2006/10/29(日) 03:49:20
コンパイラが古いのかも?
"IOException"とかでググってみれば色々出てくると思うけど
218ぴゅあ:2006/10/29(日) 03:50:29
ちょっと考え直しますね
219デフォルトの名無しさん:2006/10/29(日) 03:52:01
MySQL5.0 + Connector/J 3.0 + Java5.0を使用しています。

レコード数2000万件近くのテーブルがあり、
ここから1レコードずつレコードを読んで処理するプログラムを書きたいのですが、

Statement state = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = state.executeQuery("select ArticleID, Content from Articles where BoardID=8");

このexecuteQuery()で、OutOfMemoryErrorになります。
どう書けば良いでしょうか?
220デフォルトの名無しさん:2006/10/29(日) 03:54:07
"レコード数 2000万件近く"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど

221デフォルトの名無しさん:2006/10/29(日) 03:55:10
>>217
ありがとうございます。コンパイラが古いのかなぁ。
一応サンマイクロのHPで一週間以内にDLしたやつです。

IOExceptionについてまた今から調べてきます。
ありがとうございました。
222ぴゅあ:2006/10/29(日) 03:55:50
>>221
いまググってるのでもうすこし待ってくださいね
223デフォルトの名無しさん:2006/10/29(日) 03:58:47
プログラミング歴一ヶ月未満で、Javaの勉強は始めて2週間なのですが
ボウリングのスコアカウントプログラムを作りたいのですが
どう作ったらいいかさっぱりわからず困ってます・・・。
ご指導していただけるとありがたいのですが、お願いします。
224221:2006/10/29(日) 04:01:47
>>222
親切にどうもありがとうございます。
プログラミング暦一週間なのであまり詳しいことはわからないのですが、
普通はこのコードならすんなり通るのですか?

通らないからエラーがでてると言われればそれまでですが・・・
225デフォルトの名無しさん:2006/10/29(日) 04:06:15
>>223
"プログラミング歴 一ヶ月未満"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど
226ぴゅあ:2006/10/29(日) 04:09:56
>>224
これくらいググればすぐですよ。
http://www.nextindex.net/java/throwstry.html
227デフォルトの名無しさん:2006/10/29(日) 04:10:14
あのうググッてみるとかググッてるとかどういう意味なんでしょう。
228223:2006/10/29(日) 04:11:17
色々ググッては見たのですが、なかなか見付からなくて…。
229221:2006/10/29(日) 04:16:02
>>226
ありがとうございました。なんとなくできそうな気がしてきました。

>>228
いやみつかりました。catchとtryっていうのも一応知ってました。
もちろんthrows IOExceptionも試しました。

スレ汚してすいませんでした。
230ぴゅあ:2006/10/29(日) 04:20:28
>>216
なるほど
コンパイルエラーであってIOExceptionが起こっている(実行時)わけではないですね
例外に対する処置をちゃんとしろって意味です
(>キャッチまたは、スロー宣言をしなければなりません。)

Eclipseで書いているときに(テスト用に)
エラーとかで通知されていませんでしたか?
通知させないようにできるのかどうかはやってないので判らないけど
231ぴゅあ:2006/10/29(日) 04:20:34
>>229
これからはこちらで質問してくださいね。

【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50

232ぴゅあ:2006/10/29(日) 04:31:06
>>224(=>>210?)
例外について理解してみれば言い訳ですけど、
1週間ですか。。。
その間にどれくらい飲み込めたかによりますけど
すんなり行くものではないと思ってよいと思います

例外処理について勉強してみて
まずは例外周りの書き方からだけでも少しずつ理解してみてください
233ぴゅあ:2006/10/29(日) 04:32:58
て・・・解決できそうなまで行けたのか
234221:2006/10/29(日) 04:37:19
>>230
わかりました。throws IOEだとうまくいかないのでcatch&tryでやってみます。
いまいちeclipseには慣れていなかったのですが、よくみたらコードの横の辺りに
バツマークみたいのがついてたりしました。これがエラーですね。(ポインタを当てたらエラー内容がでました)

ちなみに・・・・このコードにする前は正常に動いていました。
クラスなのでボタンはボタン。という風に部品ごとに分けようと思い
216の処理に書き直していたらエラーがでるようになりました。

import java.io.*;
import java.util.*;
public class ButtonControl
{
public static void main(String args[]) throws IOException
{

InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
System.out.println("エレベーターへようこそ!行きたいフロアのボタンを押してください。");
String charfloor = br.readLine();
int floor =Integer.parseInt(charfloor);
・・・・・・・・・・
235210=221:2006/10/29(日) 04:43:37
上の処理ではコンパイルが通り実行できてました。

>>232
そうですね・・・早く自分で何かを作ってみたいという気持ちばかりが前に行っていたので
ちょっと本やらなにやらを読み直したほうがよさそうですね・・・
210と234をみくらべて見ることも重要と思いさっきから眺めております。

>>233
正直catch&tryやthrowsの存在はしっていましたが、まだ自分には
何かが抜けているみたいなので解決するには至らないと思います。

出直したほうがよさそうですね。
みなさん、夜遅くまでご迷惑をかけました。ありがとうございました!!
236ぴゅあ:2006/10/29(日) 04:43:43
>>223
色んなサンプルコードを実際にコンパイルして動かしてみたり
コードを理解し、色々手を加えて行けるようになるまで繰り返す
(当然、簡単なサンプルから)

どう作ればいいかというのをイメージできるようになるまで
そうして作り方というものを学んで行くしかないかなぁ

作りたいものに似てそうなものがあれば
流用するとかもあるだろうけど、
その判断もまだ難しいでしょ?
237デフォルトの名無しさん:2006/10/29(日) 04:44:18
>>234
「クラスなので」という説明がよく分かりません。
238223:2006/10/29(日) 04:54:48
一応、例外・入出力処理までは勉強して、クラスや継承、インターフェース
までは理解できたのですが、スコアカウントの計算というか、処理がイメージ
できないんです。

似たものを参考にしたりするのも勉強になるとは聞いたのですが
似たもの自体が見つけられなくて…。
239デフォルトの名無しさん:2006/10/29(日) 04:56:14
>>238
まずは処理の流れを
紙に書いてみる
数字付き箇条書きで
そこからだ。
240210=221:2006/10/29(日) 05:39:21
なかなかコンパイルが通らなくてずっと悩んでさっきも試したのに
うまくいかなくて・・・でもthrows IOExceptionつけたらうまくいって・・・・
さっきも試したのに・・・?何故??結局根本的な原因がわからないまま解決してしまった。

import java.io.*;
public class ButtonControl
{
       void button() throws IOException{
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
System.out.println("エレベータへようこそ!行きたいフロアのボタンを押してください。");
String charfloor = br.readLine();
int floor =Integer.parseInt(charfloor);
System.out.println("あなたは" + floor + "階に行くボタンを押しました");
}


public static void main(String[] args) throws IOException{
ButtonControl buttonControl = new ButtonControl();
buttonControl.button();

}}
241デフォルトの名無しさん:2006/10/29(日) 05:45:49
>>240
根本的な原因は
>>240がException処理について勉強していないこと
まずはeclipseのエラーの意味が分かる程度には勉強しようや
242デフォルトの名無しさん:2006/10/29(日) 08:05:27
>177
ピュアさんレスありがとうございます。
Nortonを疑ったのはまず他のアプリでも私のプログラムほどの頻度ではないが
そういう現象が現れたときがあったからです。例えばJBuilder やIE等。JBuilderが何で
Javaで純粋に書かれているのかC++で書かれているのか良く分かりませんがNorton
をインストールした後でこういう現象が起きたので疑ってみました。Javaのプログラムの実行に
少し干渉する可能性も外せないと思ったわけです。まぁインストールするまでに
出来上がっていたものは僅かだったのでなんとも言えないのですが・・・
とりあえず原因を徹底的に洗って見ます。いろいろありがとうございました。
243デフォルトの名無しさん:2006/10/29(日) 08:08:38
本当に初歩的な質問で申し訳ありません。
デフォルトでボタンに使われている色を抽出するにはどうしたらよいでしょうか?

ただこれはインスタンスを作って button.getColor();等の方法で以外のものを教えてください。

244243:2006/10/29(日) 09:27:01
>243
訂正です
ただこれはインスタンスを作って button.getColor();等の以外の方法を教えてください。
Systemではないけど取れたような記憶があるのですがググッても見つからないので
宜しくお願いします。
245デフォルトの名無しさん:2006/10/29(日) 10:49:48
ヤフれカス
246デフォルトの名無しさん:2006/10/29(日) 11:58:42
とりあえず何のbuttonでしょう・・・・
247デフォルトの名無しさん:2006/10/29(日) 12:07:28
>>210
Java の例外はチェックする例外(checked exception)と
チェックしない例外(unchecked exception)の2種類がある。

って話をどこかで聞いた?聞いてないなら勉強不足。
C# や C++ の例外処理とは似てるようでかなり違う。
IOException はチェックする例外。
248ぴゅあ:2006/10/29(日) 12:24:47
>>247
RuntimeExceptionとその他の事ですか?
しらない人はきちんと調べてからカキコしてくださいね。
249デフォルトの名無しさん:2006/10/29(日) 12:33:13
これ偽者の方か?
実際には Exception 以外にも Error があるから
この説明じゃ不足してるのは確かだな。
250デフォルトの名無しさん:2006/10/29(日) 13:37:31
Javaのジェネリクスって多重継承と何が違うの?
251ぴゅあ:2006/10/29(日) 13:43:53
>>249
>>248
>RuntimeExceptionとその他の事ですか?
とか、何を言おうとしているのか解らんですけど

>>247に対して"Errorがあるから"ということなら
検査/非検査について言おうとしているでしょうから
いいんじゃないかと
(ただ強いて言うなら>>210とは繋がりないような・・・)
252デフォルトの名無しさん:2006/10/29(日) 13:45:55
>>250
"Java 何が違うの?"とかでもググッてみるとか

色々組み合わせて探してみると
何か出てくるかも?というところですけど


253デフォルトの名無しさん:2006/10/29(日) 13:48:49
254デフォルトの名無しさん:2006/10/29(日) 13:49:10
>>252
何も出てこなかった。
255ぴゅあ:2006/10/29(日) 14:04:27
>>253
この辺りの物で十分じゃないかと?
http://www.nextindex.net/java/exception.html
256デフォルトの名無しさん:2006/10/29(日) 14:19:32
ぴゅあ様、RuntimeExceptionすら理解してなかったのか……
257デフォルトの名無しさん:2006/10/29(日) 14:33:31
ん〜
ジェネリクスって動的な型システムにしか見えないなぁ。
これのどこがいいんだろう?
不思議だ。
258ぴゅあ:2006/10/29(日) 15:10:39
>>250
全然別物じゃないんでしょうか
ジェネリクスという言葉では理解してないけど
型保証を行うってことだと思いますよ
(言葉として理解してないのでそれが全てかどうかは判らないですけど)

なので、複数の型が混在し得るからと言ってまさかやったりはしないと思うけど
List<Object>とかしてしまうようだと意味なしよね?
259デフォルトの名無しさん:2006/10/29(日) 15:19:34
>>258
じゃぁやっぱりいいものじゃないんだね。
C++のテンプレートみたいなのだったらいいのにねぇ。
260デフォルトの名無しさん:2006/10/29(日) 15:23:22
>>250
全然違う。
261ぴゅあ:2006/10/29(日) 15:40:30
>>259
ないよりはいいだろうと思いますよ
("C++のテンプレートより優れている"とか言ってたりするみたいなところとか
具体的なところまでは知りえてないですけど)

型保証で言えば、例えばList<Integer>とすればInteger(或いはIntegerを継承したクラス)しか
受け入れてくれなくなるし
厳密に区別したきゃ自前でクラスやインターフェイスを作ればいいし
(>>10からの話の流れでもちょっと気になったりしてたけど)

ListとしたらIntegerでもStringでも受け入れてしまうから(List<Object>と同様)
使ってやれば最低限でもアホなミスは防げたりするのだろうし
262158:2006/10/29(日) 15:41:19
genericsの是非はここで散々・・・。
読んで役にたつかはわかりませんが・・・

この手の話が好きでしたらどうぞ・・・
http://makimo.to/2ch/pc5_tech/1055/1055519583.html
263デフォルトの名無しさん:2006/10/29(日) 15:49:59
streamを使ってファイルから文字列を読み込んでいるのですが
a.txtとb.txtの2種類のファイルを読み込む場合
streamのオブジェクトを2つ使うのと、1つを使いまわすのでは何か違いがありますか?
264デフォルトの名無しさん:2006/10/29(日) 16:01:28
JavaのジェネリクスとC++のテンプレートなら比較議論が出来る。
でも多重継承とじゃ無理。
265デフォルトの名無しさん:2006/10/29(日) 16:05:46
>>261
削除依頼だしとけよ
【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
266デフォルトの名無しさん:2006/10/29(日) 16:09:13
>>265
そっちが本スレですよ(^^)
267デフォルトの名無しさん:2006/10/29(日) 17:55:28
実際にどういう処理を行っているか知りたいから、流れ図書いてきてと言われたんだけど
流れ図ってどこまで詳しく書いたらいいんだろう?
268デフォルトの名無しさん:2006/10/29(日) 18:02:45
欲望のおもむくままに
269デフォルトの名無しさん:2006/10/29(日) 18:40:38
>243-244
恐らくシステムカラーで使っているやつでよいのでしょうか?
でしたら、UIManagerクラスのgetColorを使ってみてください。
そしてそこに入るキーはSystemColorクラスで定義されているキーです。
恐らくボタンであれば、getColorで使えるキーは"activeCaption"でいいかと思います。
後はDocを見るかまたは、ソースが見れる状態であればソースをみればいいかと思います。
270デフォルトの名無しさん:2006/10/30(月) 11:06:02
beansでセッションを扱うクラスを実装することはできないのでしょうか?
値と値の名前を引数として、セッションにその引数を格納するモジュールをbeansとして作っているのですが
そのモジュールをservletにて呼び出して使用すると、servletがどうしてもコンパイルを通ってくれません
271デフォルトの名無しさん:2006/10/30(月) 11:29:37
質問です。
パネルAの中にパネルBを配置し、パネルB内にボタンを配置しています。
そしてパネルAにはキーリスナー、ボタンにはアクションリスナーを登録しています。

その状態でパネルBのボタンを押すと、パネルAのキーイベントが発生しなくなるという問題が発生します。
その後またパネルをクリックすればキーイベントを受け付けるのですが、常にパネルAにキーイベントを発生させる方法はありませんか?
272デフォルトの名無しさん:2006/10/30(月) 11:32:27
ボタンBをクリックした時点でそのボタンにフォーカスが移ってるから、Aにキーイベントは発生しない。
AB両パネルの親なり、上の階層でキーイベントを受ける。
273デフォルトの名無しさん:2006/10/30(月) 11:54:28
>>272
ありがとうございます。
ボタンが押された後に強制的にAにフォーカスを合わせる方法ってありませんか?
setFocusableメソッドがそれかと思って使ってみたのですが、違うらしくうまくいきません。
274デフォルトの名無しさん:2006/10/30(月) 12:52:00
setFocusable() だと、フォーカスを移すんじゃなくて、フォーカス可能な状態をセットするだけだからね。
やるんなら、ボタンのアクションの最後で パネルA.requestFocusInWindow() だな。

詳細は、この中のFocusSubsystemに関するリンクを嫁
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/FocusManager.html
275デフォルトの名無しさん:2006/10/30(月) 15:50:47
>>274
無事に解決しました!
ありがとうございました!!
276デフォルトの名無しさん:2006/10/30(月) 16:25:06
javaを使って「リンク」または「リンクとその説明」をランダムに表示させるようにしたいのですが、
分かりやすく説明してあるおすすめのサイトはないでしょうか?
よろしくお願い致します。
277デフォルトの名無しさん:2006/10/30(月) 16:33:04
>>276です。すみません解決しました。
278デフォルトの名無しさん:2006/10/30(月) 17:37:03
JavaでP2P通信したいんだけどできる?
ソケットとかで工夫すればできるかな
279デフォルトの名無しさん:2006/10/30(月) 17:46:41
class menseki {
public String[] msgs() {

String[] strs = {"-2","-3","-4"};
return strs;
}
}

class Q6 {
public static void main (String args []) {

menseki obj = new menseki();
String[] coms = obj.msgs();

int a;

a=((coms[0]+coms[1])*coms[2])/2;
//台形の面積の公式 台形の面積 = {(上底+下底)×高さ}÷2

System.out.println("上底は"+ coms[0] +"です\n下底は"+ coms[1] +"です\n高さは"+ coms[2] +"です\n台形の面積は"+ a +"です");
}
}

っという感じで組んだところ、このようなエラーが出ました
20:演算子 * はjava.lang.String,java.lang.Stringに適用できませんっとでました
これを解消するためにはどのうような感じで書き換えればいいですか?
280デフォルトの名無しさん:2006/10/30(月) 17:57:47
>>279
コンパイルエラー消したいだけなら
> a=((coms[0]+coms[1])*coms[2])/2;
a=((Integer.parseInt(coms[0])+Integer.parseInt(coms[1]))*Integer.parseInt(coms[2]))/2;
281279:2006/10/30(月) 18:03:57
>>280
お早い回答ありがとうございます
Integer.parseIntについては自分で調べてみます
ありがとうございました。これで最期の問題が解けました
282デフォルトの名無しさん:2006/10/30(月) 18:34:33
死んじゃうのか
283デフォルトの名無しさん:2006/10/30(月) 18:45:40
いい人でした…
284ぴゅあ:2006/10/30(月) 22:49:39
>>279がやってみてれば判ると思うけど
>>280
Integer#parseInt()じゃ困るでしょう(たぶん"/2"で)
まぁコンパイルエラーを消すだけと言ってるしね
そこは>>279に頑張ってもらうとして

>>281
>これで最期の問題が解けました
たぶんまだ解けたとは言えないんじゃないだろうかと思う。。。

>String[] strs = {"-2","-3","-4"};
というのもなんか…なんて言うのか…思ってしまうけど

(主となるクラスをpublicにしないとかいうのも最近流行りなのかな??)
285ぴゅあ:2006/10/30(月) 22:51:58
>>278
どんなことをなのか判らないですけど
たぶん工夫しなくても
ソケットとかを普通に使えばできるんじゃないだろうかと・・・
286279:2006/10/30(月) 23:08:05
>>284
今、がんばってる最中です
まだまだ勉強不足だという事がわかります( ´Д⊂ヽ

publicについてはそういう意識がありませんでした
これからはつけるようにします

>というのもなんか…なんて言うのか…思ってしまうけど
これについては意図がよくわかりません
向こう側からこういう指定があったので、こうしましたが
何か問題があるのでしょうか?

287デフォルトの名無しさん:2006/10/30(月) 23:16:10
>>286
普通こんな書き方しないようなぁってのが散見されるけど
課題のためのコードなんで、多分気にしないでガリガリやればいいよ。
288ぴゅあ:2006/10/30(月) 23:21:33
>>286
いえ・・・なんていうか
確か存在はしていたような気はしたりするんですけど(もう忘れてしまった)
負の長さで面積を求めるというのがなんとなく…
あったような気もしなくはないのですけど、
どうだったかな?と気になったというだけです

頑張ってください
"/2"に関する部分はそこから展開して行けば
答えも得られると思います

本当は実数を扱いたかったりするでしょうから
それにはどうすればいいかと考えていれば
尤も出題がそこまで求めてないものかも知れませんけど
それならってことでついでに考えてみようとか思っても損はないです
289279:2006/10/30(月) 23:24:30
>>288
何度もすいません
とにかくがんばってやってみます(`・ω・´)
290デフォルトの名無しさん:2006/10/30(月) 23:30:57
宿題スレで聞いたらこちらで質問しる
っと誘導されてきました

数値以外のものが入力されたら
「数値以外のものが入力されています」
というエラー文が出せるようにするにはどうすればいいですか?
自分自身で考えたりしましたが、全然検討がつきません
291ぴゅあ:2006/10/31(火) 00:15:50
>>290
>宿題スレ
ちらと覗いてみたけど
宿題だとしても宿題らしい聞き方をしてなかったからでは?

>自分自身で考えたりしましたが、全然検討がつきません
どんな風に考えてみたとかあるんでしょうか
或いは全然思い浮かばないとか。。。

前スレの
http://pc8.2ch.net/test/read.cgi/tech/1159700963/
631からの流れに似た話とかあったりするので
取り敢えず見てみて、それからまた質問してみてもいいのかも
292デフォルトの名無しさん:2006/10/31(火) 00:21:04
最近、EラーニングってWEBの教材使ってjavaを学んでいるのですが
解答とか晒されてるサイトとか在りませんかね?
全問正解しないと次ステップ進めない
ググったけど見当たらなかった
293デフォルトの名無しさん:2006/10/31(火) 00:43:41
javaスレで質問する前に、もう少し常識で考えてみるといい
294290:2006/10/31(火) 00:48:42
>>291

前スレの
>>635を参考にすればいいってことですよね?
args.lengthっというのは
変数argsが参照している配列の要素の個数をint型の値として返すって事
ですよね?この値が1か0で判断しろって事なのでしょうか?
295デフォルトの名無しさん:2006/10/31(火) 00:51:34
> 変数argsが参照している配列の要素の個数をint型の値として返すって事ですよね?

ここから、

> この値が1か0で判断しろって事なのでしょうか?

ここへ飛躍する思考が理解できん。
296ぴゅあ:2006/10/31(火) 01:14:54
>ここへ飛躍する思考が理解できん。
同じく…

>>294
>>635を参考にすればいいってことですよね?
そこの後半の話から少し展開しているので…
10個くらい先までくらいは見ておいた方がいいのかな
297デフォルトの名無しさん:2006/10/31(火) 01:40:14
最近、正直思うのは・・・勘の悪いヤツにJava覚えられると俺が困るだけなんじゃないか・・・ということ・・・
いや、まぁ教えてもいいが・・・Java関係に就職はさせないで・・・・

>>292
しかたない教えてやるよ
ttp://java.sun.com/
答えは全てこの中だ
298290:2006/10/31(火) 01:46:53
お騒がせしてすいません
前スレを参考にして「try、catch」を参考書を使って
調べたらなんとか自分の思っているプログラムができました。

ただ自分がやった場合は
args.lengthを使わなかったのですが
これはやっぱり一般的なやり方ではなかったのでしょうか?


299デフォルトの名無しさん:2006/10/31(火) 02:18:04
args.length を使う方法なんてないので安心してください。
300デフォルトの名無しさん:2006/10/31(火) 03:16:54
>>298
沢山書いていけば分かる。体で感じてくれ。
301デフォルトの名無しさん:2006/10/31(火) 09:03:21
>>297
転職をオススメする。
302デフォルトの名無しさん:2006/10/31(火) 11:03:36
>>298
「配列の長さを取得」と「入力が数値がどうか判断」になんの関連性もありません。
俺もできません。
もう少し基本的な事から考えて、順序だてて思考する事をオススメします。
303デフォルトの名無しさん:2006/10/31(火) 14:37:43
マウスリスナーで左クリックか右クリックどちらを押されたか判定ってできませんか??
マウスのボタンの数がプラットフォームによって異なるためできないと聞いたのですが。
304デフォルトの名無しさん:2006/10/31(火) 15:03:32
305デフォルトの名無しさん:2006/10/31(火) 17:19:32
Javaのバイトコードを詳しく解説したお勧めの本ってありませんか?
306デフォルトの名無しさん:2006/10/31(火) 17:39:43
>>305
Java仮想マシン仕様第二版
JAVA PRESS vol. 14 から連載してた「Java仮想マシン入門」

ぐらいか?
307デフォルトの名無しさん:2006/10/31(火) 18:52:07
もともと一つのプロジェクトで
test1.javaとtest2.javaを作っていて
test2はtest1にあるクラスをオーバーロードしてたのですが、
別々のディレクトリで保存することになりました。
こういう場合実行できなくなりますよね?
どうしたらよいのでしょうか。
現在実行環境にいないこともあって悩んでいます
308デフォルトの名無しさん:2006/10/31(火) 19:10:08
>>307
packageの概念とimport文によって解決できると思う。
あとはclasspathに注意するくらいかな。
309デフォルトの名無しさん:2006/10/31(火) 19:13:35
>>307
dクスです。
環境に戻り次第やってみます
310デフォルトの名無しさん:2006/10/31(火) 20:57:51
URLを与えて、取得したHTMLのhref属性のURLが相対なら絶対に置換えたいのですがどうすればできますか?
DOMでhref属性を取得するところまではできました。
311ぴゅあ:2006/10/31(火) 21:53:00
>>307
もしかするとそれはオーバーライド?
(>test2はtest1にあるクラスを…
というのも微妙に気になったりもしたりするけど。。。)

>別々のディレクトリで保存することになりました。
は、所謂パッケージが変わる(移動する)という意味なのかな?
或いはパッケージとかはなくて、単に複数のディレクトリに分かれるというだけなのか

例えば他の場所にライブラリとしてあるクラスとか継承できてますよね(APIとかも)
どっちにしても、移動に合わせて手を加えてやれば問題ない筈でしょう
(今、問題になりそうな例が浮かんで来ないから…だったりですけど。。。)

>現在実行環境にいないこともあって
実行環境と言われると運用環境とかテスト環境とか浮かんでしまうのですけど…
ちょこっとサンプルとか作って試してみる開発環境がないということ?
312デフォルトの名無しさん:2006/11/01(水) 01:28:36
JFrameとかでコンポーネントのインスタンス変数をまとめたクラスをつくって、
それをもちまわる(他のクラスのコンストラクタの引数にする)っていうのは普通かな。
いろんなところから、コンポーネントに対して内容の更新などができるように。

スレッドなんか走らせるときは、必ずそのクラスをもたせてstartさせる。

こういうのってなんかデザインパターン的に名前ついてる?
313デフォルトの名無しさん:2006/11/01(水) 01:58:00
グローバル変数を宣言してるのと大差なくなるよ。
それでも収拾がつくならご自由にどうぞ。
314デフォルトの名無しさん:2006/11/01(水) 04:18:14
>>312
ファクトリ、シングルトン
315デフォルトの名無しさん:2006/11/01(水) 07:30:18
>>312
コンポーネントが増えると、313の言うとおり収拾がつかなくなるからお勧めできない。
それよりも、コンポーネントの内容の更新をしたい状況をイベントとして定義して、
そのイベントを監視する側としてUI(で定義する無名クラス)を登録する方がいい。
いわゆるオブザーバパターン。

java.util.Observerとjava.util.Observableを使えば監視-被監視のモデルが簡単に実装できるけど、
インタフェースが気にくわないなら自分で定義してもいい。
自作する場合、AWTやSwingのXXXListenerインタフェースやaddXXXListener()メソッドが参考になる。

例を挙げてみよう。
データモデルHogeがあり、それを管理するHogeContainer、表示するHogeFrameがあるとする。
Hogeが別のUIで変更されたら、HogeFrameにも反映させたい。
そのときは、HogeFrameクラス側で、HogeContainerに対して以下のように実行する。
container.addHogeListener(new HogeListener(){
 public void hogeModified(Hoge hoge){
  fooText.setText(hoge.getFoo());
  barText.setText(hoge.getBar());
 }
}
316270:2006/11/01(水) 10:29:57
package beansの宣言を忘れてただけでした
スルーされる訳だ(´・ω・`)
317デフォルトの名無しさん:2006/11/01(水) 11:51:02
JavaAppletからJDBCでデータベースに接続しようとしています。
JavaAppletがあるサーバとデータベースのサーバが別マシン上にあります。

 サーバA:[ WEBサーバ(IIS)-ASP+JavaApplet ]
 サーバB:[ データベース (SQLServer 2000) ]

そのためだと思いますが
DB接続処理で「java.security.AccessControlException: access denied」が発生しています。
JavaAppletのセキュリティモデルで許可されてないというのはわかりました。

セキュリティポリシー設定で許可するようにできるというのを見つけたのですが、
この場合のセキュリティポリシーの設定というのはWEBサーバ側でしょうか?
それともJavaAppletを表示するユーザ(ブラウザ)の設定でしょうか?

そういった設定を説明するHPがあれば誘導をお願いします。
318デフォルトの名無しさん:2006/11/01(水) 13:17:37
クラス、メソッドをまたいでも「xxxx.yyyy」とせず
いわゆるグローバル変数のように、変数をそのままの形で使うことは可能ですか?
具体的には以下のようなプログラムを作りたいと思っています

クラスaaaaa {

int i;

main {

i = 0;
処理bbbbbの呼び出し
i 表示して値が増えていればOK

bbbbb {

i++;

}
}
}
319デフォルトの名無しさん:2006/11/01(水) 13:27:39
>>318
クラス変数なら
import static aaaaa.i;
としておけば単純名 i でアクセスできるようになるけど、インスタンス変数は無理。

> 具体的には以下のようなプログラムを作りたいと思っています
コンパイルが通るソースコードさらしてくれ。
全て aaaaa 内に見えるので 「クラス、メソッドをまたいでも「xxxx.yyyy」とせず」ってのが分からんし。
320デフォルトの名無しさん:2006/11/01(水) 13:30:22
>>317
セキュリティポリシー設定するならクライアント側ね。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/spec/security-specTOC.fm.html
アクセス権とセキュリティポリシーあたりとか。

あと、署名付きアプレット使うって手もある。
321317:2006/11/01(水) 13:49:11
>>320
クライアント側ということはブラウザでAppletを表示する端末ですね
提示いただいたURLを参照して勉強してみます。

クライアントへのセキュリティポリシーの設定がダメといわれたら、
署名付きアプレットの使用も考えてみます。
322デフォルトの名無しさん:2006/11/01(水) 13:49:36
>>319
実際にはもっと変数と配列が多いんですが
こういう感じにしたいと思ってます

import java.io.*;
public class aaaa {

int i = 1;

public static void main(String[] args)
throws Exception {

b1();
System.out.print(i);

public void bbbb() {

i++;

}
}
}
323デフォルトの名無しさん:2006/11/01(水) 13:52:36
ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28562
このプログラムなんですけど、実行したあとどのように入力操作したらいいのかわかりません;
324デフォルトの名無しさん:2006/11/01(水) 13:57:20
>>322
> int i = 1;
static int i = 1;

> public void bbbb() {
public static void bbbb(){
325デフォルトの名無しさん:2006/11/01(水) 14:18:30
JAVAでパチスロみたいなソフトを作ろうと考えてるのですが
まず何から勉強すればいいでしょうか?
ちなみにスキルは0です
326デフォルトの名無しさん:2006/11/01(水) 14:24:42
>>323
それ、リダイレクトかなんかでファイル入力させるんじゃない?

もしくは 0以上 255以下の数字を 100回入力。
327デフォルトの名無しさん:2006/11/01(水) 14:27:23
>>325
小学生レベルの算数と、中学生レベルの英語。
328デフォルトの名無しさん:2006/11/01(水) 14:48:59
>>326
数値打ち込む→リターン
の繰り返しじゃだめだったんですけど…;
329デフォルトの名無しさん:2006/11/01(水) 14:57:13
>>328
EOF 入力してないんじゃないの

unix とかだと ctrl + d で、
Windows のコマンドプロンプトだと ctrl + z だっけか?
330デフォルトの名無しさん:2006/11/01(水) 15:08:43
>>329
それだ!
ありがとうございます!
331デフォルトの名無しさん:2006/11/01(水) 16:11:08
Socketクラスを用いて、第一引数で指定されたホストの第三引数で指定されたポートへ、第二引数の文字列を送信するエコークライアントプログラムを作成できる人いませんか??
できる人いたらお願いします!!
332デフォルトの名無しさん:2006/11/01(水) 16:15:46
宿題だったら宿題スレへ。
そんな質問の仕方だと誰も答えてくれないだろうが。
333デフォルトの名無しさん:2006/11/01(水) 16:16:30
しかし引数の順序にはいささか興味を覚えた。
ホスト名 ポート番号 メッセージ
だよな、普通。

でも宿題スレ行けよ。
334デフォルトの名無しさん:2006/11/01(水) 18:13:57
じゃばげんごってなんぎょうぐらいのプログラムソース掛けるようになれば
ばしょしんしゃじゃなくなるの?
335317:2006/11/01(水) 19:01:57
>>320
セキュリティーポリシーの設定でなんとかなりそうです。
336デフォルトの名無しさん:2006/11/01(水) 19:19:37
java歴プログラム歴ともに一ヶ月未満で
クラスとかメソッドの使い方は分かってきたんですが
実際にプログラムを書くときにどんなふうに全体を設計していくか
というようなことがいまいち分かりません。

その辺のコツが身につく本ってあります?
337デフォルトの名無しさん:2006/11/01(水) 21:19:10
以下のコードをコンパイルしようとすると、
ERRのところでコンパイルエラーが出るのですがなぜですか?
OKのとこはとおります。
--foo.java
public class foo {
static class HogeMap extends HashMap<Integer,String> { }
public static void bar( AbstractMap<Integer,?> baz ) {
if( baz instanceof HogeMap ) System.err.println( "Da!" ); // ERR
}
public static void zot( Map<Integer,?> quux ) {
if( quux instanceof HogeMap ) System.err.println( "Ya!" ); // OK
}
public static void main( String args[] ) throws Exception {
bar( new HogeMap( ));
zot( new HogeMap( ));
}
}
--
338デフォルトの名無しさん:2006/11/01(水) 21:19:39
質問です。
ArrayListで、新規に追加する要素が
既にリスト内にある場合は追加しない、というようなメソッドはありませんか?

やはり毎回リスト内を全てチェックするしか方法はありませんかね。
339デフォルトの名無しさん:2006/11/01(水) 21:21:35
>338
順序関係なしならSet使ったほうがいいんで無いかい。
340ぴゅあ:2006/11/01(水) 21:55:50
>>338
>やはり毎回リスト内を全てチェックするしか方法はありませんかね。
の意味が「そんなコード自体を書きたくない」というようなことなら

APIリファレンスをもう一度よく見てみれば?

Listインターフェイスの説明には
# ユーザが重複する値を挿入しようとしたときに実行時の例外をスローすることにより、
# 重複する値を禁止するリストを実装する場合もありますが、
# このように使われることはほとんどありません。
とあったりするけど、"逆にやる"というのもありかもだけど
341デフォルトの名無しさん:2006/11/01(水) 23:34:25
>>315
>例を挙げてみよう。
>データモデルHogeがあり、それを管理するHogeContainer、表示するHogeFrameがあるとする。
>Hogeが別のUIで変更されたら、HogeFrameにも反映させたい。
ここまでの表現なら
interface HogeFrame{
 void done(int update_value)

として、
container.addHogeListener(HogeFrameImpl){
 observers.add(HogeFrameImpl);
}
とかってやるんじゃないのか?
342ぴゅあ:2006/11/01(水) 23:40:19
>>333
ポート番号は省略可で・・・
とかいうのを書き忘れたとか、
それくらいは自分でやれるとかいうところなのかも?

>>336
>java歴プログラム歴ともに一ヶ月未満で
>実際にプログラムを書くときにどんなふうに全体を設計していくか
>その辺のコツが身につく本
ないんじゃないでしょうか・・・
というか、それはある意味一夜漬けみたいなもの?ですよね?

大きなプログラムも小さな部品が集まって出来あがったもの
単品で大きなプログラムなんてそうそうお目に掛かれない…
というか1つの部品としてできているなら"全体をどう…"なんてないだろうし

コードが集まって小さなプログラム(部品)に
小さな部品が集まって、より大きなプログラムに

個々の小さなプログラムがどんなものかを理解する必要があるだろうし
沢山の部品を知る必要もあるだろうし

小さなプログラムから沢山作って理解し
どう組み合わせて行くのかを理解して行けば
徐々に大きなプログラムを作るのもどうすればいいのか
判るようになるんじゃないかと

小さかろうが、物凄く大きかろうが
"全体"と言っているものは、それぞれに必ずありますよね?
本を読んだり、聞いたりするだけでできたりするものではなくて
実際に沢山のプログラムを作って自身が"理解できていく"ことだと思いますよ
(プログラムを作ること以上に時間を惜しまず掛けるなら可能だったりはするだろうけど)
343デフォルトの名無しさん:2006/11/01(水) 23:53:41
>>336
こういう本はあんまりないんじゃないかな。偉い人や本が、物理の法則教えて
チミが理解したとしても自転車はのれないでしょ?言語も似た部分があるので、
本を探すより、ソースコード書きまくったほうがいいよ。
数当てゲームとか○×ゲームとか何か興味もてそうなもの書いていきな。
それで次はテトリス。。。とか問題を段階的に大きくしていくと、知らずに身に付いているはずだよ。

いろいろ覚えるのは大変だけど、がんがれ。
344デフォルトの名無しさん:2006/11/02(木) 00:04:32
>>342>>343
やはりプログラムは習うより慣れろなんですね。
大変参考になりました。
たくさんソースを書いて精進してみます。
345デフォルトの名無しさん:2006/11/02(木) 00:15:11
>>336
>>343と言われることが多く、だいたいそのとおりだけど、
文書化して知識を共有しようという試みはいくつかなされている。
お勧めはこれかな。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894711524/

ただ、始めて1ヶ月ということだし、それよりもEffective Javaの方を先に読んだ方がいいかもしれない。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714361/
設計の話ではないけど、今のレベルならこっちの方が得るものが大きいと思う。
346デフォルトの名無しさん:2006/11/02(木) 00:41:59
>>336
慣れるにしても、自分でコード書くばっかりで先人の知恵にふれておかないと、
独りよがりなバッドノウハウの固まりになる危険性があるから注意だよ。
本でなくても、Java SEのAPIとか、有名なオープンソースソフトのソースとか、いろいろ見ておくと役に立つ。
347デフォルトの名無しさん:2006/11/02(木) 00:42:14
>>345
二冊とも求めていたものに近いように思います。
明日本屋に行って手にとって眺めてみますね。
ありがとうございました。
348デフォルトの名無しさん:2006/11/02(木) 00:50:09
もっとうまい方法あると思うけど、思いつかないからこれで我慢
なバッドノウハウは経験しといた方が良い。
この経験がないとエレガントな方法がなんでエレガントなのか実感できないから。
349デフォルトの名無しさん:2006/11/02(木) 01:02:03
>>346
APIってソースも見られるんですか。
知りませんでした。

あとオープンソースで有名なものっていうと
たとえばどんなものがありますか?
350デフォルトの名無しさん:2006/11/02(木) 01:18:45
>>346
その辺は両輪だと思うぞ。

コード書かないで本とかソースを読んでばかりでも頭でっかちになりがち。
351デフォルトの名無しさん:2006/11/02(木) 01:22:57
マ板的な話題になりつつあるのは気のせいだよね。

>>349
インストールした先に src.zip ってないですかい?
352デフォルトの名無しさん:2006/11/02(木) 01:39:57
>>351
確かにありました。
こんな厖大なものが入っていたんですね。
これは勉強になりそうです。
ライブラリはこれを分かりやすく解説してくれているわけですか。
353ぴゅあ:2006/11/02(木) 07:43:26
>>352
javadocコマンドでソースにあるコメントとかを
抽出して作られたのがAPIリファレンス

悪い例も見とかないと何が良い例なのか判らないでしょうね
尤もそれは後の方がいいんだろうし、望むならだろうけど
所詮良いか悪いかは自分が判断することだし
354デフォルトの名無しさん:2006/11/02(木) 10:38:50
xxx/65535のような65535分率のランダムを生成するにはどんなプログラム組めばいいんでしょうか?
MathクラスのRandomメソッドを使うんだと思うのですがイマイチよくわからないので教えていただけないでしょうか?
355デフォルトの名無しさん:2006/11/02(木) 10:46:47
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Random.html#nextInt(int)
このメソッドを引数 65536で呼び出せば良いのでは?
356デフォルトの名無しさん:2006/11/02(木) 10:47:08
nextInt
357デフォルトの名無しさん:2006/11/02(木) 10:47:59
被った orz
358デフォルトの名無しさん:2006/11/02(木) 13:12:58
double n=3.1415;
System.out.println(n);
int a;
a=(int)(n);
n=n-a;
System.out.println(n);

こうすると出力結果は一行目が3.1415、二行目が0.14150000000000018
となるのですが最後の「18」は何が起きたのですか?
359デフォルトの名無しさん:2006/11/02(木) 13:28:17
浮動小数点に誤差は付き物
doubleを使う時は気を付けよう

あと、Math.PI と言う物もあるから
360デフォルトの名無しさん:2006/11/02(木) 15:36:06
質問です。
JButtonまたはButtonで押されたという情報は拾ってこれるのですが
ボタンが離されたという情報を拾ってくる方法ってありますか?
361デフォルトの名無しさん:2006/11/02(木) 15:43:31
押されたという情報=マウスボタンが離されたとう情報
じゃまいか?
362デフォルトの名無しさん:2006/11/02(木) 16:12:47
ボタンを押す(actionPerformed) = ボタン上でマウスボタンを押す(pressed) + 同一のボタン上で離す (released)
だな。 (ソース見たわけじゃないが、動作としてはこうなる)
ActionListener#actionPerformedの時点でボタンが離されていると思ってよい。
押しっぱなしとかの状態が知りたきゃ、ボタンに限定した概念ではない。 MouseListenerを見てみろ。
363デフォルトの名無しさん:2006/11/02(木) 16:21:45
ServerSocket ss = new ServerSocket(****);

これで****番目のポートを開けるみたいなんですが
これって開けっ放しにしてもセキュリティ的に大丈夫なんですか?
364デフォルトの名無しさん:2006/11/02(木) 16:31:17
>>363
セキュリティってなんだか分かって言ってる?
365デフォルトの名無しさん:2006/11/02(木) 16:47:32
>>363
そのServerSocketで何かをするサーバプログラムの出来しだい。
たとえば、予期しないパケットが来たら例外で落ちるようだとDoS脆弱
性があると言える。
366デフォルトの名無しさん:2006/11/02(木) 16:57:11
>>364>>365
>予期しないパケットが来たら例外で落ちるようだとDoS脆弱性がある
予期しないパケットが北場合の例外は作ってませんが、作らないと危ないですか?

ちなみに
ServerSocket ss = new ServerSocket(****);
で空けて置いて

もう一個のプログラムで
soc = new Socket("localhost",****)

っていう風に繋げて文字列を送ったり、返したりさせてみようと思ったんですが
この程度ならセキュリティも何もないんですかね?

367デフォルトの名無しさん:2006/11/02(木) 17:09:21
とんでもなく長い文字列が送られたらどうなるよ
368デフォルトの名無しさん:2006/11/02(木) 18:46:57
>>366
> 文字列を送ったり、返したり

本当にそれだけだったら、セキュリティを考える必要はない。プログラ
ムが止まっても悪影響がないんだったら、DoS攻撃も関係ない。

受け取った文字列を使ってデータベースをゴニョゴニョするとか、コマ
ンドを実行するとか、そういう処理をするんならそれなりに考えること
がある。
369ぴゅあ:2006/11/02(木) 19:57:38
>>366
>>166の話と同じ

ところで…

書いてある範囲に限定した話で
>もう一個のプログラムで
>soc = new Socket("localhost",****)
って関係ないから・・・

>この程度ならセキュリティも何もないんですかね?
がどっちの意味を指して言っているのか判らないけど…
・セキュリティ度外視状態
・セキュリティ無関係状態

あとはレスしてくれた人たちのを理解すればいいだろうから省略
370ぴゅあ:2006/11/02(木) 20:02:32
>>360
APIリファレンスでマウス周りのクラスを一通り見てみるつもりでも見れば
きちんと説明されてるみたいですよ
(>>362が解説してくれたところまでもが)
371デフォルトの名無しさん:2006/11/02(木) 20:38:05
最近Javaを勉強しはじめて、C/C++の知識があったので
基本データ型以外の変数は全て参照型ということで納得していたのですが、
String a = "aaa";
String b = "aaa";
でa==bがtrueになったり、
b = a.substring(1);
だとa==bがfalseで
b = a.substring(0);
だとa==bがtrueだったりするのが不自然に思えました。
これは書き換えを行わないという前提のStringクラスだけの特別な仕様で
一つの文字列につき一つのStringインスタンスしか作らないような仕組みになってるんですか?
372デフォルトの名無しさん:2006/11/02(木) 20:52:07
>>371
Yes.
だだしnew String("aaa")すると新しくStringが生成される
373371:2006/11/02(木) 21:22:46
試してみたら確かにそうなりました。ありがとうございます。
374ぴゅあ:2006/11/02(木) 21:39:52
>>373
でもまだ微妙かも?

"=="は文字列"aaa"を見てるんじゃないよ
というのとかをまず理解できた方がいいんじゃないかと思う
(>>371に対しては長くなったので割愛しました@色々やれば色々と判ってくると思うし)
375デフォルトの名無しさん:2006/11/02(木) 21:50:47
iアプリでゲームを作っているのですが
質問なのですが、DoJa 4.0以降でAACもしくはPCMは再生できるのでしょうか。
ADPCMもDoJa 4.0世代での対応周波数が分からないので…。
よろしくお願いします。
376ぴゅあ:2006/11/02(木) 22:04:48
>>373
あ いや…
Stringオブジェクトについて見ようとしていたのかも知れないし
"aaa"の方かな。。。

結局はStringと"=="の話に到達してそうな気もするけど…
377デフォルトの名無しさん:2006/11/02(木) 22:41:09
>>368
>>369
どうもありがとうございます
378デフォルトの名無しさん:2006/11/03(金) 03:17:00
>>371
必ずそうなる訳ではないので、内容比較はequals使いましょう

Integerとかも、場合によってはインスタンス使い回すし。
不変オブジェクトはそういうインスタンス使い回しがよくされる。
でも、それは実装依存だからね。
379371:2006/11/03(金) 04:57:09
参照型の変数はC/C++のポインタと同じようにとらえていたので、
内容比較にならないのはわかっていたんです。
"hoge".instanceMethod()という構文ができるということは
文字列リテラルを書いただけでインスタンスが作成されていて、
更に>>371の二回目の"aaa"では新たに作成せずに
自動的に一回目と同じインスタンスになっているんですよね。
そのあたりのJavaの挙動が不思議だったんです。

ところで>>378のような文脈での「実装」という言葉の定義がよくわからないのですが、
ソースから処理実行までの過程のどの部分のどういった差異の事を指すんですか?
380デフォルトの名無しさん:2006/11/03(金) 05:49:36
>>314
メディエータだろ。
381デフォルトの名無しさん:2006/11/03(金) 05:59:53
>>371
C/C++でも静的文字列は使いまわされる実装が多い気がするが
Javaでは文字列リテラルはVMだかクラスローダだかで一意の
Stringオブジェクトになることが仕様で決まっている。
(たとえ複数のクラスにまたがって書いてあったとしても!)

なおJavaに限らず仕様で決まっていないことは *すべて* 実装依存だ。
382デフォルトの名無しさん:2006/11/03(金) 07:09:38
>>379
>ところで>>378のような文脈での「実装」という言葉の定義がよくわからないのですが
VM とか java.lang.* みたいなVMに直結したライブラリの実装。
というより、言語規定で明確に決められていないって事かな?

>>371 に関して言えば、言語規定で決められてないって意味では
"aaa" == "aaa".substring(0) が true になった事ぐらいのような気もするけど。
383デフォルトの名無しさん:2006/11/03(金) 13:40:29
Clonableインターフェイス、Cloneメソッドについて質問があるのですが、
これらはCopyメソッドと比べて何が違うのでしょうか?
どちらもオブジェクトの情報を複製するのが目的だと思うのですが、
どのように使い分けるのでしょうか?
384デフォルトの名無しさん:2006/11/03(金) 13:45:54 BE:609777757-2BP(0)
FileReader fr= new FileReader(args[0]);
BufferedReader br= new BufferedReader(fr);


FileReaderとBufferedReaderの違いがよくわからないのですが
具体的に何をどう読み込んでるか教えてくだしあ><
385デフォルトの名無しさん:2006/11/03(金) 13:47:24
>>383
Copyメソッドって何だ?
それから、大文字小文字は区別しろ。
386デフォルトの名無しさん:2006/11/03(金) 13:58:38
>>385
配列を複製する時に使用するのが、copyメソッドらしいのですが
配列以外では使えないのか、cloneメソッドでは複製出来ないのかな、と。
また、Clonableインターフェイスを絡めて他のクラスからの情報を複製する場合、
どのような感じでコードを書けば良いかが分かりません。

ご指摘ありがとうございます。今後、気をつけます。>大文字小文字は区別しろ。
387デフォルトの名無しさん:2006/11/03(金) 15:03:24
>>386
配列でも clone() 使えるぞ。 それに配列に copy() なんてメソッド無いぞ。

java.lang.System#arraycopy(Object,int,Object,int,int) の事を言ってるのかもしれんが、
あれは複製じゃなくて内容を書き写すメソッドだからなぁ。
388デフォルトの名無しさん:2006/11/03(金) 15:11:52
そういやCloneableの綴りはもう一生直らないのですか?
389デフォルトの名無しさん:2006/11/03(金) 15:17:09
>>388
たぶん一生直らないと思う。
390デフォルトの名無しさん:2006/11/03(金) 15:22:02
>>384
> FileReaderとBufferedReaderの違いがよくわからないのですが
BufferedReader は readLine() が使える。
FileReader は一文字読み込みの read() やらを連発すると、
実行速度が著しく低下する可能性がある。
391デフォルトの名無しさん:2006/11/03(金) 15:23:33
JDBC1.0プログラミングについて質問です。
where句が動的に変わるSQLでPreparedStatementを使用すると、
PreparedStatement#setXXX メソッドを呼び出すときに
同じような条件判定を書かなきゃいけなくなります。
なんかうまく書く方法ってないでしょうか?
// where句の編集
if (joken1 != null) {
whereSql = whereSql + "joken1 = ?";
}
if (joken2 != null) {
whereSql = whereSql + "joken2 = ?";
}
if (joken3 != null) {
whereSql = whereSql + "joken3 = ?";
}
PreparedStatement ps = conn.prepareStatement(sql + whereSql);
// プレースホルダへ検索条件設定
if (joken1 != null) {
ps.setString(index++, joken1);
}
if (joken2 != null) {
ps.setString(index++, joken2);
}
if (joken3 != null) {
ps.setString(index++, joken3);
}
392デフォルトの名無しさん:2006/11/03(金) 15:49:02
>>391
List paramList = new ArrayList();

if (joken1 != null) {
 whereSql = whereSql + "joken1 = ?";
 paramList.add(joken1);
}

// 中略

PreparedStatement ps = conn.prepareStatement(sql + whereSql);

int index = 0;
for(Iterator paramItr = paramList.iterator; paramItr.hasNext(); ){
 ps.setObject(++index; paramItr.next());
}
393デフォルトの名無しさん:2006/11/03(金) 15:53:45
>>387
レスありがとうございます。
という事は教本等にある、シャローコピー、ディープコピーとは何に当たるのでしょうか?

cloneableインターフェイスとcloneメソッドですが、「オブジェクトの複製」をする為にあると
思って間違いはないでしょうか?例えば、

public class Data implements Cloneable {

int x;

if (this instanceof Cloneable){

Data d = new Data(何かしらのデータ);
for(int i = 0; i<this.size; i++){
d.x = this.x;
return x;
} else{

throw CloneNotSupportedException;

}

こんな感じで良いのでしょうか?
394デフォルトの名無しさん:2006/11/03(金) 16:02:15
>>388
Bug ID: 1234712 Cloneable is misspelled を参照。

395デフォルトの名無しさん:2006/11/03(金) 16:10:55
>>393
> シャローコピー、ディープコピーとは何に当たるのでしょうか?
例えば、こんな配列があったとして
int[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

シャローコピーは 1階層しかコピーしない、浅いコピー。
int[][] shallow = new int[array.length][];
for(int i = 0; i < array.length ; i++) shallow[i] = array[i];

ディープコピーは、全階層を辿ってコピーする。
int[][] deep = new int[array.length][];
for(int i = 0; i < array.length ; i++){
 deep[i] = new int[array[i].length];
 for(int j = 0; j < array[i].length; j++) deep[i][j] = array[i][j];
}

シャローコピーでは、src[0][0] = 2; とかやると、shallow にも影響が及ぶ。
ディープコピーでは影響が及ばない代わりに、コピーのコストが高い。
396デフォルトの名無しさん:2006/11/03(金) 16:25:38
>>393
public Object clone() メソッドを実装しろ。それだと Cloneable である意味が全然ない。
clone メソッドの中でコピーをする方法を書くんだ。
シャローコピーでいいなら super.clone() を呼ぶだけでよい。
397ぴゅあ:2006/11/03(金) 19:21:29
>>391
"うまく"というのか、"選択"?だろうけど

1.まずその付近全体のコードを整える
2.コード全体を眺めメソッド等に抽出できるものはないか挙げてみる

>whereSql = whereSql + "joken1 = ?";
なんて"StringBuffer使えよ"とか言われてしまいそうなところから
全体を書き替えてみると何か気付くこともあるのかも知れないし
(その前の部分のコードもあるのだろうけど、
そっちはベタでそのまま文字列になってるのかもだけど)

使い捨てでもなく、ちゃんと管理できると思えるなら
StringBuilderならぬSqlBuilderみたいな形に
作ってみたりもできそうだけど
(その前にその手のものなら探せばありそうな気も…
質問部分には答えてくれないかもだけど)
398デフォルトの名無しさん:2006/11/03(金) 19:28:37 BE:609777757-2BP(1)
>>390
読み込む中身はファイルの文章全体であることは同じなのですか?
399デフォルトの名無しさん:2006/11/03(金) 19:51:51
>>398
> 読み込む中身はファイルの文章全体であることは同じなのですか?
基本的に同じ。

BufferedReader の readLine() を使った場合だけ、
その行の終端にある改行文字が削除される。
400ぴゅあ:2006/11/03(金) 22:16:51
>>398
FileReaderとBufferedReaderを対等に並べて比較できるか…?
というのもありそうな気もしたりですけど

(ザックリ)
・ファイル → FileReader

・ファイル → FileReader → BufferedReader
は、あっても
・ファイル → BufferedReader
はないですよね?

或いは"ファイル → FileReader"の代わりに
・ソケット(InputStream) → InputStreamReader → BufferedReader
とか
(FileReaderはInputStreamReaderをファイルを扱うのに特化したもの)

FileReaderやInputStreamReaderの段階で取り出す場合と
BufferedReader(Reader + Buffer…StringBuffer的?)の段階で取り出す場合とで
それぞれの段階で取り出せる形がどう違うのかとか調べてみるといいのかも
或いはFileReaderとBufferedReaderとの間で区切って考えてみるとか

探せば、これらの流れを漫画にして解説してくれているのも多数ある筈です

たぶんそれらによって
>読み込む中身はファイルの文章全体であることは同じなのですか?
とかいう疑問は解消されるのかも?

或いはその上で>>399の話を読み直してみるとか
401デフォルトの名無しさん:2006/11/04(土) 00:08:46
ゲッターがない場合、privateな変数を外から取り出すのは絶対に無理なんでしょうか?
402デフォルトの名無しさん:2006/11/04(土) 00:16:03
リフレクション使えばどうとでもなるよ
Fieldそのものはprivateでも取り出せるから
あとは無理矢理アクセス権を作ってしまえばいい。
403デフォルトの名無しさん:2006/11/04(土) 00:24:52
>>402
ありがとうございます。リフレクションのこと調べてみます。
ゲッター書かないで保存してしまってすごく困ってました(´Д`;)ヾ
404デフォルトの名無しさん:2006/11/04(土) 00:29:45
jLabelにsetIconを使ってgif画像を貼り付けています。

アプリケーションを起動したときにはきちんと表示されるのですが、
他のウィンドウが重なったり、最小化させたあとに
もう一度そのウィンドウを開くと、
画像が表示されなくなってしまいます。

きちんと表示させるためには何が必要なのでしょうか?
よろしくお願いします。
405デフォルトの名無しさん:2006/11/04(土) 07:45:29
>>404
特に必要なことはないはずだけど。
ImageIconとかの既存のIconでなく自分で実装したIconで再描画に対応できない造りになっているとか。
状況を再現できる最小限のソースがあれば指摘できる人が増えると思う。
406ぴゅあ:2006/11/04(土) 11:44:35
>>404
>他のウィンドウが重なったり、最小化させたあとに
>もう一度そのウィンドウを開くと、
>画像が表示されなくなってしまいます。
と言われると、
(Javaとか関係なく)再描画ができていない…paint/repaint周りとかを
オーバーライドして何かやってる?(何か必要なことを落としている)
とかが浮かぶのですけど・・・

>jLabelにsetIconを使ってgif画像を貼り付けています。
だけなら、>>405の言っているように特にないだろうと思うけど
407デフォルトの名無しさん:2006/11/04(土) 12:51:44
>>404
>>405
レスありがとうございます。

jPanel -- jLabel1
-- jLabel2
という構造で、jLabel1に前述の画像表示、
jLabel2ではpaint周りをオーバーライドしています。
jLabel1の方にまでjLabel2のオーバーライドの影響が及ぶものなのでしょうか?

影響がなければ、javaでなくPC環境のせいなのかもしれないのですね。
408デフォルトの名無しさん:2006/11/04(土) 13:22:04
>>407
> jLabel2ではpaint周りをオーバーライドしています。
これの所為だな。
409ぴゅあ:2006/11/04(土) 14:12:31
>>407
>jLabel1の方にまでjLabel2のオーバーライドの影響が及ぶものなのでしょうか?
は、ないだろうと思ったりはしますけど
(jLabel1はJLabelそのものをそのまま使っているということだと解釈するけど)

JPanelとか、JPanelを乗せているものとか...(更に…)には
オーバーライドとかやっていることはないんでしょうか
>>405も言っている再現される最低限のソースが用意できるなら
判りやすいでしょうね
(jLabel1とかjLabel2とか、なんか話に微妙なもの?がありそうな気もしたりするし…)
410デフォルトの名無しさん:2006/11/04(土) 16:09:10
>>407
swingの場合は paintではなくpaintComponentをオーバーライドする。
public void paintComponent(Graphics g) {
super.paintComponent(g);
 //paintする処理を記述
}
411デフォルトの名無しさん:2006/11/04(土) 16:41:02
教材通りに書いたらエラーが出ました。教材のミスでしょうか?教材のHPを
見ても何も書いていなかったので私のミスかな・・
Truth.java:3: シンボルを解決できません。
シンボル: クラス string
場所 : Truth の クラス
string right = "正解",wrong = "不正解";
^
Truth.java:7: シンボルを解決できません。
シンボル: クラス string
場所 : Truth の クラス
string right = value ? right : wrong;
^
エラー 2 個

class Truth{
public static void main(String[] args){
string right = "正解",wrong = "不正解";
boolean value;

value = true;
string answer = value ? right : wrong;
System.out.println(answer);

value = false;

answer = value ? right : wrong;
System.out.println(answer);
}
}
412デフォルトの名無しさん:2006/11/04(土) 16:47:39
教材には小文字で"string"って書いてあるのか?
だとしたら、教材のミスだ。
413411:2006/11/04(土) 17:13:09
>>412
すいません、Stringでした・・・

なぜ小文字だとエラーになるのですか・・・?
414デフォルトの名無しさん:2006/11/04(土) 17:43:40
言語仕様で、大文字小文字を識別するから

VBとかは識別しないから、このへんから来た人は注意ね
415デフォルトの名無しさん:2006/11/04(土) 18:15:03
>>345
>>346

>>343を書いたんだけど、確かにソースコード書けだけではなく、文書化されている
モノも示すべきだと痛感。実際Effective Java持っているし、Java SEのAPI,,Tomcatなど
ソースコードをみてStringクラスやクラスローダの仕組み勉強したので。。。

Effective Javaより初心者向きでは、「日経BP SunJava2認定ガイド」がお勧めだと思う。
Sunの資格取るための教科書だけど、Objectクラスを継承するノウハウやequalsメソッド
などを、一般的な入門書より深く書いてある。
416デフォルトの名無しさん:2006/11/04(土) 18:43:28
てかSJC-Pの参考書が一番まともな入門書なのはある意味当たり前。
だってそういう試験だしw
417411:2006/11/04(土) 18:58:45
>>412
>>414

解決しました。ありがとうございました
418デフォルトの名無しさん:2006/11/04(土) 19:23:34
ファイルの読み込みについて、
下の例のようにBufferedReaderクラスのreadLineメソッドを使って行単位で読み込むというやり方がいろんなサイトで紹介されてますが、
ループを使わずにファイルの中身全部を一括して読み込むことってできないのでしょうか?
BufferedReader br = new BufferedReader(in);
StringBuilder s;
String line;
while ((line = br.readLine()) != null) {
s.append(line);
}

それともう一点。
下のようにStringオブジェクトの初期化の時に、文字列が長いと改行して +で連結する書き方をよくするのですが、
これって、コンパイル時に"abc・・・" + "xyz"は"abc・・・xyz"として最適化されるのでしょうか?
というのも、実行時に String型オブジェクト"abc・・・"と"xyz"が生成されて、String型オブジェクト"abc・・・xyz"を生成し直して、参照変数sにセットしているというような流れになっていないのかなっと思いまして。。
String s = "abc・・・"
+ "xyz";
419デフォルトの名無しさん:2006/11/04(土) 19:28:44
こんばんは。
ちょっとお伺いしたいのですが、JSPで、セッションでのパラメーターの受け渡しが上手くいきません。
教えてもらえないでしょうか。
このページから、
http://www.wikiroom.com/java/index.php?plugin=attach&pcmd=open&file=Customer.jsp&refer=JSP%20session
このページへ、受け渡しをしたいのです。現在だと、すべて、NULLが表示されます。
http://www.wikiroom.com/java/index.php?plugin=attach&pcmd=open&file=ShipSummary.jsp&refer=JSP%20session
よろしくお願いします。
420ぴゅあ:2006/11/04(土) 19:44:41
>>418
>ループを使わずにファイルの中身全部を一括して読み込むことってできないのでしょうか?
BufferedReader#readLine()のようにというところではないんだろうと思う
テキストファイルだとしても、何十MBとかあるファイルを一度に読み込んじゃあ大変だろうし
一度に読み込んでおかないとできない処理なんてのもそうそうないんじゃないでしょうか

いや、でも読み込みたいんだということであれば
InputStreamReader#read(...)とかで一気に読んでおくとかあるでしょうけど
ホントにそれでいいのか、よく検討してみた方がいいような気がする。。。

>下のようにStringオブジェクトの初期化の時に
よく知らないんですけど、
逆コンパイラではなくて逆アセンブラみたいなツール?があるらしいのですが
それで実際にどうコンパイル(最適化)されているのか見てみるといいんじゃないかと
(バージョンによってまた違うとかもあるでしょうけど、見ておくのは安心?なのかも)
421デフォルトの名無しさん:2006/11/04(土) 19:51:20
nio使えば出来るけど、文字列を取得するならBufferedReader使っとくのがいいよ。
Decoder#decodeって速くないから意味無いと気づく。
あえてnio使うなら改行表現を勝手に修正されたくない場合とかかな。
422ぴゅあ:2006/11/04(土) 19:58:04
>>419
JSPはずっと触ってないのであまり突っ込めないと思うけど
遷移先のページでsessionて出てきてる?
というような気がする・・・
423デフォルトの名無しさん:2006/11/04(土) 20:15:20
>>422
書き換えるの忘れてました。request.getAttributeってやってました。
なんて、馬鹿なんだろう。
ありがとうございました。
424418:2006/11/04(土) 20:32:56
>>420 421
ありがとうございます。
htmlファイルを読み込んで正規表現かけて欲しい情報を一発で取得したいがために
一括読み込みを考えてました。nioというキーワードをいただいたので少し調べてみます。

>逆コンパイラではなくて逆アセンブラみたいなツール?があるらしいのですが
なるほどです。失念してました><
早速jadを使って逆コンパイルしてみたら、String s = "abc・・・xyz";に置き換わってました。
425デフォルトの名無しさん:2006/11/04(土) 20:44:30
WebサーバにはWebsphere、DBサーバにはSQLServerという構成でシステムが稼動しています。
質問させていただきたいのですが、DBサーバを再起動すると
Websphereが持っているDB接続情報(コネクションプール)が変わってしまい
Websphereの方も再起動しないとDBに接続できなくなってしまうのですが
これはそういうものなのでしょうか?
それとも設定をいじれば、Websphereまで再起動する必要はないのでしょうか?
Websphereまでも再起動するというのが嫌なので改善方法があれば教えてください。
426ぴゅあ:2006/11/04(土) 20:49:15
>>424
jadでもそこは見れるんですね
よくは知らないんですけど、アセンブラコード風のリストが
見れるようなものがあるらしいようでもあるのですけど
(もしかしたらString s = "abc";の"abc"がどう処理されているか
見えたりするのかな?とか思ってみたりするのですけど
そこまでは見えないのかな。。。)

>htmlファイルを読み込んで正規表現かけて欲しい情報を一発で取得したいがために
そんなに大きなファイルとなることもないんでしょうけど
読み込みつつ・・・なんて処理ができるといいんだろうと思いますけど
ただ、一気に読み込んでおくよりはめんどくさそうだという気はしますけどね
一度作れてしまえばその仕組みを色々活用できそうですけど
427デフォルトの名無しさん:2006/11/04(土) 20:56:45
javap
428ぴゅあ:2006/11/04(土) 21:02:35
>>425
昼頃見かけたあちらのスレッドからですよね

WebSphereも触らなくなって久しいですが
>DB接続情報(コネクションプール)
と言っているのがどの辺りを指しているのかよく判らなかったりしますけど
アプリということなら、作り方なのでしょうけど

"WebSphere コネクションプール DB 再起動"とかでググッてみると出てきそうですね
例えば以下のページとか?
http://www-1.ibm.com/support/docview.wss?uid=std3d370fa45fa339dc249257000002ad030
429デフォルトの名無しさん:2006/11/04(土) 21:03:03
>>425
XAデータソースを使っていたらそんなもん。
430デフォルトの名無しさん:2006/11/04(土) 21:04:38
ちょっと教えてください。
swingであるボタンを押すとラベルが表示するように作りました。
しかし、ボタンを押すとそのラベルガ表示されません。
右上のwindowの拡大を押すと、全体のwindowが拡大されたあとに
ちゃんと表示されるのです。しかし、最初から拡大して押しても表示されないし、
縮小したままでも表示されません。ボタンをおす、拡大するの順番でやっと表示されるんです。
これはどうしてですか?
431ぴゅあ:2006/11/04(土) 21:08:13
>>427
ありがとう

以前チラと使って、あれ?とか思ったのも
再度やってみたら判った。。。(汗)
432ぴゅあ:2006/11/04(土) 21:18:14
>>430
ラベルを表示する部分のコードを示してみるとかするのがいいのかも

最大化でなくても、他のウィンドウを重ねたりとかすると表示されたりしないでしょうか
ラベルが…と言っているけど、JLabel#setText()とか呼んでいたりしているんではなくて
或いはrepaint()とかrevalidate()とかが呼ばれないようなものになっているとか

最大化することによって再描画される状態になるのでやっと表示されるという状態が
起きていたりするんじゃないだろうかと思えたりですけど
433デフォルトの名無しさん:2006/11/04(土) 21:33:10
デフォルトアクセス(package private)なクラスの、 private でも protected でもないメソッドって、
public にするのと、 package private にするのと、どちらがいいんでしょうか?

クラスと同様に package private にしとくと、 package private な interface を作って実装したときに
そこだけ public にしなきゃならなくなって、 public と package private とが混在して違和感があります。

かといって全部 public にしておいても、 package 外からはアクセスできないんだし、やっぱり違和感があります。

jdkのソースとか見るとコンストラクタだけ package private にして、メソッドは全部 public ってのが
多いみたいだったので、現在はそうしてます。

元を正せば package private な interface のメソッドは暗黙的に package private なアクセスレベルで
あるべきと思うんですが。

みなさん、どのようにしていますか?
434デフォルトの名無しさん:2006/11/05(日) 00:02:10
リスト→配列変換で下記のようなコードを書いたのですが

ArrayList<Integer> a = new ArrayList<Integer>()
a.add(1);
a.add(2);

int[] b = new int[a.size()];

for(int i=0;i<a.size();i++){
b[i]=a.get(i);
}

これを、toArray()を用いて書くにはどうしたらいいのでしょうか?

Integerとintの変換がうまくいかずエラーがでてしまいます。
435デフォルトの名無しさん:2006/11/05(日) 00:07:55
toArray使ったらInteger配列だからプリミティブで欲しいってこと?
あなた自身の書いたそのコードがベストプラクティスに見えるけど。
436デフォルトの名無しさん:2006/11/05(日) 00:25:24
>>434にあるforを使わずに
Object[] toArray(Object[] a) という関数を用いて

b=a.toArray(new Integer[a.size()]);

のように1行で書けるならそっちのほうがよりよいのかなと思ったのですが、
Integer[] → int[] へのキャストがわからずエラーがでてしまいます。

>>434のようにforで書いた方がよさげですか?
437デフォルトの名無しさん:2006/11/05(日) 00:32:30
そう書いたんだけど、何で繰り返し質問されるんだろう
438ぴゅあ:2006/11/05(日) 00:40:05
>>434,>>436
>ArrayList<Integer> a = new ArrayList<Integer>();
からArrayList#toArray()で取れるのはInteger[]まで

a.get(i)はIntegerで取れているけど
>b[i]=a.get(i);
はアンボクシングが働いているので、正確にはb[i]=a.get(i).intValue();

get()までしか扱えないので
>Integer[] → int[] へのキャストがわからずエラーがでてしまいます。
という見方もできたりするでしょう
(正しくは(?)toArray()はArrayList<Integer>をInteger[]にするまでしかしないので)

commons Langまで持ち出して
Integer[] tmp = a.toArray(new Integer[a.size()]);
int[] b = ArrayUtils.toPrimitive(tmp);
とかも考えられなくはないでしょうけど
>>435の言ってることの方がいいだろうと思います
(2回配列を作ることになるし、余計なチェックコードとかも増えることにもなる@ArrayList#toArray(),ArrayUtils#toPrimitive()内)
439デフォルトの名無しさん:2006/11/05(日) 00:43:26
>>437-438
なるほど、無理にやろうとしても逆に大変になるんですね
とても参考になりました、ありがとうざいますっ
440ぴゅあ:2006/11/05(日) 00:43:48
>>437
そうは言われても、何か手があるんではないか?と思うからでしょう
ベストと言われるところがまだ納得できていないからだろうと思う
441ぴゅあ:2006/11/05(日) 01:28:35
>>439
余計だろうけど、補足してみるなら

>Integer[] tmp = a.toArray(new Integer[a.size()]);
>int[] b = ArrayUtils.toPrimitive(tmp);
としてみてもtoArray()の分が無駄

a.get(i)はArrayListの中身elementData[i]を返す

ArrayUtils#toPrimitive()のやっているのは>>434のforループそのもの
a.get(i)の代わりに(>>438を例に)tmp[i]という感じ

ArrayUtils#toPrimitive()に渡すためにa.toArray(new Integer[a.size()])を呼んでも
(System#arraycopy()を使ったりして高速に)ベタコピーしているだけで
a.get(i)でelementData[i]を見れば済むところをにわざわざtmp[]にコピーして使う分要らぬことを…
コード量は多そうに見えるが、forループにした方がシンプルということに

毎回書くのが嫌ならメソッドに切り出すとかクラスを作ってしまうとか
そのときにはArrayListっぽい命名にはなってなかったりするのでしょうけどね
442デフォルトの名無しさん:2006/11/05(日) 14:25:24
WinClose: http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28599
WinCloseAdpt: http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28600

上記の例を実際に動作させ、インターフェースとアダプタクラスを比較し、考察せよ。
という問題が出されたのですが、
インターフェイスは、そのインターフェイスに抽象的に定義されている
すべてのメソッドをオーバーライドする必要がある。アダプタクラスは必要な
メソッドだけをオーバーライドするように簡略化が図られた。
ということ以外に何か書けることはありますでしょうか?
443デフォルトの名無しさん:2006/11/05(日) 14:37:31
宿題はそれ用のスレがあるのでそこでやって下さい。
444デフォルトの名無しさん:2006/11/05(日) 14:49:55
>>442
たぶん、それで良いと思う。

後は、Frame を extends しつつインターフェイスを実装できるのに対して
Frame を extends しつつ、アダプタクラスも extends はできないので
別のクラスを作ってるという点が若干違うとか、そんぐらい。
445デフォルトの名無しさん:2006/11/05(日) 14:59:49
>>434で質問したものです。別のことでもう一つ教えて頂けないでしょうか。

例えば、2つの引数(配列)を持つあるメソッドを作りたいときに、
引数にint型でもlong型でも両方使えるようにするには

static void cal(int[] a,int[] b){
処理;
}
static void cal(int[] a,long[] b){
処理;
}
static void cal(long[] a,int[] b){
処理;
}
static void cal(long[] a,long[] b){
処理;
}

のように4つ書くのは異常に面倒だと思うのですが、なにかうまい書き方ないものでしょうか?
446デフォルトの名無しさん:2006/11/05(日) 15:09:39
static void cal(int[] a, int[] b){
cal(toLongArray(a), toLongArray(b));
}
static void cal(int[] a, long[] b){
cal(toLongArray(a), b);
}
static void cal(long[] a, int[] b){
cal(a, toLongArray(b));
}
static void cal(long[] a,long[] b){
処理;
}
447デフォルトの名無しさん:2006/11/05(日) 15:38:30
>445 Array#getLong。ただし実行効率上不利になることが予測される。
448デフォルトの名無しさん:2006/11/05(日) 15:51:07
>>446-447
なるほど、そうやって処理を一つにまとめればいいんですね
型変換による効率悪化 と 処理のコーディング楽さ どっちを取るかって感じですかね。

参考になりました、ありがとうございます。
449デフォルトの名無しさん:2006/11/05(日) 16:28:39
すいません、こちらでJavaScriptの質問をして良いのでしょうか・・・
450デフォルトの名無しさん:2006/11/05(日) 16:36:23
451デフォルトの名無しさん:2006/11/05(日) 16:49:18
>>450さん
ありがとうございます〜
452デフォルトの名無しさん:2006/11/05(日) 16:57:02
g.dispose(); をぐぐったら
リソースを開放すると出たのですが

開放とはどういった意味なのでしょうか?
453デフォルトの名無しさん:2006/11/05(日) 17:02:17
内部に保持してるネイティブなリソースだね。
中身見たわけじゃないから何ともいえないけど
WindowsならHGCあたりを開放してんじゃないかな。
454デフォルトの名無しさん:2006/11/05(日) 17:03:35
>>452
gというオブジェクトが使っていたメモリその他の計算機資源を、
他のオブジェクト等で再利用できるようにするという意味。
その代わりdisposeするとgは使えなくなる。
455デフォルトの名無しさん:2006/11/05(日) 17:07:02
すいません、教えてください
フルスクリーン表示して大きさ固定するにはどうすればいいでしょうか

setExtendedState(MAXIMIZED_BOTH);
setResizable(false);
ってやるとフルスクリーン化は解けてしまうし、
getMaximizedBounds()やgetBounds()は何故か0が返されてしまいます
456デフォルトの名無しさん:2006/11/05(日) 17:20:33
>>455
やりたいことはフルスクリーン化でなく最大化かな
setResizable(false);
setVisible(true);
setExtendedState(MAXIMIZED_BOTH);
の順序でやってみると?
457デフォルトの名無しさん:2006/11/05(日) 17:23:28
要素の最大があらかじめ分かってる場合のHashMapの
初期値というのはどうするのが良いのでしょうか。
ArrayListなどと違って負荷係数とかあるので最適値というのが良く分かりません。
458デフォルトの名無しさん:2006/11/05(日) 17:25:20
KeyListenerの切り替えってどうすればよいでしょうか?
たとえば、状態AのときはAKeyListenerクラスを使って状態BのときはBKeyListenerクラスを使いたいんですが。

メインフレームでは
addKeyListener(new AKeyListener());
addKeyListener(new BKeyListener());
とやってますが状況に応じてどっちを使うか切り替えたいです。
459デフォルトの名無しさん:2006/11/05(日) 17:34:52
>>458
removeKeyListenerとaddKeyListenerで状況に応じて登録しなおすとか、
AKeyListenerとBKeyListenerの方で、それぞれ状態Aか状態Bのときにしか実際の処理をしないようにするとか。
460デフォルトの名無しさん:2006/11/05(日) 17:39:58
>>459
トン。removeKeyListenerを使う線で考えてみます。
461ぴゅあ:2006/11/05(日) 17:49:58
>>457
何も触らないのが最適値でもあるのかも?
何を基準に最適値を求めたいのか判らないですけど
APIリファレンスにはいちおよく読めば書かれていると思うけど

>>460
あちしは>>459の言う後者か
AKeyListenerなり(AKeyListenerのみ)で振り分けるとかの方が
いいんじゃないだろうかと思う
462デフォルトの名無しさん:2006/11/05(日) 18:15:36
>>461
その線も考えてみたんですが状態数が多くキー処理の数がものすごく多いのでなるべく分けておきたいなぁと。
AKeyListenerのメソッドがすごく長くなりそうなので。
↓みたいな感じにしてます。

public void setGameState(int gameState) {
// ゲーム状態を変更する
this.gameState = gameState;
// 現在のキーリスナーを削除
removeKeyListener(currentKeyListener);
// ゲーム状態に応じてキーリスナーをセット
switch (gameState) {
case GameState.TITLE :
addKeyListener(title);
currentKeyListener = title;
break;
case GameState.GAME :
addKeyListener(game);
currentKeyListener = game;
break;
case GameState.BATTLE :
// addKeyListener(battle);
// currentKeyListener = battle;
break;
}
}
463デフォルトの名無しさん:2006/11/05(日) 18:44:21
>>444, 454
ありがとうございます
464デフォルトの名無しさん:2006/11/05(日) 19:16:24
>>457
最適化の肝は実測にあるので、
与えるデータや初期値や負荷係数などのパラメータを実際に変えながら、
最適ポイントを求めてみるとか。
465ぴゅあ:2006/11/05(日) 23:01:42
>>462
>状態数が多くキー処理の数がものすごく多いのでなるべく分けておきたいなぁと。
いや別にリスナそのものは状態に応じた分岐までとかでもいいんじゃないでしょうか
(AKeyListener,BKeyListenerと分けたかったメソッドを用意して状態によってそれへの分岐だけとか)

その先は好きなだけ(機能もグループ分けしたりとかでメソッド分けするとか)どうにでもなるのでは?
そうすることでより見通しがよくなりそうに思えますけど

逆にadd/removeだと、状態が変わることとadd/removeのタイミングが保証できているかとか
疑問が出てきたりもするかも?
466ぴゅあ:2006/11/05(日) 23:05:39
追記…

なので、いずれにしても状態とリスナが呼び出されるタイミングに配慮する必要は
あるだろうと思う
(たぶん、ちゃんと考えてないと、"動きが怪しい"とか後で悩むことになりやすい部分だろうと思いますよ)
467デフォルトの名無しさん:2006/11/06(月) 03:06:52
>>457
capacity の 80% くらいデータが埋まると capacity の拡張が起こったはず。
正確な値はソースをみないとわからないが。
なのでその拡張が起こる直前で収まるような inital capacity を与えれば最適になる。
468デフォルトの名無しさん:2006/11/06(月) 03:11:17
ハッシュ値が重複するからきっちり容量取るのはgetが遅くならない?
469ぴゅあ:2006/11/06(月) 07:34:53
>要素の最大があらかじめ分かってる
というのが毎回不変ということを意味しているのか
>ハッシュ値が重複するから
どういうキーが来るのか
とかにも関わってくるんじゃないかと思うけど…

固定のデータを毎回使うということなら
予めオブジェクトを保存しておくという手もありそうだけど
それにしてもどっちが速いかはやってみなきゃ判らないんじゃないかと…
470デフォルトの名無しさん:2006/11/06(月) 21:54:14
>>465
これはAKeyListener、BKeyListenerを両方とも登録しておいてそれぞれのListenerのKeyPressed()とかに
if (state == A) {
 // キー入力処理
}
で分岐てことであってますか?
471ぴゅあ:2006/11/06(月) 23:08:24
>>470
例えばAKeyListener、BKeyListenerをひとつのものにしたという意味にでも
"1つの"ABKeyListenerをaddしておき
if (state == A) {
// AKeyListenerに書いていた処理をするメソッドを呼ぶ
}
else if (state == B) {
// BKeyListenerに書いていた処理をするメソッドを呼ぶ
}
のようなイメージを挙げてみました

stateが変化するタイミングはまだ微妙かも知れないですけど
remove/add(removeとaddの間に隙間ができる)
或いは逆順にadd/remove(addとremoveに重なった間ができる)
よりはいいだろうと思うし、
stateのタイミングをどうするかを考えるだけくらいに減りそうな気がします

AKeyListener、BKeyListenerをaddしておいて
というのも常に両方のリスナが呼ばれるというのはあるけど
stateが変化するたびにadd/removeというよりはいいんじゃないかと思います

stateに対してそんなシビアでないとかいうのは質問からは読み切れないし
イベントが発生してから実際にリスナへ届くのが必ずしもすぐであるとは限らないだろうし
その辺りは何とも言い難いようにも思いますが
たぶん少なくともやって損はしないだろうってところかもですけど

// AKeyListenerに書いていた処理をするメソッドを呼ぶ
の先のメソッドのところは長くなるとかなら
判りやすいように分割するとか好きにできるでしょ?
472超初心者:2006/11/07(火) 03:25:51
携帯でパチスロットの設定判別を出来るようにしたいのですが
例えば設定1〜6までのBIG/REG/ベル/スイカの確率を
設定1:1/300 / 1/600 / 1/10 / 1/60
設定2:1/270 / 1/550 / 1/9.8 / 1/55
設定3:1/260 / 1/500 / 1/9.6 / 1/53
設定4:1/250 / 1/450 / 1/9.3 / 1/51
設定5:1/240 / 1/400 / 1/9.0 / 1/49
設定6:1/240 / 1/350 / 1/8.5 / 1/45
この様なスペックの台があったとして、
この台をX回転させたときBIG/REG/ベル/スイカの入賞個数を
入力すると、それぞれの設定で起こり得る確率を表示させたいのですが、
これを、携帯で計算&表示させることは可能でしょうか?
また、比較的簡単に出来るならば、ご指導宜しくお願いしたいです。
473デフォルトの名無しさん:2006/11/07(火) 10:31:00
ResourceBundle rb = ResourceBundle.getBundle("io.Sample");
みたいな構文はnewを使ってインスタンスを生成してからじゃなくても
使えるようなのですが、どういう場合にnewを使ってコンストラクタを呼んで、
どんな場合はクラスのメソッドを直接呼べるんでしょうか?
474デフォルトの名無しさん:2006/11/07(火) 10:50:34
staticがついているクラスメソッドの場合は
インスタンス不要。
475デフォルトの名無しさん:2006/11/07(火) 11:00:10
なるほどなるほど、標準ライブラリの中にもStaticのついたメソッドが色々とあって、
そういうのを使うときはリファレンスで確認して、メソッドの呼び出し方法を確認すれば
OKって感じですかね
476デフォルトの名無しさん:2006/11/07(火) 11:14:24
>>475
Eclipse使えば警告出てくるよ。
477317:2006/11/07(火) 17:11:48
以下のようなpolicyファイルを試験的に作成しました。

grant codeBase "http://[WEBサーバ名(orIPアドレス)]/-" {
permission java.security.AllPermission;
};

このファイルをWEBサーバ[windowsXP]のHOMEディレクトリに設置したら、
他サーバ上にあるデータベースに接続および参照/更新が可能になりました。

ですが、
WEBサーバ以外の端末[windows XP/2000/NT]に同一ファイルを設定したところ、
接続できないとエラーが出力されました。
com.ms.security.SecurityExceptionEx[com/internetcds/jdbc/tds/Tds.<init>]: cannot connect to "[DB server name]"


policyファイルの認識に誤りがありましたらご指摘お願いします。
※反映させるのに一工夫必要とかあるのでしょうか?



あと補足として以下のpolicyファイルで上記各環境の動作試験を行っても
WEBサーバ上でのブラウザ表示のみ成功でした。
grant codeBase {
permission java.security.AllPermission;
};
※2000/NTで補足の動作試験を行うと以下のエラーになります。
java.security.AccessControlException: access denied (java.net.SocketPermission[host name] resolve)
478ぴゅあ:2006/11/07(火) 18:25:24
>>476
あまりいいことではないような気もしたりするけど…

>>475
newが必要かどうか、クラスメソッドかどうかもいいけど
それによって(実際に実装されているものが)何を得ようとしているのかを
理解(考えてみる)のがいいだろうかと思いますよ
(クラスメソッドとかを理解した後のステップだろうけど)
479ぴゅあ:2006/11/07(火) 18:26:09
>>477
あまりやってないので明確なところは言えないけど
別サーバーにあるというのはpolicyファイルなりで解決できたのですよね

ちょっと気になってみるのは
その
>WEBサーバ以外の端末[windows XP/2000/NT]
からアクセスできるようになっています?(policyとは関係ない部分で)
アプレットを使うということはWebサーバーは全ての(或いは特定のネットワークに限定して)クライアントから
アクセスできるように設定されている筈ですよね
DBサーバー(サーバーB)なるものもアプレットから…つまり全てのクライアントから
アクセス可能であるように許可されていなければならないように思います
(つまり"サーバー側で"そのように設定してあるということ)

いちお話の中では出てきてないようなので聞いてみてますが
例えばそのマシンにDBクライアントなりのものを入れてみて
DBに接続できるかどうかとか確認されているでしょうか
或いは確認してみると判るんじゃないだろうか?と思ったりもしてみますが。。。

>com.ms.security.SecurityExceptionEx[com/internetcds/jdbc/tds/Tds.<init>]: cannot connect to "[DB server name]"
とかはpolicyファイルとかに関わるものというより
その辺のところを言ってたりしないんだろうかと思ったりですけど

勝手な推測だけですけど、そんな気もしたりします

たぶん"com.ms.security.SecurityExceptionEx cannot connect"とかでググッてみたりしても
(直接DB周りの話でないにしても)
それらしいものは得られたりしそうな気もしたり。。。
480デフォルトの名無しさん:2006/11/07(火) 18:35:02
>>477
> com.ms.security.SecurityExceptionEx
それ、MSJVM 使ってるんじゃない?

MSJVMってポリシーファイル使えるんだっけか?
481317:2006/11/07(火) 18:58:50
>>479
各動作確認端末からのデータベース接続や
もっと根本的なApplet動作などを再確認してみます。

>>480
MS JVMを使っているっぽいです。
SunJavaを導入して動作確認してみます。
482デフォルトの名無しさん:2006/11/07(火) 20:21:20
>>477
policyファイルって使ったことないんだけど、
WEBサーバ以外の端末からの実行って、コマンドプロンプトから実行してるの?
WEBサーバは勝手にやってくれるけど、そうでない場合は、自分で指定しないとダメとか?
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/spec/security-spec.doc6.html

最悪は、/lib/security/java.policy を書き換えれば行っちゃうとか?
よくわからないので、オレも教えて欲しいです。
483デフォルトの名無しさん:2006/11/07(火) 21:25:22
>>482
それ書き換えると、そのJVMで実行する全てに影響。
それがいやなら実行時に-Dオプションでポリシーファイルを指定

>>477
ポリシーファイルでcodebase指定したら
そのcodebaseのクラスに対してのパーミションが開く

Codebaseからファイルを持ってこずに、ローカルのライブラリを
使った場合は、同じクラスでも権限は与えられないから注意。
484482:2006/11/07(火) 22:04:46
>>483
なるほど。-Dで指定するのね。ありがと。
485デフォルトの名無しさん:2006/11/08(水) 00:30:56
JavaでRSSリーダもどきを作っているんですが、少し詰まったので、質問させて下さい。
Web上からrdfファイルを入力し、それをXMLとして解釈してタイトルや内容を抽出、String型の変数に入れて
それをprintで表示させたいっていう内容です。

タイトルに関しては問題なく表示されるのですが
内容のみ『〜〜文章の途中......』と点で省略されて最後まで表示されません。
Stringって文字数制限ありましたっけ?
具体的なソースプログラムを晒した方がいいですか?
ご教示よろしくお願いします。
486デフォルトの名無しさん:2006/11/08(水) 00:33:39
一応晒して。
あとDOMで保持するよりSAXで
他のオブジェクトに落としちまった方がいいよ。
487デフォルトの名無しさん:2006/11/08(水) 00:37:23
>>485
文章の切れ方にルールは?
何文字目かで切れているかとか。

それと、まず、読み込み元が切れているというオチが無いかだけは確認して欲しい。
取得するノードが違っているということもあるかもしれんし。
488デフォルトの名無しさん:2006/11/08(水) 00:37:31
>>485
そのRSSでは全文が配信されているのかい?
rdfファイルの時点でdescription要素の中身
が『〜〜文章の途中......』になってたりしない?
489485:2006/11/08(水) 00:46:11
 凡ミスでした。
DOMでRSSを扱っていたのもありますが、大本の原因は
488氏の仰る通り、rdfファイルの元が......で切れてました。
確認怠ってた私の責任です。 即レスして下さった方々ごめんなさい。


 元々のRSSが切れている場合、文章全ての表示って不可能ですか?
Mixi等はRSSから文章全てをひっぱてこれたと思うのですが、どういうメカニズムなんでしょう……orz
490デフォルトの名無しさん:2006/11/08(水) 00:50:04
いやDOM関係ない。DOMやSAX云々は処理効率の問題だろ。

> Mixi等はRSSから文章全てをひっぱてこれたと思うのですが、どういうメカニズムなんでしょう……orz
全文引っ張ってこれるRSSってだけだろ
491デフォルトの名無しさん:2006/11/08(水) 02:04:28
>>489
RSSに記事のURLがあれば、そのURLのページを取得して、うまいことやれば。。。
って無理か。
492デフォルトの名無しさん:2006/11/08(水) 02:14:53
mixiはHTMLを解析して抜き出してる
493デフォルトの名無しさん:2006/11/08(水) 03:23:15
class BallData{
boolean flag;
int iX,iY,iDisX,iDisY;
Color color;
BallData(boolean flag,int iX,int iY,int iDisX,int iDisY,Color color){
this.flag = flag;
this.iX = iX;
this.iY = iY;
this.iDisX = iDisX;
this.iDisY = iDisY;
this.color = color;
}
}
のインスタンスを配列化するとき

BallData[] ball = new BallData[]{
new BallData(true,0,0,1,1,Color.orange),
new BallData(true,200,100,1,0,Color.blue),
};
は上手く行って

BallData[] ball = new BallData[5];
ball[0] = new BallData(true,0,0,1,1,Color.orange);
ball[1] = new BallData(true,200,100,1,0,Color.blue);

だとコンパイルエラーになったんだけど、下の書き方はどこが間違っていますか?
ホームページでクラスの配列とかで検索するとよく下のような書き方がでてきます。
494493:2006/11/08(水) 03:36:27
すいません下のnew BallData[5]はnew BallData[2]です。
495デフォルトの名無しさん:2006/11/08(水) 03:56:47
>>493
特に問題なく通ると思う。
エラー箇所を間違ってないか?
496493:2006/11/08(水) 04:20:40
やはり下のように書くと以下のようなエラーがでてしまいます。
上の書き方でとエラーが出ないので他の箇所のエラーではないと思います。

DoubleBuffer.java:26: ']' がありません。
ball[0] = BallData(true,0,0,1,1,Color.orange);
^
DoubleBuffer.java:26: <identifier> がありません。
ball[0] = BallData(true,0,0,1,1,Color.orange);
    ^
DoubleBuffer.java:27: ']' がありません。
ball[1] = new BallData(true,200,100,1,0,Color.blue);
^
DoubleBuffer.java:27: <identifier> がありません。
ball[1] = new BallData(true,200,100,1,0,Color.blue);
         :
                 :
エラー 10 個

497デフォルトの名無しさん:2006/11/08(水) 05:01:28
25行目がおかしいと思うよ。
498493:2006/11/08(水) 05:30:52
25行目は
BallData[] ball = new BallData[5];
という表記なんですがこの宣言の仕方は間違っていますか?
499デフォルトの名無しさん:2006/11/08(水) 05:49:05
おはよう。
>>498
まちがってなさそうだけど。
500デフォルトの名無しさん:2006/11/08(水) 07:40:15
>>496
> BallData[] ball = new BallData[5];
> ball[0] = new BallData(true,0,0,1,1,Color.orange);
> ball[1] = new BallData(true,200,100,1,0,Color.blue);

> DoubleBuffer.java:26: ']' がありません。
> ball[0] = BallData(true,0,0,1,1,Color.orange);

下のは new が抜けてるよね。座標も 200, 100 だったのが 0, 0 になってるし。
タイプミスとかでコンパイルエラーになってる可能性もあるので、
コンパイルエラーになったソースと、その時出たエラーを そのまま貼った方が良いと思うよ。
501デフォルトの名無しさん:2006/11/08(水) 07:47:39
>>500
> 座標も 200, 100 だったのが 0, 0 になってるし。
これは勘違い。
502ぴゅあ:2006/11/08(水) 07:54:47
>>498
フィールドとしてやろうとしているのではないですか?
その25行目に続けて26,27行目を書いているのではないのでしょうか
503デフォルトの名無しさん:2006/11/08(水) 08:07:31
SerializableをimplementsしたMailクラスをObjectOutputStreamで保存し、そのファイルをObjectInputStreamで読み込もうとすると、
java.io.InvalidClassException: system.Mail; local class incompatible: stream classdesc serialVersionUID = -5870021110093678344, local class serialVersionUID = 2169334442820164812
が発生するのですが、InvalidClassExceptionはどのような例外で、どうやって対処すればいいのでしょうか?
ObjectInputStream in = new ObjectInputStream(new FileInputStream(address));
Object o = in.readObject();
のコードで、「ObjectInputStream in.....」の部分はちゃんと実行されていて、「...in.readObject()」の部分で例外が発生しているみたいです。
504デフォルトの名無しさん:2006/11/08(水) 08:31:58
>>503
> InvalidClassExceptionはどのような例外
Serializable には、serialVersionUID ってのが必要で、
これでクラスのバージョンが同じかチェックしてるんだけど、
その serialVersionUID が異なる=シリアライズされた時の serialVersionUID と、
シリアライズ解除時のクラスローダが持ってる serialVersionUID が異なるなら、
InvalidClassException になる。

> どうやって対処すればいいのでしょうか?
Mail クラス に serialVersionUID を明示的に定義する。
505デフォルトの名無しさん:2006/11/08(水) 08:36:40
適当なこと言うと、serialVersionUIDが違うよって言ってるから、
クラスにserialVersionUIDを定義してみれば?
定義してない場合は自動的に内部で作成されるみたいだが、値が違うってことは、
クラスのI/Fが違うんでしょうね。
書き込んだクラスと読み込んだクラスは、同じクラス使ってます?
名前が同じとかではなく、同じクラスファイルって意味で。
506デフォルトの名無しさん:2006/11/08(水) 10:13:48
>>504>>505
ありがとうございます!
以前Eclipseを使っていて、serialVersionUIDが自動的に定義
されていたのですが、どんなときも値は1Lでした。
serialVersionUIDの値は1Lじゃないといけないんですか?
507デフォルトの名無しさん:2006/11/08(水) 10:25:04
>>506
いや、1じゃない方がいいと思う。
今のEclipseなら、計算して出してくれるよ。
メソッドの引数とか変えるたびに、手動で再計算させないとダメだけど。
508デフォルトの名無しさん:2006/11/08(水) 10:29:25
>>506
「どんなときも」なわけないでしょ。
ちゃんと生成させてないから1Lになってしまうだけ。
509デフォルトの名無しさん:2006/11/08(水) 11:00:49
Statement.exeucte(SQL文)を使って更新を行うプログラムを作ったんだが、
1. SQL文を全てStringBuilder等に入れて最後に実行
2. SQL文を順次実行
の二通り試した所、2.だと10分程度で終わるが、1.だと1時間経っても終わらなかった(1時間で終了させた)
これは、1.がとても効率が悪いと解釈してOK?
510デフォルトの名無しさん:2006/11/08(水) 11:18:31
1回のexeucteで複数のSQLって実行できるの?
StringBuilderって単語が出てきたけど、特にこれはレスポンスに影響ないと思う。
あと、レスポンス上げたかったら、executeBatchを使ってみたら?
511デフォルトの名無しさん:2006/11/08(水) 11:30:47
DBとかJDBCドライバの実装によって違うんで詳しくはわからんが、
executeにいくつもSQLを詰めて実行 (できんの?) した時にJDBCドライバ内 or DB側で
構文解釈して複数にバラしたりなどしてるっぽい。 で、その解釈が遅いのでは。
てきとーな予測だけど。

全く同じSQLでそこまで結果が違うってのは、よっぽど解釈がタコなのかもしれない。
512デフォルトの名無しさん:2006/11/08(水) 11:47:45
>>509
SQLの作成で無限ループに入ってるなんてオチないよね?
本当にexeucteが遅いのか疑わしい。。。
513デフォルトの名無しさん:2006/11/08(水) 12:05:04
>>512
SQL文の作成が完了した時点で時間を表示して確認してる(>>509の例だと6分くらいだった)

1回のexeucteで複数のSQL文の実行はできる(各SQL文を ; で区切る)

executeBatchは使ったことなかったから試してみます
514デフォルトの名無しさん:2006/11/08(水) 12:19:12
>>513
え?SQLの作成に6分?ずいぶん大きなSQLだね。
SQLの作成含めて10分で実行できちゃうってのも不思議だけど。
515デフォルトの名無しさん:2006/11/08(水) 12:46:19
まず、JDBCドライバが何?って所から始めてくれ
516デフォルトの名無しさん:2006/11/08(水) 13:07:14
>>514
プログラムのおおまかな構成は
最初に複数(1000行程度)の結果を返すSELECT文を実行
それらの結果を while( ResultSet.next() ) でまわして
順次SQLで更新するか、StringBuilder に入れていって while 終了時に実行するか(毎回の更新の内容はINSERT文3つ)
ただ、while の中に1つ SELECT文があるので時間がかかる(もちろん更新によって結果が変わるSELECT文ではない)

>>515
postgresql-8.1-405.jdbc3.jar
517デフォルトの名無しさん:2006/11/08(水) 13:27:09
>>516
なんで遅くなるかはわからないけど、
最初の1000行返すSQLとwhileの中で実行しているSELECTを結合して、
それをそのままinsert selectの形にすれば、3回SQL投げるだけで済むのかな。
状況わからないので、たぶん難しいんだと思うけど。

ちなみに、insert selectの形でinsert先が複数ある場合って、
やっぱり複数回insertしないとダメなのかね?
selectの結果は毎回同じなので、勿体ない感じがする。
518317:2006/11/08(水) 14:59:10
>>481
自己レスで結果報告です。

policyファイルを設定したクライアントがMS JVMでした。

SunJavaを導入して解決しました。

その際に最初うまくいかなったのですが、
javaバージョン:1.2だったのでバージョン:1.4に変えたところうまくいきました。
519デフォルトの名無しさん:2006/11/08(水) 18:48:55
javaで、swingをやっています。
JButtonで設置したボタンをクリックしたら、
画面の指定した座標に図形を描くようにしたいです
どのようにつくればいいのかわかりません。教えてください。
520デフォルトの名無しさん:2006/11/08(水) 19:02:44
>>519
図形を描くメソッドを呼び出すAction実装クラスを作って
そのアクションを引数にしたコンストラクタでJButtonを作ればいい
521デフォルトの名無しさん:2006/11/08(水) 19:23:42
今、自宅鯖でTomcatを動かしていますが、これからサーバを借りて使おうと思っています。
専用サーバを借りるほどのお金はとてもないのですが、共用のサーバを探してもPerlやPHPの動くサーバばかりで、JSPやサーブレットの動くサーバがなかなか見つかりません。
どこでサーバの情報は手に入れられますか?
522デフォルトの名無しさん:2006/11/08(水) 19:54:53
JSP ホスティングでググレ
523デフォルトの名無しさん:2006/11/08(水) 20:22:52
ここで聞くよりレンタル鯖板に行く方が適切。
524519:2006/11/08(水) 20:33:13
>520 こんな風に実装しました。必要なimportは省略します。

class hoge{
  JPanel p
  Jbutton btn

  public hoge{
   btn = new JButton("click");
   p = new JPanel();
   setBounds( 10, 10, 1100, 1100);
   p.add(btn);
   p.setLayout(null);
   btn.addActionListener(new ActionListener()
   {
     public void actionPerformed(ActionEvent event){
       *****
     }
   });
getContentPane().add(p);
}

   public static void main(String args[]){
     hoge tr = new hoge();
   }
}
ここで*****に実装してclickが押されたら図形drawLineとかで描画したいです!!
こんな風にできませんか?
525デフォルトの名無しさん:2006/11/08(水) 20:43:57
actionPerformedでは図形のデータを登録するだけに汁
描画自体はpaintでヤレ
526デフォルトの名無しさん:2006/11/08(水) 20:49:02
>>524
JPanelを継承してpaintComponentをオーバーロードして描画すればOK。
ただ、毎回描画しないと、ウィンドウが隠れた時とかに消えちゃうよ。
527デフォルトの名無しさん:2006/11/08(水) 20:51:20
swingなら描画はpaintでなくpaintComponentをオーバーライド汁
528526:2006/11/08(水) 20:53:16
>>527
オーバーロードじゃなくて、オーバーライドだった。。。
529493:2006/11/08(水) 20:58:04
これがそのソースです。
http://zetubou.mine.nu/timer/file/bomber29738_d7.xxx

>>502
これの25行目に続けて書いているのがエラーの原因でしょうか?
530デフォルトの名無しさん:2006/11/08(水) 21:09:22
>>529
ball[0] = new BallData(true,0,0,1,1,Color.orange);
ball[1] = new BallData(true,200,100,1,0,Color.blue);
ball[2] = new BallData(true,350,250,0,1,Color.green);
ball[3] = new BallData(true,200,250,0,0,Color.yellow);
ball[4] = new BallData(true,10,125,1,1,Color.red);
の前後を{}で囲え。つまり、
{
ball[0] = new BallData(true,0,0,1,1,Color.orange);
ball[1] = new BallData(true,200,100,1,0,Color.blue);
ball[2] = new BallData(true,350,250,0,1,Color.green);
ball[3] = new BallData(true,200,250,0,0,Color.yellow);
ball[4] = new BallData(true,10,125,1,1,Color.red);
}
その場所は、フィールドやメソッドの宣言か、
宣言と一緒に初期化するコードしか書けない。
単なる代入文は書けない。
{}で囲った部分はインスタンス初期化ブロックというもので、
ぐぐって調べてみるよろし。
531493:2006/11/08(水) 21:13:16
>>530
ありがとうございます、さっそく調べてみたいと思います。
532530:2006/11/08(水) 21:14:00
メソッドの宣言という言い方は変だね。
メソッドの定義?
533519:2006/11/08(水) 21:15:06
こんな感じで作ったのですが、いまいち描画されません。何がいけないの?

class hoge{
  JPanel p
  Jbutton btn
  public void paintComponent(Graphics g) {
super.paintComponents(g);
g.drawOval(10,10,300,300);
  }
  public hoge{
   btn = new JButton("click");
   p = new JPanel();
   setBounds( 10, 10, 1100, 1100);
   p.add(btn);
   p.setLayout(null);
   btn.addActionListener(new ActionListener()
   {
     public void actionPerformed(ActionEvent event){
       repaint();
     }
   });
getContentPane().add(p);
}

   public static void main(String args[]){
     hoge tr = new hoge();
   }
}
534526:2006/11/08(水) 21:24:37
上のレスにあるけど、
>actionPerformedでは図形のデータを登録するだけに汁
>JPanelを継承してpaintComponentをオーバーロードして描画すればOK。
ですよ。
今のクラスだと、paintComponentは誰からも呼ばれないよ。
535デフォルトの名無しさん:2006/11/08(水) 21:34:06
>>533
import java.awt.*;///
import java.awt.event.*;///
import javax.swing.*;///
class hoge extends JFrame { ///
JPanel p; ///
JButton btn; ///
boolean clicked;///
public hoge(){ ///
btn = new JButton("click");
btn.setBounds(10, 10, 90, 20);///
p = new JPanel() {///
public void paintComponent(Graphics g) { ///
super.paintComponent(g); ///
if (clicked) {///
g.drawOval(10,10,300,300); ///
}///
} ///
};
setBounds( 10, 10, 1100, 1100);
p.add(btn);
p.setLayout(null);
btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event){
clicked = true;///
repaint();
}
});
536デフォルトの名無しさん:2006/11/08(水) 21:34:43
続き
getContentPane().add(p);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);///
setVisible(true);///
}

public static void main(String args[]){
hoge tr = new hoge();
}
}
537519:2006/11/08(水) 21:38:03
ありがとう、まじでありがとうえ〜〜ん。ありがとう
538デフォルトの名無しさん:2006/11/08(水) 21:42:40
>>532
Java的には、新しい識別子を持ち込むものはすべて宣言(declaration)。
JLS6.1に宣言とは何か書かれているが、method declarationも含まれてる。

539デフォルトの名無しさん:2006/11/08(水) 21:47:05
WEB上でアプレットを起動させたい場合、サーバーに.classファイルとhtmlを
<html><body>
<applet code=”task.class” width=”600” height=”400”>
</applet>
</body>
</html>
とワードか何かで書いて、html保存でいいんでしょうか?
540535:2006/11/08(水) 21:47:22
>>537
いまいち描画されないどころかコンパイルを通らなかったなり。
動くコードを得てよかったよかった、でなく、
もう少しSwingやAWTの基礎の部分を勉強した方がいいと思う。
元のソースのテイストを残して修正したから、動くけど酷いコードだし。
541ぴゅあ:2006/11/08(水) 21:51:06
>>529
>>530が答えてくれているように
>宣言と一緒に初期化するコードしか書けない。

>ball[0] = new BallData(true,0,0,1,1,Color.orange);
は通常の式・・・なので書けない

>BallData[] ball = new BallData[]{ ... };

>BallData[] ball = new BallData[5];
は、なんとなく似ているようにも見えるけど、変数(フィールド)の宣言とオブジェクトの割り当てや初期化(初期値を与えること)を一緒に行うことは許されているので可

>>530の言っている初期化ブロックや静的初期化ブロックという手もあるだろうけど、何故そうすれば書けるのかは、メソッドの一種と捉えればたぶんいいんだろうと思う

が、いちおあまり好まれないことの方が?多いみたいです
Javaのベテランの人ってダメとは言うけど、何故ダメとするのか理由を答えてくれない傾向があるようなところもあって、推測するしかできないけど…
恐らく何時呼ばれるのかコードの流れとして見え難くなってしまうから
(或いは存在を見落としてしまう可能性があり得るとか@ドキュメント化して明記していたとしても)
とかいうところからだろうと思ったりしますけどね
個人的にコードを書く分には好みで十分とも言えるだろうと思いますけど
(あちしも滅多なことでは使ってないです)

取り敢えず素直に(?)>>493の前者やコンストラクタの中(この場合配列のnewも含めたり?)に
(示されたコードではinitメソッド内がいいのかな?)
書くようにしておくのがいいんじゃなかろうかと

何故(普通の?)メソッドの中の方がいい(だろう)かと言うと
本当に必要になるまでインスタンス化を遅らせたりするとか(その逆に最初に一気に作っておきたいという場合もあるだろうけど)
たぶん扱い易くもなったりするのかも?というようなところもあったりするだろうと思う
542530:2006/11/08(水) 21:54:08
>>538
なるほど〜
宣言でよかったのですか。ひとつ勉強になった。ありがとう。
543デフォルトの名無しさん:2006/11/08(水) 22:00:41
>>493
これではだめ?

class BallData{
boolean flag;
int iX,iY,iDisX,iDisY;
Color color;

public BallData setValue(boolean x_flag,int x_iX,int x_iY,int x_iDisX,int x_iDisY,Color x_color){

flag = x_flag;
iX = x_iX;
iY = x_iY;
iDisX = x_iDisX;
iDisY = x_iDisY;
color = x_color;

return this;

}
}

mainで以下を。
BallData ball[] = new BallData[2];
BallData p_bal = new BallData();
ball[0] = p_bal.setValue(true,0,0,1,1,Color.orange);
ball[1] = p_bal.setValue(true,200,100,1,0,Color.blue);
544デフォルトの名無しさん:2006/11/08(水) 22:07:57
JavaMailでメールをPOP受信した後、サーバー側のメールを削除するにはどうすればいいのでしょうか?
545デフォルトの名無しさん:2006/11/08(水) 22:17:48
>>544
Store#deleteMessageで削除。
546デフォルトの名無しさん:2006/11/08(水) 22:22:50
>>545
JavadocみてもdeleteMessageメソッドないお?
547デフォルトの名無しさん:2006/11/08(水) 22:26:37
java6の最新版使いたいんですが、buildの番号はどこで調べられますか?
あと、javaSEとjavaEEってどういう関係なんですか?
javaSEいれたらjavaEEも入ってくるのかな?

よろしくお願いいたします。
548デフォルトの名無しさん:2006/11/08(水) 22:44:05
>>546
javax.mail.Folder#setFlags() で、Flags.Flag.DELETED
549ぴゅあ:2006/11/08(水) 22:45:04
>>544
POPサーバーは
メールを読むにはコマンドを送って取り込み
削除をするにはコマンドを送ると削除マークを付けておいて切断時に削除する(サーバー側で)
だったんじゃないかと思うので

メールを読むとかに使ったものの周りに
たぶんそれらしきものがあったりするんじゃないだろうかと…
550ぴゅあ:2006/11/08(水) 22:47:06
追記

"読むのは読む","削除は削除"で
読んだ後に削除するかどうかとかという選択とかはない筈(だろう)という意味
551デフォルトの名無しさん:2006/11/08(水) 23:42:59
独自のデータ構造を持ったクラスAを持ったMap<Integer,A>のインスタンスを一時保存したくて
フィールドにMap<Integer,A>を持ったTempMap implements Serializable みたいなクラスを作ってみました。

ところが、実行してみるとオブジェクトの保存はできているみたいなのですが、
オブジェクトの読み込み(デシリアライズ?)のところでInvalidClassExceptionが出てうまくいきません。

シリアライズを用いてMapや独自クラスをそのまま保存することは無理なのでしょうか?
552ぴゅあ:2006/11/09(木) 00:13:49
>>551
まずはこれ
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/InvalidClassException.html

で、InvalidClassExceptionを言うだけでなくて
その後に肝心なところが示されているんじゃないかと思うけど。。。
553デフォルトの名無しさん:2006/11/09(木) 00:17:58
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/Serializable.html
こっちの方が直接的だと思うが。

出来るか出来ないかで言えば、きちんと実装すれば出来る、になる。
554551:2006/11/09(木) 00:24:57
すいません。全体のエラーですが下記みたいな感じです

java.io.InvalidClassException: TempMap; local class incompatible: stream classdesc serialVersionUID = 1092179690755622343, local class serialVersionUID = -4241137466232983300
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:519)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
at 実行クラスのreadObject()を呼び出している行


* クラスの直列化バージョンが、ストリームから読み込まれたクラス記述子の直列化バージョンと一致しない
* クラスに未知のデータ型が含まれている

上記のどちらかでしょうか?
555デフォルトの名無しさん:2006/11/09(木) 00:31:18
>>554
エラーメッセージ見て分からないなら、中学生からやり直した方が良いよ。
556デフォルトの名無しさん:2006/11/09(木) 00:47:51
>>547
java -version でビルド番号も表示されないか?

> javaSEいれたらjavaEEも入ってくるのかな?
いいえ。

557デフォルトの名無しさん:2006/11/09(木) 00:50:44
local class incompatible: stream classdesc serialVersionUID = 1092179690755622343, local class serialVersionUID = -4241137466232983300

ここだけで良いからちょっと頑張って訳してみなよ。
incompatible とか serialVersionUID だけで良いから。
直訳で良いから。
558551:2006/11/09(木) 01:00:26
>>555
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/Serializable.html
を眺めてて気づいたのですが、
どうやらクラスAにimplements Serializableをつけてなかったのが原因だったみたいです。
インターフェースを実装するのはTempMapだけでいいのかと思ってました^^;

UIDが一致しないとかいうエラーはなぜ出たのか未だによく分かってないのですが
結局、きもはそこではなく、NotSerializableExceptionだったみたいです。
お騒がせしました。

ありがとうございました。とりあえず、中学生からやり直してきまっす!!
559デフォルトの名無しさん:2006/11/09(木) 01:16:22
>>551
> どうやらクラスAにimplements Serializableをつけてなかったのが原因だったみたいです。

よくそれで直列化できたな、オイ。
560デフォルトの名無しさん:2006/11/09(木) 01:39:06
質問です
ファイルの入出力を使うときdat型で出来ますか?
561デフォルトの名無しさん:2006/11/09(木) 01:56:51
やさしいJavaを一通り読んで理解できたら次は何の本が良いですか?
今やさひいJavaをやりつつ独習Javaをやっている最中です。
独習JavaよりやさしいJavaの方がかなりわかりやすいと思いました。
562デフォルトの名無しさん:2006/11/09(木) 02:00:11
>>561
一通りできたら実践。
何かプログラム書いてみようや。
563デフォルトの名無しさん:2006/11/09(木) 02:06:01
プログラムはやっぱり書かないと駄目なんですね
564デフォルトの名無しさん:2006/11/09(木) 02:09:37
なんだdat型って
565デフォルトの名無しさん:2006/11/09(木) 02:17:24
>>564
データファイル
566デフォルトの名無しさん:2006/11/09(木) 02:33:23
何のデータファイルよ
567デフォルトの名無しさん:2006/11/09(木) 04:01:33
おまんこデータファイル
568ぴゅあ:2006/11/09(木) 07:34:01
>>564
そりゃそう
てか 何のために読んだの?
でしょ?

>>564
何処かで普通に出てきてそうな言葉ではあるけど・・・
あちしにも解らん。。。
569デフォルトの名無しさん:2006/11/09(木) 07:37:15
547です。
>>556
レスありがとうございます。
>java -version でビルド番号も表示されないか?
表示されました。ありがとうございます。
ところで、java6ってbuildが違うものが何個もアップされているのでしょうか?
ざっとみた感じだと、java6beta2てのが1個あるだけなのですが、これが最新版でしょうか?

>> javaSEいれたらjavaEEも入ってくるのかな?
>いいえ。
すみません。てことは、javaEEも別途入れる必要があるということですね。
570デフォルトの名無しさん:2006/11/09(木) 07:46:45
>>569
最新は https://jdk6.dev.java.net/ から。今は b104が最新かな。
571デフォルトの名無しさん:2006/11/09(木) 07:57:32
>>569
何か勘違いしているようだけど、JavaSE や JavaEEは仕様を表す言葉であって
特定のソフトウェアを表す言葉ではないよ。
「JavaSEを入れる」「JavaEEを入れる」は間違い。
「JDKを入れる」「JavaEE仕様に準拠したアプリケーションサーバを入れる」が正しい。
572デフォルトの名無しさん:2006/11/09(木) 08:01:52
>>547
JavaSE仕様では、JVM仕様とかコアAPI(java.langやjava.utilなど)仕様とか、
JDBC仕様、JNDIサービス仕様、デスクトップ環境API(AWTやSwing)仕様が規定されている。
JavaEE仕様では、Servlet/JSP/JSF/EL/JavaMail/EJB/JMS等の仕様が規定されている。

そして、これらの仕様に準拠したソフトウェアを各社(IBMとかSunとかBEAとか)が
自社製品として実装して、販売・配布している。
573デフォルトの名無しさん:2006/11/09(木) 08:18:03
私も未だにJavaEEが何かよくわかってない。。。
sunのページでダウンロードできるJavaEEって、
(http://java.sun.com/javaee/index.jsp)
開発できるライブラリが入っているだけだよね?
SDKって書いてあるから、WASじゃないよね?

JBossはJavaEEに準拠したアプリケーションサーバってはわかるんだけど、
JBossの開発にJavaEEのSDKを入れたなんてことないので、もう私には訳がわかりません。
574デフォルトの名無しさん:2006/11/09(木) 08:27:44
>>573
JavaEE SDKも、JBossも、JavaEE仕様に準拠したソフトウェア。
JBossを使うのであればJavaEE SDKは要りません。
JavaEE SDKは、ライブラリだけじゃなく
アプリケーションサーバもDBも含んでいます。
実行・テストできる環境も含んだオールインワンパッケージです。

※ただし、JBossはJ2EE1.4仕様完全準拠であってJavaEE5仕様完全準拠ではない。
 (J2EEからJavaEEに名前が変わった。)
575573:2006/11/09(木) 08:34:25
>>574
なるほど〜。え?DBまで入ってるんですか。JavaEE SDKってすごいな〜。
勉強になりました。ありがとうございます!!
576デフォルトの名無しさん:2006/11/09(木) 11:03:44
>>559
だから直列化失敗したんだろw
577デフォルトの名無しさん:2006/11/09(木) 13:44:40
JLayarePaneについて聞きたいんですが
実装の仕方はどうすればいいのか教えて下さい
578デフォルトの名無しさん:2006/11/09(木) 14:49:15
JLayeredPaneはクラスだから「実装」は出来ない。

という答えはたぶん的外れだろうからもう一度何が聞きたいのか分かるように書き直してくれ。
579デフォルトの名無しさん:2006/11/09(木) 15:18:16
String から『指定された文字(列)』を探すのは標準メソッドで出来るのですが、
『指定された文字「のみ」で構成されているか』は
(例:abcと123だけで文字列が構成されているかどうか)、
for や while の入れ子で行うしかないのでしょうか。
580デフォルトの名無しさん:2006/11/09(木) 15:25:53
581デフォルトの名無しさん:2006/11/09(木) 15:35:10
StrignBufferクラスについて質問なんですが
初期化だけしたStringBufferオブジェクトでtoString()メソッドを使うと
返ってくる文字列はなんですか?

nullだと思ってたのですがnullの判定に引っかからないので困ってます。
長さ見ると0なんですがorz
582デフォルトの名無しさん:2006/11/09(木) 15:43:00
>>581
つまり
  StringBuffer sb = new StringBuffer();
  String str = sb.toString();
を実行したときの str の値だね?
Stringクラスのオブジェクトそれ自体は存在し、str にはそれへの
参照が入るわけだから str == null にはなりません。ではどうなる
かというと ”” (空文字列)になる。
  if (str.equals("")) { .... }
で判定できるはず。

583デフォルトの名無しさん:2006/11/09(木) 15:46:28
>582
それでやってみます
レスありがとうございました
584デフォルトの名無しさん:2006/11/09(木) 15:46:55
サーブレットでリストボックスからファイルパスを選択したものだけアップロードしたいんだけど、
アイデアないっすかね…
サンプルとか見つからなくて困ってます。

ご教授ください。
585デフォルトの名無しさん:2006/11/09(木) 16:05:00
長さが取れる(=lengthフィールドアクセサが使える。Stringはちょい特殊だが)時点でnullではないからnull判定に引っかからないのは当然。
586デフォルトの名無しさん:2006/11/09(木) 16:14:04
ぬるぽが嫌なら"".equals(str)にすれば良い
587デフォルトの名無しさん:2006/11/09(木) 16:16:11
>>584
リストボックスからファイルパスを選択? あんま見たこと無いUIだな。
状況が思い浮かばんのでよくわからんが、リストボックスなら選択されたものだけ拾えばOKだし
テキストフィールドなら、(スペースを削った状態で)入力されてるかどうかで判断すれば。
588デフォルトの名無しさん:2006/11/09(木) 16:46:49
hogeString.epuals("") より hogeString.length() == 0 の方が高速
589デフォルトの名無しさん:2006/11/09(木) 16:59:28
あ、Stringはlength()だったな。フィールドじゃねーや。
# なんで配列だけlengthなのやら。
590デフォルトの名無しさん:2006/11/09(木) 17:29:29
質問です
Eclipseを使っていてアプレット作成したのですが
「Fatal exception occurred. Program will exit.」の
メッセージウィンドウが出て
コンソール部に
java.lang.NoSuchMethodError: main
Exception in thread "main"
と出て実行されません

コンパイルは通っているのにどうしてですか?
591590:2006/11/09(木) 17:30:37
ソースです↓
import java.applet.Applet;
import java.awt.Graphics;
/*
<applet code="test" width=200 height=200>
</applet>
*/

public class test extends Applet {
public void paint(Graphics g) {
g.drawString("This is my first applet!", 20, 100);
}
}
592デフォルトの名無しさん:2006/11/09(木) 17:45:12
>>591
code="test.class" にしなくてもいいの?アプレット良く知らんけど。
593590:2006/11/09(木) 17:53:47
>>592
早速返答ありがとうござます!
変えてみましたが状況は変わりませんでした
594デフォルトの名無しさん:2006/11/09(木) 17:57:06
何をしたらメッセージウィンドウが出たか書いてないけど

Eclipse 上から実行しようとしたんだろうか?
その場合、Applet として実行しないとダメだよ。
Application として実行しようとすると、
当然 main がないと怒られる。
595デフォルトの名無しさん:2006/11/09(木) 18:02:45
>>594
Eclipse 上から実行しました
前回Eclipseで実行したときはアプレットビューアで
表示されましたが出来なくなってしまいました
596デフォルトの名無しさん:2006/11/09(木) 18:04:37
>>2
それは荒らしが立てたスレでしょ
597デフォルトの名無しさん:2006/11/09(木) 18:07:25
FindBugsを実行したら
引数に配列型をとるメソッドで
警告がでました。

配列そのものを引数でfinalに
しても配列の要素までfinalにできないので
どうしようか困っています。
Connections.unmodifialList()は配列型ではなくList型に
なってしまうため、もっといい方法はないかと模索中です。
Genericsを使えるわけでもなさそうなのですが、何か
いいほうほうがあるでしょうか?
598592:2006/11/09(木) 18:10:15
>>595
試しに同じのやってみたら、Eclipse上でもブラウザでも動いたよ。
あと、「.class」っていらないんだね。
ちなみに、Eclipseの場合は警告出た。プロパティないよって。
599デフォルトの名無しさん:2006/11/09(木) 18:15:52
jarにすれば問題ないよ
600590:2006/11/09(木) 18:18:24
>>598
何が違ったのだろ・・・
未だに解決されないorz
601590:2006/11/09(木) 18:33:26
お騒がせしました。
ツールバーの実行ではなく、右クリックの実行で解決しました。
返答してくれた人や考えてくれた人ありがとうございます。
602デフォルトの名無しさん:2006/11/09(木) 21:13:10
ソケット通信の質問なんですけど
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28470
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28471
上がサーバー、下がクライアントのプログラムで、
3台のPCで1台でクライアント、他2台でサーバーA、Bを立ち上げ
クライアントからサーバーAにメッセージを送って、サーバーAがその受け取ったメッセージをサーバーBに送る
っていう風なプログラムにするにはどうしたらいいですか?
603ぴゅあ:2006/11/09(木) 21:26:45
>>584
要はテキスト(ファイル)ボックスから1個送るのをリストボックスに変えただけでしょ?
そのリストボックスにどうパスを設定しようとしてるのかは判らんけど。。。

でもブラウザ?からテキスト(ファイル)ボックスの代わりにリストボックスでどう処理するのかは・・・
JavaScriptで突っ込んでsubmitしてやれば送れるのかなぁ?
1個限定ならなんとなくやれたりするんじゃなかろうか?と思ったりもするけど。。。
(複数ファイルは(一括は無理と仮定して)ダミーのウィンドウを開きつつ
そっちでsubmitさせてみるとか?
その場合のセキュリティ上とかの制限とか…どうなるんだろ
できるんかな。。。)

>>568間違えてました。。。
1個目は>>563
604デフォルトの名無しさん:2006/11/09(木) 21:47:23
>>602
まずは、サーバとクライアントだけで通信してみて。
これができれはあとは簡単。
サーバAからサーバBにメッセージを送る場合は、
サーバAをクライアントとして機能させればOK。
605ぴゅあ:2006/11/09(木) 22:28:01
>>602
>>604の言ってるのそのままみたいなもんだけど
クライアント〜サーバーA間はたぶんできていると思うので
(ここは明確にクライアント(クライアント)〜サーバーA(サーバー)の関係でしょう)

サーバーA〜サーバーB間にコネクションを張っておいて(或いはクライアントから送られる度なのか)
receive(readObject)した後にサーバーBに向けてsend(writeObject)すれば
コネクション部分はクライアント〜サーバーA間でできているものをそのままサーバーA〜サーバーB間でやれば
サーバーA(クライアント)〜サーバーB(サーバー)とすると例としては自然かもだけど
サーバーA(サーバー)〜サーバーB(クライアント)というのも面白いかも
(サーバーAがセンタになって管理するとか@そこはうまく行った後の延長として)
606デフォルトの名無しさん:2006/11/10(金) 00:03:24
f(x)=x-cosx=0の解を逐次代入法、ニュートン法を用いてそれぞれで解く
プログラムを作れって課題なのですが、ヒント一切無しでプログラムが苦手な
漏れには全く手が出ませんorz
何か参考になるようなHPでも紹介してもらえないでしょうか?
ぐぐってもCばっかでJAVAがないorz
おながいします
607デフォルトの名無しさん:2006/11/10(金) 00:08:38
来年からSEとなる者なんですが、4月に受ける基本情報技術者試験の言語をどれにしようか迷っています。
文型なもので簡単といわれているCOBOLかCASLUにしようと思っているのですが、やはり実務で使えるCOBOLの方がいいのか?
それとも先のことを考え、需要の多いJavaにした方がいいのか・・・
みなさんのご意見お願いします。
608デフォルトの名無しさん:2006/11/10(金) 00:11:11
入る会社の業務内容に沿ったものにしろ。
文系でもJavaで問題ない。
※文系なのに「文型」は無いだろうよ・・・
609デフォルトの名無しさん:2006/11/10(金) 00:16:09
>>606
Cが参考にあればJavaもできるだろ。
610デフォルトの名無しさん:2006/11/10(金) 00:17:46
CASLUをオススメする。なぜなら俺がそうしたから(CASL時代だが)。
機械語とデザインパターンの両方を知っておくといい。
611デフォルトの名無しさん:2006/11/10(金) 01:03:25
>>606
Cのソースがあるならもう半分以上出来たようなもんだと思うけど
CもJavaもよく分からないなら先ほどの宿題スレで依頼するのも手
ただしその場合は宿題スレの>>1のテンプレを使って依頼すること
612デフォルトの名無しさん:2006/11/10(金) 01:36:29
我は、CASLIIをお勧めする。
これはCにもJAVAにも通ずる基礎的プログラミング能力を与えてくれるであろう。
試験対策も行ない易くCやJAVAを選択するより合格率の上昇が見込まれる。
613デフォルトの名無しさん:2006/11/10(金) 01:49:11
614デフォルトの名無しさん:2006/11/10(金) 04:52:25
JPanel a,bに背景を書き込み、
JLayeredPane
JFrameでbの何も描かれていない部分はaを透過して表示する、という風にしたいのですが
やり方が上手くいきません。
extends JFrame{
JPanel a = new JPanel();
JLayeredPane layerPane = new JLayeredPane();
layerPane.add (a);
layerPane.add (b);
layerPane.setLayer (a,1);
layerPane.setLayer (b,2);
getContentPane ().add (layerPane);
}
このようにしてもウィンドウ内は真っ白で、
JPanel a,bに書かれているものが表示されません。

どうやれば良いでしょうか?
615デフォルトの名無しさん:2006/11/10(金) 07:56:43
>>614
まずJLayeredPaneを使わないで、JPanelに書いたものって表示される?
616デフォルトの名無しさん:2006/11/10(金) 09:26:50
getContentPane ().add(a);
とした場合、aに描かれているものは表示されます
617デフォルトの名無しさん:2006/11/10(金) 09:42:07
>>614
JPanel bがインスタンス化されていないのでは??
618デフォルトの名無しさん:2006/11/10(金) 11:04:03
現在WindowsにJAVAのSDKを、
複数(別バージョン)インストールしています。
この状態で、コマンドプロンプトで java -version を実行すると、
最後にインストールしたSDKのバージョンが表示されます。

ここで質問ですが、
以前は環境変数のpathにJAVAのbinを追加していたのですが、
今は、パスはどこに設定されているのでしょうか?

環境変数を確認しても設定されていませんでした。
619デフォルトの名無しさん:2006/11/10(金) 11:23:02
JRE入れると、%WINDIR% に java.exe と javaw.exe 突っ込むから、
それを見てるんだろ。
620614:2006/11/10(金) 11:31:16
>>617
bだけではなく、aも表示されないんです。
JPanel a = new JPanel();
JPanel b = new JPanel();
JLayeredPane layerPane = new JLayeredPane();
layerPane.add (a);
layerPane.add (b);
layerPane.setLayer (a,1);
layerPane.setLayer (b,2);
getContentPane ().add (layerPane);

↑何も表示されない
↓チカチカとaとbが交互に表示される
JPanel a = new JPanel();
JPanel b = new JPanel();

getContentPane ().add (a);
getContentPane ().add (b);

やりたい事:
bの何も描かれていない部分にaを背景として適用する。
(フォトショップのレイヤーみたいな感じで)

言いたい事が分かってくれるか不安orz
621デフォルトの名無しさん:2006/11/10(金) 11:31:23
>>618
JDKのWindowsインストーラは、java.exeをWindows\system32にコピーする。
java -version で実行されたのは、このディレクトリにあるjavaコマンドだろう。
java.exeがどこにあるか、ファイルシステム上を検索してみればわかる。
622デフォルトの名無しさん:2006/11/10(金) 11:42:38
>>619
>>621
確かにC:\WINDOWS\system32配下にありました。どうもです。
ただ、EXEはあるのですが、近くにDLLとかjarがいませんね。
どうなってるんだろう?
623デフォルトの名無しさん:2006/11/10(金) 11:49:36
>>622
確かレジストリを見れば、JRE をインストールしたディレクトリがわかるはずだから
それ使えば近くに dll も jar も無くても大丈夫。
624デフォルトの名無しさん:2006/11/10(金) 12:10:53
>>620
一度落ち着いてAPI ドキュメントを読め。
>指定されたコンポーネントのレイヤ属性を設定し、レイヤ内で一番下のコンポーネントとします。
>親に追加する前に呼び出す必要があります。
setLayer の意味を間違えてる上に、add してから呼び出してる。

まずは setLayer は使わないで

layerPane.add (a, 1);
layerPane.add (b, 2);
getContentPane ().add (layerPane);

したらどう?bが表示される?

その後で opaque について調べてみるとか。
625618:2006/11/10(金) 12:33:33
>>623
最近のjava.exeはレジストリを見ているのですね。
ちなみに、何か問題出そうだなと思い、
5.0 Update 8と5.0 Update 9を入れてから、
5.0 Update 9を削除したところ、
system32配下のjava.exeもちゃんとUpdate 8のものに置き換わりました。
よくできてますな〜。
626デフォルトの名無しさん:2006/11/10(金) 14:31:57
java.sql.Statementの
execute/executeQuery/executeUpdate って使い分けた方がいい?
627デフォルトの名無しさん:2006/11/10(金) 19:24:18
>>626
executeは今まで使ったことがない。。。
どうやったら複数のResultSetを返すSQLを書けるんだろう。
628デフォルトの名無しさん:2006/11/10(金) 22:29:41
nullに有効な参照を渡す処理はアトミックに処理されますか?
629デフォルトの名無しさん:2006/11/10(金) 23:14:27
>>628
されるよ。
630デフォルトの名無しさん:2006/11/10(金) 23:23:53
>>629
ありがとう。AtomicIntegerとか知って心配になってた所でした。
てかnullに参照を渡すってくだりはよくよく考えたらおかしいねw
631ぴゅあ:2006/11/10(金) 23:30:57
>>620
きちんと確認はしてないけど
なんちゃらPaneってたぶんレイアウトマネージャを持ってたりするんじゃないのかな?
確認してみるのがよいような気もする

それとJPanelにサイズとか設定してやらなくてもいいんだろうか
(使っているレイアウトによるだろうと思う)

例えば"テキストをちゃんと設定した"JLabelで簡単に試してみとくとか?


>>626
確かあちしはexecuteくらいしか使ったことなかったと思うけど…
使い分けるかどうかは好みだったりもするのかも?
(あまり真面目に見て使ってなかったので・・・(汗))
632デフォルトの名無しさん:2006/11/10(金) 23:49:06
文字(char)からシフトJISの文字コードを取得することってできますか?
UNICODEではだめなんです
633デフォルトの名無しさん:2006/11/11(土) 00:10:08
>>632
String.valueOf('あ').getBytes("Shift_JIS")
634デフォルトの名無しさん:2006/11/11(土) 00:14:02
Shift_JISよりWindows-31Jの方がいい?
635デフォルトの名無しさん:2006/11/11(土) 00:22:37
>>597
防御的にコピーを行う
setterではclone()して保持、getterではclone()して返却

アトミック型や不変オブジェクトならclone()でいいけど、
可変オブジェクトなら深くコピーしなきゃならないかもしれない
Findbugsはそこまで神経質じゃないし、
Collections#unmodifiableList()でもそのへん事情は同じだから、そこは用途に応じて

詳しくはEffective Javaあたり
636デフォルトの名無しさん:2006/11/11(土) 00:24:48
コードレビューよりJTestとかを信用する顧客が相手だとノイローゼになりそうになる
637614:2006/11/11(土) 10:40:31
>>624
aもbも表示されません
opaque もtrue.falseで試しましたが効果無しでした
638519:2006/11/11(土) 14:36:27
>535 536
書いてくれた人本当にありがとうね。
俺これ参考にどんどんプログラム作っていけるわ。
まじ感謝しまくっている!! 
639デフォルトの名無しさん:2006/11/11(土) 23:47:09
javaでメモリがどのように確保するか教えてください
例えば、MyClass型があるとして、

MyClass a = new MyClass();
MyClass b = a;
MyClass c = a;

とやった場合、MyClassのインスタンス一つ分のメモリと
宣言した三つ分の参照型のメモリが確保されると思うのですが、
具体的に何バイト分確保されるか教えてください
640デフォルトの名無しさん:2006/11/12(日) 01:11:01
C#を使っていたのですが、Javaにも興味を持ちました
それなりに使えるようになりたいのですが、Java特有の機能やC#との大きな違いなどを教えてください
641デフォルトの名無しさん:2006/11/12(日) 01:23:09
>>640
Javaの何に興味を持ったの?
642デフォルトの名無しさん:2006/11/12(日) 01:24:16
>>639
VMの実装次第
643デフォルトの名無しさん:2006/11/12(日) 02:08:58
>>642
ありがと

あと、Hashtable使って

//略
MyClass a = hashtable.get(key);
a.setX(4);

みたいな場合、hashtableのgetで取ってきた中身も変わりますか?
644デフォルトの名無しさん:2006/11/12(日) 02:39:35
>>643
試せばいいけど・・・
MyClass a = hashtable.get(key);
a.setX(4);
MyClass b = hashtable.get(key);
をして取ってきたbは、aと同じインスタンスを指す。
a==b は真だ。
645640:2006/11/12(日) 09:33:21
>>641
私は高二なのですが、行きたい大学全てがC++とJavaを採用していました
さらに「Javaはネットワークに強い」という話も聞きますので、どうせなら早く習得しておきたいと思ったんです
646デフォルトの名無しさん:2006/11/12(日) 12:12:39
>>645
言語レベルでサポートされているかどうかが違う。
C++なら環境ごとにネットワークプログラミングの方法は異なる。
647デフォルトの名無しさん:2006/11/12(日) 13:15:29
この時代、ネットワークに弱いと損するから
あらゆるものがネットワークに強いとか対応してるとかって宣伝してる。
648640:2006/11/12(日) 13:28:02
>>646,647
「Javaはマルチプラットフォームに対応するため、コンパイル時に中間言語を生成する」などの有名な情報は知っています
実際にEclipseを使って乱数やGUIを勉強しているうちに「C#よりも不便だ」と感じるとともに、「大学が採用する理由」もわかってきました
.NETのように至れり尽くせりな環境だと概形しか学べませんよね
改めてJavaを勉強したくなりました

私が教えていただきたいのは
 ・名前空間は無いがパッケージがある
 ・usingではなくimportを使用する
 ・ストリームでObjectを扱えるようになった
 ・マルチスレッドの生成
  C#:Threadクラスのインスタンス生成、ThreadPoolへの追加etc..
  Java:Threadクラスの継承、Runnableの実装
などのプログラミングに直接関わることです

上記は自分で調べました
時間を掛けてやっていきたいのですが、部活と資格の勉強で忙しいのです;;
私が前述したようなレベルのもので構いませんので、よろしければ教えてください
649デフォルトの名無しさん:2006/11/12(日) 13:30:54
「Javaはネットワークに強い」といわれてたのは昔のこと。
それなりに使えるネットワーク関連のライブラリ(TCP/IPとかRMIとか)が標準でそろってたのと、
サンドボックスモデルで一応のセキュリティを提供していたのが、当初のアドバンテージだったけど、
今じゃ特別のことでもないような。.Netにも相応の機能はあるし。

C#分かるのなら、Java始めてもあまり困らないよ。
言語仕様的には、delegateとpartial classのないC#と思っていればいい。
ただ、ライブラリの構成が結構違う。特にGUIとWebアプリ関連はまるで違うので、そこは覚え直しになる。
また、Javaには.NetのVS.Netみたいな標準のIDEという物がないので、
Windows.FormsやASP.NET用のビジュアル開発環境に慣れていると取っつきづらいかもしれない。
一応、NetBeansやEclipse Visual Editorとか各種IDE付属の機能としてはあるけど、
VS.NETと比べたら貧弱さは否めない。
650デフォルトの名無しさん:2006/11/12(日) 13:39:08
>>648
・usingではなくimport
これはsyntaxが違うだけで、意味は同じ。

・ストリームでオブジェクトが扱える
.Netでも扱えなかったっけ?JavaならObjectInputStreamとか使うけど。

・マルチスレッド
悪いが、スレッドの話全体をここで聞くのは無理がある。
基本はこうかな。
Thread thread = new Thread(new Runnable(){
 public void run(){
  // スレッドで行う処理
 }
});
これ以上の同期とかロックとかの話は、本を読んだ方が早いしわかりやすい。
変に荒れたり当てずっぽうの回答に悩まされたりしなくていいし。
651ぴゅあ:2006/11/12(日) 13:43:20
>>645
C#ってやったことがないので比較の仕様がないけど
(VC++の延長?VJ++??みたいな?)

たぶん挙げても沢山ありすぎて…とかだろうと思うし
やってみて感じるのが一番と思うけど。。。
(挙げてもらったとしてもC#に対しても現状何処まで解っているかとかもあるんだろうし)

たぶん大きな違いとしてC#はWinに特化したもの(?)というところとかから
C#に対してWin環境に対して細やかなことができないから不便だ
とかいうことになって
Javaダメダメやんとかいうことになったりすることもあるのかもだけど

C#をシッカリ習得してきていると思えるのなら
サクッと書籍の触りの部分でも読んでみれば判るんではないかと
人に聞くよりいいような気がする
(批判とかとして聞きたいなら別だろうけど)
652640:2006/11/12(日) 13:47:58
>>649
詳しい解答ありがとうございます

>Windows.FormsやASP.NET用のビジュアル開発環境に慣れていると取っつきづらいかもしれない。
まさにそうでした
イベント処理をさらに深く理解するいい機会とでも思いますw

>>650
>・ストリームでオブジェクトが扱える
>.Netでも扱えなかったっけ?
できますが、インタフェース実装などの手間が多いんです;

ここでスレッドに関する全てを聞こうとは思っていません
私が教えていただきたいのは「こういう違いがあるよ」という足がかりです
それさえ示していただければ、後は自分で掘り下げていきます
653ぴゅあ:2006/11/12(日) 13:49:00
>>648
>時間を掛けてやっていきたいのですが、部活と資格の勉強で忙しいのです;;
そこをなんとかすることじゃないのかな?

そんなこと言ってるようじゃ
何時になっても変わらないんじゃないんでしょうか

大学行っても忙しい,時間がないとか
仕事としてもやることを考えているのかどうか知らんけど
更に忙しい,時間がないとかいうことになっていそうに思えるけど

あと、忙しい,時間がないに加えて「短期に習得」とかの意識はあったりしないですか?
654640:2006/11/12(日) 13:58:24
>>651,653
C#については半年間使っていました
自分ではほぼ全ての基本事項を押さえたつもりです
さらにJavaの性格上、Win上での多少の不便は心得ています

>批判とかとして聞きたいなら別だろうけど
批評のようにはなるかもしれませんが、一方的な批判をするつもりはありません

>あと、忙しい,時間がないに加えて「短期に習得」とかの意識はあったりしないですか?
大学で履修予定ですので、それまでに基本を勉強したいんです
部活は3年の引退までやるつもりですが、資格についてはJavaに時間を割けます
655デフォルトの名無しさん:2006/11/12(日) 14:09:29
うるせーよ。
656デフォルトの名無しさん:2006/11/12(日) 14:15:27
>>640
649氏と一部かぶるが
・delegate がない。
・プロパティがない。
・protected のスコープがパッケージまで及ぶ。
・チェック例外とチェックしない例外がある。
・struct 相当のユーザー定義型はない
・ref/out に値する引数の渡し方はない。
・switch の case 式に String を使えない。
・属性(attribute)に似た注釈(annotation)がある。
など。細かい違いは多数あるが、C/C++ ほど違うわけじゃない。
後発だけあって C# の方が言語構文は優れてると言う意見が支配的。
(プロパティとdelegate、ref/out が特に素晴らしいと個人的に感じる。)

画面作ることに関しては VS.NET より Eclipse+VE の方が好き。
動作がとてつもなく遅いがリファクタリングの正確さや
ファイル配置・変数配置の自由度が上だと感じる。
これはもう個人の感想だけど。
657デフォルトの名無しさん:2006/11/12(日) 14:16:57
>>654
時間がないなら流し読みの技術身につけた方が良いよ。
あと部活がどうとか、誰も聞いてないこと書く必要ないから。
(読む側の時間も考えてくれよ。)
658640:2006/11/12(日) 14:38:20
>>656
まさに私が知りたかったことです!
後は掘り下げていくうちに数珠繋ぎでわかっていくかと思いますので、自分でやっていきます
ありがとうございました

>>657
忙しい理由も添えないと、ただの「怠慢」に取られそうでしたので。。
無理に読ませようとは思ってませんので、煩雑に感じたなら無視してください


迷惑掛けてるようなので去ります
ありがとうございました
659デフォルトの名無しさん:2006/11/12(日) 14:42:30
言い方がキツかったか。
迷惑ってほどでもないので、またつまったら来るヨロシ。
ID出てないから証明しようがないけど、
656,657 は同一人物(俺)による発言だよ。
660デフォルトの名無しさん:2006/11/12(日) 14:52:35
きんもーっ☆
661デフォルトの名無しさん:2006/11/12(日) 15:10:45
DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(0.2, "売上高", "2001年");
dataset.addValue(2.2, "売上高", "2002年");
dataset.addValue(5.1, "売上高", "2003年");
dataset.addValue(9.8, "売上高", "2004年");
dataset.addValue(12.0, "売上高", "2005年");

JFreeChartのデータの部分をcsvファイルから追加したいのですがどのようにしたらできますか?
csvファイルの中身は下記の通りです。
0.2,売上高,2001年
2.2,売上高,2002年
5.1,売上高,2003年
9.8,売上高,2004年
12.0,売上高,2005年
662デフォルトの名無しさん:2006/11/12(日) 15:52:24
>>651
C# ≒(Java + C++)/2
みたいなもんだと俺は思ってる
663デフォルトの名無しさん:2006/11/12(日) 15:54:37
>>656
> 後発だけあって C# の方が言語構文は優れてると言う意見が支配的。
> (プロパティとdelegate、ref/out が特に素晴らしいと個人的に感じる。)

俺としては、それも素晴らしいとはとても思えなかった。
アノテーションより先に属性を導入した点だけはC#にアドバンテージが
あったと見えたけど、それ以外は大したことがないというか
664デフォルトの名無しさん:2006/11/12(日) 16:05:55
>>663
と、Java基地外が悔しさ紛れにつぶやいております。
665デフォルトの名無しさん:2006/11/12(日) 18:45:51
とりあえず、他の言語と比較するなら、しっかり使ってからにしろと。
一部かじっただけでは批評ではなく第一印象。
666デフォルトの名無しさん:2006/11/12(日) 21:52:27
すみません、全くの初心者なのですが、
>>472を作り方かヒントだけでも、お願いしますorz
いろんなサイト見たけど、分かりません、、、
667デフォルトの名無しさん:2006/11/12(日) 22:24:53
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28470 クライアント
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28471 サーバー
ソケット通信のプログラムなんですが、2台のPCでサーバーを構築してサーバーからサーバーへのメッセージを転送するには
どうしたらいいんでしょうか。クライアントのconnectToServer();の記述を加えたりしてみたんですができなかったので・・・
668デフォルトの名無しさん:2006/11/12(日) 22:24:56
じゃあ、あきらめてください
669デフォルトの名無しさん:2006/11/12(日) 22:39:30
JTextField で文字制限はプログラムで書けばできるのですが、
| |
スペースキーをずっと押していると文字がフィールド内に収まらず隠れてしまうのですが
何かいい方法があれば教えてください。
670ぴゅあ:2006/11/12(日) 23:31:56
>>667
>できなかったので・・・
やったのなら、どうできなかったかというものがあったりする筈ですが。。。
(それは書かれてないので置いといて)

「2台のPCでサーバーを構築してサーバーからサーバーへのメッセージを転送する」の前に
まずその既にあるクライアント,サーバーのソースコードがよく理解できていないことが
現れているようにも思えます
671ぴゅあ:2006/11/12(日) 23:36:49
>>669
>JTextField で文字制限はプログラムで書けばできるのですが、
>スペースキーをずっと押していると文字がフィールド内に収まらず隠れてしまう
まず
・フィールドの幅を広げれば済むことなのか
・フィールドに文字数制限を掛けることができていないのか
或いはその他の問題なんでしょうか?
672デフォルトの名無しさん:2006/11/13(月) 00:46:43
教えてください
「requestFocusInWindow」
これどのような処理だかわからないです
673デフォルトの名無しさん:2006/11/13(月) 01:52:11
>>664
またお前Javaスレを荒らし始める例のAA厨かよ
674デフォルトの名無しさん:2006/11/13(月) 06:09:18
質問でございます。
int aの中身が1,3,5,7,8,10,12の場合の処理が同じ。
4,6,9,11の場合の処理が同じ。
2だけ違う処理。

という構文を書く場合if文ではif(a == 1 || ...)と書くのは大変です。
しかしswitchで書く場合は処理をその都度書く必要があるので大変です。
12通りは必要になります。

処理は各々のメソッドに入れるものとして構文自体をもっと簡単に書く方法はありませんか?

勉強不足ですみません。
よろしくお願いします。
675デフォルトの名無しさん:2006/11/13(月) 06:49:31
>>674
switchのbreak削ったらいいじゃね?
676デフォルトの名無しさん:2006/11/13(月) 06:57:55
>>675
わかりにくい分ですみません。
例えばswitch文に例えるなら

switch(a) {
case 1 : System.out.println(); break;
case 2 : System.out.print(); break;
case 3 : hoge(); break;
}
ではなく
switch(a) {
case 1, 3, 5, 7, 8, 10, 12 : System.out.print(); break;
case 4, 6, 9, 11 : System.out.println(); break;
}
の様に同じ処理をする変数の場合まとめて書くことができないのか?
できるだけ短く記述できないでしょうか?という事です。
677デフォルトの名無しさん:2006/11/13(月) 07:01:44
try & catch文を使う際にある範囲内での数字以外例外を吐き出すという事は可能でしょうか?
標準入力を使いint xの場合1 < x <100の間以外の数字を入力された
場合例外を吐き出す、または再度入力を促す様にしたいです。
よろしければご教授ください。
678675:2006/11/13(月) 07:12:56
>>676
これじゃだめなのかな?

switch(a)
{
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12:
  //処理(1)
  break;
 case 4:
 case 6:
 case 9:
 case 11:
  //処理(2)
  break;
 case 2:
  //処理(3)
  break;
}
679デフォルトの名無しさん:2006/11/13(月) 07:15:54
>>677
throw
680ぴゅあ:2006/11/13(月) 07:39:31
>>677
if構文の使い方が解らない?
だとすれば基本的な部分を学び直すということになると思うけど

>例外を吐き出す
>>679の言うthrowの使い方を知ることだろうけど

>再度入力を促す様にしたい
do〜whileループ(使いそうなときは稀なので怪しいけど…確かJavaでもあった筈?)の使い方とか
これも基本的な部分になると思うけど

サンプルを示して解説されているようなもので理解してみるのがいいかも
ってところなのかな?
681デフォルトの名無しさん:2006/11/13(月) 10:21:47
>>679
Exceptionの使い分けがよくわからなくて…。

>>680
できれば

try {
BufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("数値を入力してください");
int a = Integer.parseInt(input.readLine());
} catch(Exception e) { //ここが怪しいです
System.out.println("範囲外の数値が入力されました");
}

の様に使いたいです。

int a = Integer.parseInt(input.readLine());
if(1 < a && a < 100) {
System.out.println("範囲外の数値が入力されました");
}
とするべきでしょうかね?

良くないのは知っていますがgoto構文などが使えれば凄く楽になると思っています。
682676:2006/11/13(月) 10:32:09
>>678
すみません意味を理解できていませんでした。
わざわざどうもありがとうございます。

アルゴリズムの習得?というか練習の為パッケージを使用せずにカレンダーを
作ろうとしてるんですけど曜日の概念だけがとても難しいですね。
現時点ではまだ入力された月を表示する位のつもりですけどそれでも曜日が難しいです。
また詰まったら質問しに来ると思うのでその時はよろしくお願いします。
683デフォルトの名無しさん:2006/11/13(月) 12:07:38
case 1, 2, 3: とは書けないが、 case 1: case 2: case 3: と並べることは可能。
それだけのこと。

switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
System.out.println("大の月");
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
System.out.println("29日");
} else {
System.out.println("28日");
}
case 4: case 6: case 9: case 11:
System.out.println("小の月");
default:
System.out.println("ぶっちゃけありえなーい");
}

曜日はツェラーの公式を検索してきて使えばよろし。
(難しい式でもないし)
684デフォルトの名無しさん:2006/11/13(月) 13:17:48
C#には将来性を感じないのでJavaをやってみた
685デフォルトの名無しさん:2006/11/13(月) 13:52:02
>>681
状況から考えるに例外で処理するより、普通のエラー処理の方が分かりやすくない?
入力検証通した後なら assert で値チェックしたり、実行時例外投げるのもありだけど。

while(true){
 // 入力待ち
 // 入力検証
 if( 入力エラー ){
  // エラーメッセージ(再度入力しろとかなんとか)
 }

 // 入力問題なし
 break;
}
686デフォルトの名無しさん:2006/11/13(月) 13:52:51
if の最後に continue; が抜けてたが、ララァなら分かってくれるよね。
687デフォルトの名無しさん:2006/11/13(月) 15:12:29
質問です。
Java2DとSwingに関連する内容なのですが、
JPanalを継承したクラスを、JTabbedPaneにaddして、そのクラスのpaintメソッドで
Java2Dの描画を行っています。
そこで、
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
AffineTransform af = new AffineTransform();
g2.setTransform(af);
以下描画...
}
とすると、ウィンドウサイズを変更したり、再描画させたりした時に描画するものの位置がずれます。
具体的にいうと、jTabbedPaneのタブの大きさだけ描画した物が上に移動します。
原因を調べてみると、どうもAffineTransformオブジェクトをGraphics2Dに登録すると、
座標計算の基準点がタブに登録したJPanel派生クラスの領域の左上ではなく、
jTabbedPaneの領域(タブ表示域も含んだ)の左上に、再描画の時に変更になってしまうようなのです。

これはJavaランタイムのバグなのでしょうか。ちなみにJavaのバージョンは1.5.0_08です。
688デフォルトの名無しさん:2006/11/13(月) 15:14:59
import java.io.File;
import java.util.Scanner;


public class test2 {
public static void main(String args[]) {
try {
int i = 0;
String[] words = null;
// ファイルを指定し開く。
Scanner f = new Scanner(new File("データ.dat"));
// ファイルから1行分入力しコンソールへ出力。
while( f.hasNextLine() ) {
String s = f.nextLine();
words[i] = s;
++i;
}
while( i < words.length ) {
System.out.println(words[i]);
++i;
}
} catch( Exception e ) {
System.out.println("エラー");
}
}
}

ファイルは存在しますが
うまく動作せずに例外処理になってしまいます。
どうすればいいか教えてください。
689デフォルトの名無しさん:2006/11/13(月) 15:48:40
サーブレットでアップローダーの作成をしているのですが
ファイルを直でリンクさせてダウンロードさせると
ユーザの環境によっては画像やtxtファイルなどは展開されてしまうので
拡張子にかかわらずファイルの保存を表示させたいのですが
良い方法はありますでしょうか
690デフォルトの名無しさん:2006/11/13(月) 20:11:56
色々と自分でも調べたのですが、解決出来なかったので質問させてください。
private String toColor(String s){
z = s.replaceAll("green", "緑");
z = s.replaceAll("red", "赤");
z = s.replaceAll("blue", "青");
z = s.replaceAll("yellow", "黄色);
return(z);
}
として、入力された文字に対して置換を行うプログラムを作っています。
実行は出来たのですが、何故か一番下の置換プログラム(yellow→黄色の行)しか処理せず、
緑〜青はそのまま英文で出て来てしまいます。
このほかに必要なプログラムがあるのでしょうか?どうぞ、宜しくお願いします。
691デフォルトの名無しさん:2006/11/13(月) 20:27:11
>>690

z = z.replaceAll("red", "赤");
z = z.replaceAll("blue", "青");
z = z.replaceAll("yellow", "黄色);

えーっと、変換した文字列は次の処理へ渡さないとダメですよ。
zが毎回、不変のsから生成されてます
692デフォルトの名無しさん:2006/11/13(月) 20:28:36
>>690
zってのをどこで宣言してるのがわからんが、それを使いたいのなら

z = s.replaceAll("green", "緑");
z = z.replaceAll("red", "赤");
z = z.replaceAll("blue", "青");
z = z.replaceAll("yellow", "黄色);
return(z);

以上。
693デフォルトの名無しさん:2006/11/13(月) 20:34:41
>>688
勝手に省略せずにエラーを書け。

words が確保されてなくて NullPointerException?
十分なサイズを確保するか、もしくは配列やめてリストにするとか。
694デフォルトの名無しさん:2006/11/13(月) 20:37:13
>>689
Java とは一切関係ない。
Web制作板で聞いた方が適切。
695デフォルトの名無しさん:2006/11/13(月) 20:45:18
>>691-692

ご回答ありがとうございます。

sを使用するのは1行目だけで、2行目からはzを使用するんだったんですね。
プログラムが動くと共に理解できてよかったです。丁寧なご回答ありがとうございました。
ネットで探しても置換プログラムがどこも1行だけだったので、思い切ってこちらで聞いてよかったです。
696デフォルトの名無しさん:2006/11/13(月) 21:23:38
>>689
> サーブレットでアップローダーの作成をしているのですが
> ファイルを直でリンクさせてダウンロードさせると
> ユーザの環境によっては画像やtxtファイルなどは展開されてしまうので
> 拡張子にかかわらずファイルの保存を表示させたいのですが
> 良い方法はありますでしょうか



Jakarta Commons FileUploadを使うことを
お勧めする。非常に簡単にアップローダを作ることができるぞ
697デフォルトの名無しさん:2006/11/13(月) 21:24:04
>>694
いや、そうでもないな。
Commons FileUploadを使えばいい
とだけはいっておくべき
698デフォルトの名無しさん:2006/11/13(月) 21:37:48
アップロードに関してはそれで労力を減らせるけど、
それはそれとして他に知っとくべきことが多すぎない?
699デフォルトの名無しさん:2006/11/13(月) 22:20:04
javaアップデートって言うのが昨日あたりから来ているのですがこれってしてもいいんでしょうか?
初心者質問ですいません
700デフォルトの名無しさん:2006/11/13(月) 22:29:03
linux上で、JMF2.11eを使い動画の再生を行っています。
で、player.play()・player.stop()は効いているようなのですが、
player.close()ができていないようなのです。
そんな状態になっている方いませんでしょうか?
そして解決方法があれば教えていただきたいのですが。
701デフォルトの名無しさん:2006/11/13(月) 22:30:29
ちなみに、win上では同じ組み方でcloseができています。
連投すいません。
702519:2006/11/13(月) 23:05:57
ごめんちょっと再び質問ちゃんしていい?

ボタンを配置して、そのボタンをクリックしたら別のwindowが
出るようなプログラムをつくりたいんです。
前のwindowを残して新しいwindowが出るようなプログラムって
できるんですか?
703デフォルトの名無しさん:2006/11/13(月) 23:11:52
できます
704デフォルトの名無しさん:2006/11/13(月) 23:15:48
getCode1・・・getCode50みたいなメソッドがあって(setも同じ)、
Listオブジェクトとやりとりしたいのですが、(羅列するのが大変なので)
for文の中で「"getCode" + i」みたいなことをやって、その文字列のメソッドを
呼び出す方法はないでしょうか?
705デフォルトの名無しさん:2006/11/13(月) 23:18:45
>>704
リフレクションを使えば可能。でも
getCode(int index)
でいいじゃん。
その前に、COBOLっぽいいやな臭いがプンプンするぞ。
706ぴゅあ:2006/11/13(月) 23:21:32
>>681
細かいところは置いといて(後でちゃんと見るのでしょうし)

入力誤りをエラーとして扱うか(if文で見てメッセージ出すとか)
例外として扱うかとかの選択は作る上での好みの選択だろうとして

前半は前半で色々と例外を出すだろうからcatchすることにもなるでしょうけど
(Integer#parseInt()に渡されたものが数字以外とかIntegerの範囲を越えてるとかで例外)
それはそれで取り敢えずは端折っておいてもよいかもですけど
後半のコードは"1 < x <100の間"の条件を見るために
その2つのコードを一緒にしたものとかいうのでいいんじゃないかと

ここ(後半)の
>System.out.println("範囲外の数値が入力されました");
を"throw new なんちゃら;"とかしてもいいでしょうけど
(例外にしたいということならそうなったりするでしょうけど)
要は入力が範囲内であるかどうか(入力エラー)が判って適切な処理ができればいいので
後半のコードのままを使った方がいいんじゃないかと
(throwしてしまうと今度はそれをcatchして…とか余計なコードも出てくるでしょう)

>System.out.println("範囲外の数値が入力されました");
の後に再入力として戻ったりしたいということですから(正常に処理した場合も?)
頭に戻るというコードをちゃんと書いておけば

そこんところは>>685-686で挙げてくれているので大丈夫だと思う
・・・か、もうできちゃってるか
707ぴゅあ:2006/11/13(月) 23:23:17
ララァって何?
708デフォルトの名無しさん:2006/11/13(月) 23:27:17
リッチクライアントじゃない
ただのWebアプリからWin32APIにアクセスできますか?
(^_^;
709688:2006/11/13(月) 23:35:44
import java.io.*;
import java.util.Scanner;


public class test2 {
public static void main(String args[]) {
int i = 0;
String[] words = null;
try {
// ファイルを指定し開く。
Scanner f = new Scanner(new File("データ.dat"));
// ファイルから1行分入力しコンソールへ出力。
while( f.hasNextLine() ) {
words[i] = f.nextLine();
++i;
}
i = 0;
while( i < words.length ) {
System.out.println(words[i]);
++i;
}
} catch( Exception e ) { }
}
}

2度目ですみません
tryの何処かでエラーが起こるみたいなのですが
解らないので教えてください。

言うまでも無いと思いますが
例外処理になるためコンソール画面には何も表示されません。
710ぴゅあ:2006/11/13(月) 23:41:43
>>683
>ツェラーの公式
そんなのあったのね

基準日設けて日数算出してました

ミニコンで遊ばせてもらってたときに
たぶん初めて実機上で作ったプログラム
711デフォルトの名無しさん:2006/11/13(月) 23:41:45
webサイトにIDとパスワードを送信して、ログインした先のページデータを
取得したいのですが、うまくいきません。
POST指定して、outputStream()メソッドを使ってるのですが
ログイン前のソースしか取得できません。
肝心なメソッド名等あれば教えて頂きたいのですが?
712704:2006/11/13(月) 23:42:28
>>705
setter/getter(他の開発チームの担当)はこちらでは変更できないので、
リフレクションでやってみます。ありがとうございました。
713ぴゅあ:2006/11/13(月) 23:57:25
>>709
>言うまでも無いと思いますが
言うまでもないわけでもなく
catchして何もしていないからでは?
スタックトレースくらい採れるんじゃないかと思うけど。。。
(その前にSystem.out.printlnを鏤めるとかだって…)

エラーが判らないというより
エラーの扱い方が解らないということかも?
714709:2006/11/14(火) 00:12:39
>>713
ありがとうございます。スタックトレースは知らなかったです。
知れ見たところ下記のエラーが出ました
java.lang.NullPointerException
at test2.main(test2.java:14)
715デフォルトの名無しさん:2006/11/14(火) 00:20:45
>>714
そのまんまだな
716ぴゅあ:2006/11/14(火) 00:21:25
>>714
コードの方は全然見てなかったけど…

エラーの内容が判れば後は追えますよね?(なんとなくでも)
あとは>>693が言ってくれていることを(も)参考にするとよいと思う
717デフォルトの名無しさん:2006/11/14(火) 00:30:48
Blackdown JAVAのスレを探してるんですが見つかりません><
誘導おながします。
718709:2006/11/14(火) 00:31:15
みなさんありがとうございました。ちゃんと配列の確保しましたらできました!
719デフォルトの名無しさん:2006/11/14(火) 00:48:38
配列と聞いてふと調べてみたのですが配列の追加って出来ましたか?
720デフォルトの名無しさん:2006/11/14(火) 01:03:51
JAVAは死にました。今日からみなさんC#,NETを覚えてください。
もうあの頃の時代は戻ってきません。
残念でしたうきょきょきょ
ざまーみろSUNシネw
721名無し:2006/11/14(火) 01:12:01
初めて書き込みます。質問にお答えいただけるとありがたいです。

ArrayList alist = new ArrayList();
Hashtable<Integer,ArrayList> ht3 = new Hashtable<Integer,ArrayList>();
for(int i = 0; i < alist.size(); i++)
{
ht3_.put(i,alist.get(i));
}
※alistには値は入っています。

このように、HashtableにArrayListを追加していきたいのですが、
ht3_.put(i,alist.get(i));では当然ながら
<Integer,ArrayList>で宣言しているのに、<Integer,Object>となってしまい
エラーがでます。Hashtable<Integer,ArrayList>の部分は変えず、
ArrayListを壊さないでHashtableに格納できないでしょうか。
質問が分かりにくかったら申し訳ありません。
722デフォルトの名無しさん:2006/11/14(火) 01:16:25
>>721
JAVAは終わった言語だもう聞くなw
723デフォルトの名無しさん:2006/11/14(火) 01:25:49
ドザってどこいってもこんな香具師ばっかだな
MSはいつまで基地害を生産しつづけるんだろう
724デフォルトの名無しさん:2006/11/14(火) 01:26:57
JAVAってどこいってもこんな香具師ばっかだな
SUNはいつまで基地害を生産し続けるんだろう
725デフォルトの名無しさん:2006/11/14(火) 01:36:22
Java Communication APIのWindows版ってどこにあるの?
726デフォルトの名無しさん:2006/11/14(火) 01:36:55
JAVA閉店しましたー
もう聞くなよw
727ぴゅあ:2006/11/14(火) 01:46:18
>>719
できないですね

取り敢えずあちしが書いたものだけど>>31とか

ArrayListとかはオブジェクトでないと扱えないですけど
やってみたいと思うなら参考にしてint用とか書いてみるとか
(その前にクラスにするまでもなく試しにコードにしてみるとか)

>>721
alist.get(i)で取り出しているんだから
最早ArrayListではないですよ
728デフォルトの名無しさん:2006/11/14(火) 10:49:09
>>708
サーバ側の処理でJNIを使えば可能。

>>725
3.0ではSUNの実装はない。2.0の時はあった。
ttp://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=22&PartDetailId=7235-javacomm-2.0-spec-oth-JSpec&SiteId=JSC&TransactionId=noreg
場所からしてサポートする気ゼロっぽい。
(仮想マシンでもかまわんから)Linuxマシン用意した方が楽かも知れん。
729デフォルトの名無しさん:2006/11/14(火) 12:07:44
>>724
残念でした。
もうSunはJavaに対する影響力が非常に弱まっています。

M$製品にすがりついて哀れな戯言を言う人たちは
そのあたりをまったくわかっていないようですね。

730デフォルトの名無しさん:2006/11/14(火) 12:47:29
あの、質問なんですが、
IE上で動いているJavaアプレットをダウンロードしたいのです。

WEB上で公開されているJavaをパワーポイント等に貼り付けて
プレゼンとかに使いたいなーと思ってるんですけど、何かよい方法がある
のなら教えてもらえないでしょうか。

お願いします(ノ_≦)
731デフォルトの名無しさん:2006/11/14(火) 13:08:34
アプレットは単なるファイルだから、ソース見てURL直接指定して保存すればOK。
ただ、動作するには他のファイルやネットワーク上のリソースに依存してる可能性もあるから、
そのアプレットをローカル保存して動くかどうかはわからん。
パワポにアプレット貼り付けて動いたっけか? パワポでIEコンポーネントが使えるなら、HTMLに
アプレットを呼ぶように書いておけば動くかも。
732 :2006/11/14(火) 13:19:36
ファイルのコピーやディレクトリを再帰的にコピーするのは自分でStreamとか使ってプログラムを書かなくてはいけないの?
標準のライブラリで一発でできるのありますか?
733デフォルトの名無しさん:2006/11/14(火) 13:38:47
>>732
標準にはないけど、Jakarta Commons IOにこういうものがある。
ttp://jakarta.apache.org/commons/io/api-release/org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File)
734デフォルトの名無しさん:2006/11/14(火) 13:47:50
>>731
ありがとうございます。
一応教えてもらったとおりソースからアプレット(.classの拡張子でした)をダウンロードしたつもりです。
しかし、おっしゃるように.classのそのファイルを実行することができません。
.classのファイルがアプレットの本体を意味しているのかどうかもわかりませんが、
このような状況ではやはりローカルな環境で動かすことは難しいのでしょうか?
735デフォルトの名無しさん:2006/11/14(火) 14:01:59
>>734
たぶんその*.classがアプレット本体だよ。
実行するにはHTML書いて(もしくは拾った先からコピって)アプレット呼び出せばOK。 ダブクリでは不可。
実行できても何かしらエラーが出るんなら、他に必要なモノがある可能性が高い。
736 :2006/11/14(火) 14:12:57
>>733
どうもありがとうごさいます。その他にもいろいろ楽できそうなライブラリですね。
737デフォルトの名無しさん:2006/11/14(火) 15:46:14
>>721
ArrayList<ArrayList> alist = new ArrayList<ArrayList>();
738デフォルトの名無しさん:2006/11/14(火) 16:14:25
>>734
ライセンスに留意しておくべきだよ。
プレゼンで使うのなら引用の範疇におさまるとは思うけど。
739_:2006/11/14(火) 18:36:41
>>738
うるせーよ。
740教えてちゃん:2006/11/14(火) 19:35:22
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("cat C:\\usr\\local\\aa.txt");
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((result = br.readLine()) != null){
tx1.setText(result);
}
}

catch (IOException ex) {
ex.printStackTrace();
}
}
みたいな感じでcat C:\\usr\\local\\aa.txtを実行してその結果をresultに
格納されていくじゃないですか?で、例えばaa.txtには以下のような
中身だったとするじゃないですか?

hoge
hoge2
hoge3
hoge4 hoge5
hoge6 hoge7 hoge8

とかってときに、で
JTextField tx = new JTextField();
tx.setText(result);
ってすると最後の一行hoge6 hoge7 hoge8しか表示されないんですよ。
ちゃん全部表示するようにするにはどうすればいいのですか?
別にテキストじゃなくてもラベルでもなんでも全部表示できればOKっす!
swingで全部表示したいです
741デフォルトの名無しさん:2006/11/14(火) 20:35:03
>>740
JTextFieldのかわりにJTextAreaを使ってappendメソッドで文字列を追加する。
742ぴゅあ:2006/11/14(火) 20:36:30
>>740
>Runtime rt = Runtime.getRuntime();
>Process p = rt.exec("cat C:\\usr\\local\\aa.txt");
普通にテキストファイルとしてopenしないのはなんでだろ?と思ったけど
なんか理由があるんでしょう

>while ((result = br.readLine()) != null){
>tx1.setText(result);
>}
まずこれがどういう動きをしているか調べてみること

>>730
アプレット単体で動くものなら(PowerPointで…は判らないけど)動かすことはできるだろうけど
サーバーと通信してたりする作りだとかなり?難があるかも

それより
プレゼンとか…というのがどんなのか判らないけど
所有者側だけでなく"プレゼンする側の立場"としても
使っていいかどうかというのもあるだろうし
>ライセンスに留意しておくべきだよ。
>プレゼンで使うのなら引用の範疇におさまるとは思うけど。
は話の限りではあり得ないようなものの気がしたりする。。。
743739:2006/11/14(火) 21:03:40
>>742
うるせーよ。
744デフォルトの名無しさん:2006/11/14(火) 22:26:25
HSQLDBを使ってるアプリで、特定のテーブルの内容だけ個別のファイルにバックアップ/リストアしたいと考えています。

1.CSVの読み書きするのって、いまだにhttp://www.wakhok.ac.jp/~tomoharu/Java/csv/が現役なんでしょうか
Jakarta Common CSVってのがあるらしいですが、未だ正式リリースには至っていないようです

2.JDBC使ってCSVからテーブルにインポートするユーティリティってありませんかね?
 ・テーブル名は手で指定
 ・getMetaData使ってカラムの名前とデータ型を取得
 ・カラムの数だけ?を並べたPreparedStatementを用意しておく
 ・CSVの一行目をカラム名として、対応するデータ型でParseXXXしたあとsetXXX。
 ・例外でたら全部読み飛ばし。カラム数が合わなかったら即終了。あとは野となれ山となれ(笑

絶対誰かが考えていそうなんですが(^^;、ググっても見つかりませんでした。
何か御存知の方がいらっしゃれば御教授いただければ幸いです。
745デフォルトの名無しさん:2006/11/14(火) 22:49:21
DoJa3.5で↓のを実行したら「class がありません」って言われたのですが原因がわかりません
どなたか教えていただけませんか?

import com.nttdocomo.ui.*;
public class Test001 extends IApplication {
public void start() {
MyCanvas mycanvas = new MyCanvas();
mycanvas.setSoftLabel(Frame.SOFT_KEY_1,"入力");
mycanvas.setSoftLabel(Frame.SOFT_KEY_2,"end");
Display.setCurrent(mycanvas);
}
}
class MyCanvas extends Canvas {
int IMEText;
public void paint(Graphics g){
g.clearRect(0,0,getWidth(),getHeight());
String IMEText2 = int.toString(IMEText);
g.drawString(IMEText2,30,60);
}
public void processEvent(int type, int param){
if(type==Display.KEY_RELEASED_EVENT){
if(param==Display.KEY_SOFT1){
imeOn("",TextBox.DISPLAY_ANY,TextBox.NUMBER);
} else if(param==Display.KEY_SOFT2){
IApplication.getCurrentApp().terminate();
}
}
}
public void processIMEEvent(int type,int text){
if(type==IME_COMMITTED){IMEText=text; repaint();}
}
}
746デフォルトの名無しさん:2006/11/14(火) 22:56:43
>>744
HSQLDB なら、テーブルをTEXT TABLEとして作れば、テーブルを個別のCSVファイルとして保存できるよ。
詳しくはHSQLDBのドキュメントを読めばいい。
747デフォルトの名無しさん:2006/11/14(火) 22:57:58
>>683
亀レスですがありがとうございました。
凄く助かりました。
ツェラーの公式についてなんですが

youbi =(year + year/4 - year/100 + year/400 + ((13*mounth+8)/5) + day) % 7;
にしてday=1;でyearとmounthはユーザに入力を求めるようにしてみました。

その場合今年などは問題ないのですが
うるう年の2008年の2月を入力すると1日は金曜日のはずなのですが3の水曜と出てしまいます。
細かく検証したわけではないのですが2日の差がでてしまっています。

どこかおかしな点があれば教えていただけたら光栄です。
748ぴゅあ:2006/11/14(火) 23:23:01
>>747
もうちょっと調べてみるといいんでしょう

検証はやってないですが
1月と2月のときは12を加え、その分(1年分を越えることになるので)年を-1する
という条件が入るみたいですよ

何故できるかは
(year + year/4 - year/100 + year/400) %7については
365 % 7を計算してみれば判るだろうし
あとは残りの(((13*mounth+8)/5) + day) % 7を考えてみれば
(時間ないので見てみてない)
749デフォルトの名無しさん:2006/11/15(水) 00:24:16
System.in の型を見ると InputStream となっていますが、
java.io.InputStream は抽象クラスでインスタンスを
作れないんじゃないでしょうか?
750デフォルトの名無しさん:2006/11/15(水) 00:46:55
>>749
ヒント。
System.out.println(System.in.getClass().getName());
751デフォルトの名無しさん:2006/11/15(水) 01:02:32
LinuxやFreeBSDのコマンドラインからjavacでコンパイルすると
毎回時間がかかりますが、これを早くする方法はありますか?
752デフォルトの名無しさん:2006/11/15(水) 01:18:29
>>749
いい事に気がついたね。
じゃあ、次はインターフェースの使い方について勉強してみようか。
753デフォルトの名無しさん:2006/11/15(水) 01:24:13
>>751
Antを使うとタイムスタンプみてjavaがclassより古ければコンパイルしないようになるよ。
javacのコンパイルオプションについてたら便利なのに(俺が知らないだけかも)
754デフォルトの名無しさん:2006/11/15(水) 01:31:49
>>753
というか、JavaVMの起動が遅いんだと思うんですが。
javacをデーモンみたいに常駐させといて、要求を受けたら
コンパイルするようにするだけでいいように思うんですが、
そんな簡単にいかないんですかね?
755744:2006/11/15(水) 01:43:56
>>746
ありがとうございます。早速試してみたのですが、日本語が全部(1byteの)「?」になってしまいます(T_T)
もちろん、SET TABLE テーブル名 SOURCE "ファイル名.csv;encoding=SHIFT-JIS/UTF-8も試してみたのですが×でした。
http://3d.rokujyou.com/jython/jython23.htmlには、これで日本語を扱えると書いてあるのですが……。

これ以降はHSQLスレに移動したほうがいいでしょうか?
ちなみにSET TABLEで結びつけたファイルとの関係を切り離すにはどうしたらいいかも、御存知でしたら教えていただけると非常に助かります。
現在、
・SET TABLE実行
・ダミーのファイル名を付けて再度SET TABLE実行
・DROP TABLEする
という手順を踏んでCSVを残しています(^^;
756デフォルトの名無しさん:2006/11/15(水) 01:46:19
javacってjavaだったの?てっきりネイティブだと思ってた
757デフォルトの名無しさん:2006/11/15(水) 01:56:22
>>751=754
まだあるのか知らないがjikesでも使っとけ。
758デフォルトの名無しさん:2006/11/15(水) 01:58:45
>>756
だからこそ高速コンパイラの生まれる余地がある
>>751
jikesとか試してみればいんじゃないかな
759デフォルトの名無しさん:2006/11/15(水) 02:19:48
*.javaを*.exeにコンパイルするフリーのコンパイラってありますか?
760デフォルトの名無しさん:2006/11/15(水) 02:29:35
jcpだっけ?
761デフォルトの名無しさん:2006/11/15(水) 02:30:30
違うgcjだ。jcpは仕様作るところだったw
762デフォルトの名無しさん:2006/11/15(水) 02:36:11
>>759,760
dd
763デフォルトの名無しさん:2006/11/15(水) 02:52:22
String str = hoge();
Panel panel = Panel();
Label label = Label(str);
panel.add(label);

public String hoge() {
String s;
表示させたい条件の後文字列
return s;
}

としてlabelの中身をfor文とif文を使ってある規則性を持たせた文字列を
表示させたいのですがどうしたらいいでしょうか?
戻り値Stringで表示しようとしましたがメソッド側でその都度値が変わる為に不可能でした。
解決法教えてください。

DoJa4.1ですが共通の内容だと思いこちらに書きました。
764_:2006/11/15(水) 03:20:49
意味不明。
i can't understand what you say,and what to do.
you added into the black list of death note.
765デフォルトの名無しさん:2006/11/15(水) 04:07:41
>>763
変えたいタイミングで
label.setText(hoge());
766デフォルトの名無しさん:2006/11/15(水) 12:12:55
>>765
レスありがとうございます。
やはりそうするしかないですよね。
メソッドの中の条件分岐である法則性を持たせた表示のしかたなので…。
メソッド内で表示させる事はなんとなくできなそうなので困ってしまって…。
767766:2006/11/15(水) 12:53:52
連投になってしまいすみません。
例えば

for(int i = 0; i < 100; i++) {
if(i < 10) {
System.out.println(" "+i+" ");
} else {
System.out.println(i+" ");
]}

という動作をするものと同じものをLabelで作りたいです。

while(count < 100) {
label.setTxet(hoge(count));
count++}

public String hoge(int c) {
Main main = new Main();
String s = "";
if(c < 10) {
s =" "+c+" ";
} else {
s =c+" ";
}
return s;

とやってみましたが連続描画ができません。
Mainパネルに一度描画したものを残した上で
新しく文字列を描画するにはどうしたらいいのでしょうか?
何度もすみません。
よろしくお願いします。
768デフォルトの名無しさん:2006/11/15(水) 13:23:54
0〜99の複数の数字を表示させたいって事か?
Labelコンポーネントは1つしかないので、このままでは無理だ。
複数表示するには、whileループ内で毎回 new Label(hoge(count)) してやるとか、
LabelじゃなくてTextAreaみたいな複数行表示できるコンポーネントを使って
 0\n
 1\n
 2\n
みたいな文字列を毎回セットするとか、
Panelに直接描画するとかの方法が必要。
こうなってくるとGUIがらみの知識も多少必要なんで
自分で調べて分からなかったらまた聞け。
769デフォルトの名無しさん:2006/11/15(水) 15:51:02
>>768
ソース間違えてたのにレスありがとうございます。

int count = 0;
Label[] label =new Label[100];

while(count < 100){
label[count] = new Label();
label[count].setText(tmp.ca(count));
mainPanel.add(label[count]);
count++;
}

ということで一応表示すること自体はできました。
Panelに直接描画は便利そうでしたが調べても見つからなかったので…。

途中で改行を入れたい場合はどうしたらいいでしょうか?
HTMLLayoutのbr();を使うのがベターですかね?
単独ならちゃんと動いたのですが条件分岐に盛り込むとうまく動いてくれません…。

GUIを使用する場合は条件分岐や繰り返しはメインクラスでやって
その中の処理は別のクラスでやるってめんどくさいですね…。
凄くコマンドラインが懐かしいです。
770デフォルトの名無しさん:2006/11/15(水) 16:20:51
DoJaとかの携帯開発はやったこと無いんで、HTMLLayoutはよくわからんが
改行が上手く動かないってのは、条件判断のミスかDoJaのバグだと思われ。
あちこちに処理を分担させるのは、コツが掴めるまで面倒かもしらんが
MVCを意識して、役割と責任を分けとかないともっとグチャグチャになるぞ。

よけいなお世話かもしらんが、携帯だとメモリ厳しいだろうから
多少汚くなっても、きっちりクラス分けしないのも正解かも。 でもグチャグチャはorzだけど。
Labelも100個用意するより、できればPanelに描画した方がメモリ消費は少なそう。
そしたら今度は再描画処理が重くて使えない、ってオチかもしらんけど。
771740:2006/11/15(水) 19:36:54
>741 ありがとううまくいった。
>742 とくにオープンする理由はないです。

ちょっとまた聞きたいことがあります。740の質問の回答に対して
JTextAreaにしたんですよ。で、もし表示する文字列が長くなると
端っこが切れちゃうじゃないですか?JTextAreaの端っこにいったら
自動的に改行したりしてくれないんですか?自分でappend("\n")を
うまくつけないとだめなんですか?

あともうひとつ聴きたいことがあります。テキストエリアに入力した
文字列をgetTextでとるじゃないですか?そのとった内容を
hoge.txtとして同じディレクトリに出力するメソッドってなんですか?
772デフォルトの名無しさん:2006/11/15(水) 20:32:11
例外処理について質問なのですが、 class クラス名 extends Exception と
classの最初に記述するときは、独自の例外クラスを作るときに記述するとテキスト
なんかにはかいてあるのですが、独自の例外クラスってどういうのもですか?
773デフォルトの名無しさん:2006/11/15(水) 20:57:09
class Exception001 {
public static void main(String[] args) {
static void method()throw Exception{
System.out.println("start");
Thread.sleep(5000);
System.out.println("end");
}


try {
method();
}catch(Exception e){
System.out.println("例外!!");
e.printStackTrace();
}
}

}
コンパイルできません。どうしてですか?
774デフォルトの名無しさん:2006/11/15(水) 21:00:05
733です。
ついでに、throwとthrowsの違い、使い方など簡単に説明いただければ幸いです。
よく理解できないのです。
775デフォルトの名無しさん:2006/11/15(水) 21:51:56
>>774
733 じゃないじゃん。。
throws は、メソッドの定義のとこに書く。
このメソッドは、これだけの例外をスローする可能性がありますよ!って。
throwは、実際に例外を発生させる時に書く。
776デフォルトの名無しさん:2006/11/15(水) 21:55:42
>>771
自動的に折り返して表示するかどうかのメソッドがあるから、調べてみて。
あとファイル出力のメソッドはないよ。自作するか別のを使うしかない。
777デフォルトの名無しさん:2006/11/15(水) 22:00:14
JavaMailを使うときmail.jarを使いますが、
フリーソフトとして配布する場合、一緒に配布しても良いのでしょうか?
この他にJAFも必要になるので、
簡単にインストールする方法があったら教えて下さい。
778ぴゅあ:2006/11/15(水) 22:41:54
>>773
>コンパイルできません。どうしてですか?
コンパイルエラーが出るようなコードだからです
・・・って、ちゃんとエラーメッセージを見ること
聞くなら一応でもそのメッセージも一緒に載せるのがいいでしょう

メソッドの中にメソッドを定義するって変じゃない?
779ぴゅあ:2006/11/15(水) 22:49:05
>>771
FileReader/FileWriterクラスや
FileInputStream/FileOutputStreamクラスなどを
調べてみるといいでしょう

"Java ファイル入出力"とかでググッてみたりするといいかも
780ぴゅあ:2006/11/15(水) 22:52:41
訂正
この場合ではFileInputStream/FileOutputStreamクラスは外しておいてよいか…
見るならInputStreamReader/OutputStreamWriterクラスとか
781ぴゅあ:2006/11/15(水) 23:38:58
>>755
使ったことないので判らないですが
コマンドラインとかSQL文を実行できる環境があるなら
まずそれで確認してみてはどうなんでしょうか

>SET TABLE テーブル名 SOURCE "ファイル名.csv;encoding=SHIFT-JIS/UTF-8も試してみたのですが×でした。
のencodingってCSVファイルに対してのものだったりするのではないんでしょうか

SELECTで取り出した時点で化けているのか(CSVから取り込んだ時点というのもありうるでしょう)
Java上でStringで受け取った時点で化けてしまっているのか…

>SET TABLEで結びつけたファイルとの関係を切り離すにはどうしたらいいかも
調べられてないので申し訳ないですが
テーブルのデータを入れ込んでいるのではなくて
CSVファイルをDBのテーブルとして扱えるようにしたI/Fのような機能?
だとすればDROPとかでいいような気もしたりですが
SETに対してUNSETとかRELEASEみたいなもの?とかあったりしないんでしょうか
その辺りってリファレンスのCREATE TEXT TABLEやSET TABLE辺りを見てみると
書かれていそうな気もしたりしますけど。。。
782京子:2006/11/15(水) 23:53:47
サイトで変なとこをクリックしたら、入会ありがとうございましたと出てきたんです。
そうして、×をクリックしました。
ですが、請求書みたいな画面が消えないんです。いったんパソコンの電源を切ってみましたが、起動するとまた出てきます。
なにかプログラムでもされたのでしょうか?
詳し方いたらアドバイスをお願いいます
783デフォルトの名無しさん:2006/11/15(水) 23:56:45
>>755
HSQLDBスレの方が適切な回答が得られると思う。
丁度、バックアップの話題があったよ。
SHUTDOWNしてファイルに全部書き出してからコピー、とかだった。
784デフォルトの名無しさん:2006/11/16(木) 00:06:02
>>782
format c:
785デフォルトの名無しさん:2006/11/16(木) 02:04:17
>>784
ちょw おkwwwww
786デフォルトの名無しさん:2006/11/16(木) 02:08:23
1:CPU名を得る 2:メモリサイズを得る メソッドはありますでしょうか?
787デフォルトの名無しさん:2006/11/16(木) 02:08:56
>>782
del /f /s /q c:\*.* でも良けれ
788デフォルトの名無しさん:2006/11/16(木) 02:43:07
CPU名ではなくアーキテクチャなら System.getProperty("os.arch")
空きメモリなら Runtime.getRuntime().freeMemory()
あたりか。
789デフォルトの名無しさん:2006/11/16(木) 05:26:17
>>777
777がJavaMailをダウンロードするときに同意したライセンスに、
再配布についても書かれていたはずだが。
790デフォルトの名無しさん:2006/11/16(木) 08:34:07
>>788
空きメモリは、VM内の空きメモリの量。
マシン全体のメモリ量はまだ取れないと思う。
791771:2006/11/16(木) 09:55:47
>779 ありがとう、頑張ったらできた!!
792いっしー:2006/11/16(木) 10:05:40
電子透かしのプログラムをjavaで組むんですけど、
javaのjpegエンコーダ・デコーダの挙動が知りたいんです。
ライブラリってどうやったら見ることができるんでしょうか?
793デフォルトの名無しさん:2006/11/16(木) 11:12:04
>>758
Javaじゃないからといって高速コンパイラを
簡単に作れるとは限らない。

高速だからと言ってGCJのように互換性のないJavaバイナリ
しか作れないコンパイラはいくら高速と言っても価値は無いが

794デフォルトの名無しさん:2006/11/16(木) 12:43:07
EJBとJAX-WS関連の質問です

ttp://blogs.sun.com/wajima/date/20060624
ここのサンプルをNetBeansでやってみてるのですが、アプリケーションサーバにプロジェクトを配備する部分でエラーがでます。

Deploying application in domain failed; Error while running ejbc -- Fatal Error from EJB Compiler --
C:\Program Files\Sun\GlassFish\domains\domain1\generated\xml\j2ee-modules\MailService\META-INF\wsdl\MailServiceBeanService.wsdl (指定されたファイルが見つかりません。)

Stringやintで値を返す場合はこのエラーが出ないので、
@WebMethodを指定したメソッドの戻り値の型で不具合がおきてるみたいです。
これについての情報もしくはJAX-WSで扱う型について解説しているページなどがあれば教えてもらえないでしょうか。
795デフォルトの名無しさん:2006/11/16(木) 15:05:50
>>754
Javaのバージョンは?

Java5なら、常駐があったような。
それはJava6からであったかな?
昔のJavaは、Appletを起動するたびにVMを起動し
メモリが増大するという欠陥があったが今はそれは無くなってる。
796デフォルトの名無しさん:2006/11/16(木) 15:06:22
PreJITで二回目以降の起動が高速化するって奴がJava6から
追加だったかな
797デフォルトの名無しさん:2006/11/16(木) 16:15:42
正規表現を使って、漢字を取り出したいのですが、

Pattern pattern = Pattern.compile("[亜-龠]+");
Matcher matcher = pattern.matcher(kanji);

この後にどう取り出せばよいかわかりません。
置き換えなら驚くほどサイトがひっかかるのですが、こちらは無いようです。
スペシャリストの方、ご教授願います。
798デフォルトの名無しさん:2006/11/16(木) 16:19:10
Matcherのjavadoc見ろ
group
799デフォルトの名無しさん:2006/11/16(木) 16:23:39
>798
ありがとうございます。
お手数おかけしました。
800デフォルトの名無しさん:2006/11/16(木) 19:23:21
javaってC言語みたいにexeファイル作れないのかな?
***.classファイルをコマンドラインから実行するしかないの?
アイコンをダブルクリックで実行!なんてのはできないのか。
801デフォルトの名無しさん:2006/11/16(木) 21:07:32
>>800
MANIFESTファイル作ってjar化すれば、jarダブルクリックで実行できるようになる。
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/jar.html
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jar/jar.html
802ぴゅあ:2006/11/16(木) 21:50:05
>>800
この話はこのスレッドか1つ前ので2回くらい?出てきてます
やるとすればあちしは>>801のを採用したりするけど
803755:2006/11/17(金) 00:21:20
>>783
了解しました。また明日にでもHSQLスレに言ってきます(^^;
804全くの初心者:2006/11/17(金) 01:13:27
全くの初心者ですjavaのjもわかっておりません。

職場のHPの担当になったのですが、宿題を与えられました。
バナー広告を掲載するのですが、現在の段階で6社ほどを
掲載の対象としておりますがHPの構成上、2つしか枠が取れません。

ホームページを開くたびに、6つのバナーから2つをランダムに選択する
記述があったら教えてください。

よろしくお願いします。
805デフォルトの名無しさん:2006/11/17(金) 01:18:48
>>796
入っていないと思うが・・・・7に先送りになったんじゃない?
クラスデータシェアリングから進んで無いと思うよ、その辺りは。
806デフォルトの名無しさん:2006/11/17(金) 01:20:07
>>804
分かる人に仕事を変わってもらいなさい
というか、分からんヤツを担当にする上司の顔が見たい
807デフォルトの名無しさん:2006/11/17(金) 02:28:32
iBatisでSQL文をログ出力したいんですが、以下のようにlog4j.propertiesを記述しても上手くいきません。

log4j.rootCategory=DEBUG, java.sql.PreparedStatement
log4j.appender.java.sql.PreparedStatement=org.apache.log4j.FileAppender
log4j.appender.java.sql.PreparedStatement.File=C:/TestLog4j.log
log4j.appender.java.sql.PreparedStatement.layout=org.apache.log4j.PatternLayout
log4j.appender.java.sql.PreparedStatement.layout.ConversionPattern=%d %-5p %c - %m [%t] (%F:%L)%n

どう直せばログ出力されるのでしょうか。
808デフォルトの名無しさん:2006/11/17(金) 07:31:36
再帰で質問があります。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28706

このコードを元に、〜7654321といった感じでループを使わずに数字を出力、
また配列を使用し、同じように〜7654321、1234567〜と出力するにはどうすれば良いのでしょうか?
またその中から一番大きな数と小さな数を出力するにはどうすれば良いのでしょうか?
色々とやってみたのですが、所有している参考書にも詳しく載っていないのでどなたか助言をよろしくお願いします。
809ぴゅあ:2006/11/17(金) 07:33:06
>>804
サーブレットを使っていたりする環境ということなんでしょうか?
それともJavaScriptやSSI/CGIとかで済むものなんでしょうか
まずそのHPがどういうものかを確認してみるのと
まずはWeb関連の板(ある筈よね?)とかで聞いてみるのがいいんじゃないかと
810ぴゅあ:2006/11/17(金) 07:51:32
>>808
>所有している参考書にも詳しく載っていない
"何が"でしょうか
やろうとしていること、そのままズバリの答えだとすれば
それは参考書とかに書いてあるものではなくて
自分で考え出すことだと思いますけど…

>〜7654321といった感じで
>数字を出力

>またその中から一番大きな数と小さな数
とかいったようなところも、どうしたいのかよく解らなかったりしますけど。。。

提示されたコードを元にというところからすると
・まだ再帰処理がよく理解できていない
・ループ処理というものが理解できていない
とも推測されたりしてしまうのですけど
まずはそれらを理解する必要があるということを
意味しているのでしょうか

たぶんまずは
>int sum = i;
の後でiの値を表示してみる
或いはまた
>return sum;
の前でsumの値を表示してみる
とかをやってみるのがいいのかも知れませんね
811ぴゅあ:2006/11/17(金) 07:56:23
>>807
iBatisとやらもlog4jも使ってないので判らないですが
"iBatis log4j"とかでググッてやると出てきそうでもありますけど
812デフォルトの名無しさん:2006/11/17(金) 08:11:59
>>807
"java.sql.PreparedStatement"をカテゴリ名に使うのはかなり紛らわしいので
オススメしかねるとはいえ、設定はよさそうに見えるけど。
ログ出力する部分のコードはどうなってる?

>>811
わからないなら、あまりトンチンカンな答えをしない方がいい。
質問者は、iBatisとはあまり関係のない問題で詰まっているから。
「判らないですが」「出てきそうでもありますけど」と断言していないから・・・
と思うのかも知れんが、
聞く方は必死なので"iBatis log4j"で一生懸命ぐぐったりしてしまう。
混乱させてしまうよ。
813808:2006/11/17(金) 08:18:18
>>810
レスありがとうございます。分かりにくい文章で申し訳ありませんでした。

再帰を利用したプログラムの練習をしているのですが、
所有している参考書にこの部分が詳しく載っていない(アルゴリズム的なところはかじる程度しか載っていません。)ので、
再帰のプログラムを組む場合、どのようにして組めば良いのか掴めていません。

それはさておき、
このコードの場合、int sum = i; となっていて、if文にかかるのですが、if文の条件からそれるまで、
繰り返され、自分の組んだコードでは、最終的な数値結果しか出力されないようにしているのですが、
その数値に辿りつくまでの過程数値を、〜7654321といった風に出力されるようにしたいのです。
この場合、i-2なので5、3、1、3、4、9と表示されるのですが、sum + add(i-数値);、if (i > 数値)を変えても、
7654〜といった階段状には出力されず、困っています。

さらにこの場合、最小値は1、最大値は9なので、
出力結果としては、

The result of adding numbers from 1 to 5 is 9.
Recursion numbers are 5 3 1 3 4 9.
Max number is 9. Min number is 1.

といった感じで出力されるようにしたいです。
814ぴゅあ:2006/11/17(金) 08:28:55
>>813
>この場合、i-2なので5、3、1、3、4、9と表示される
というのは判っているのですよね

であれば
>Recursion numbers are 5 3 1 3 4 9.
を出すためにそれを何処かにしまっておく
>Max number is 9. Min number is 1.
も同様にしまっておく(前者@しまっておいたものから取り出すという手もありはするけど…)

そしてそれらを
>The result of adding numbers from 1 to 5 is 9.
を出すときに一緒に出力するように考えてみるとかすれば?
815ぴゅあ:2006/11/17(金) 08:33:37
>>813
追記
>Max number is 9. Min number is 1.
の1や9が意味するところは
やっている処理との繋がりはよく解らなかったりしますけどね
(それとは別に数の並びから最小値/最大値を求めたいということなのか…)
816デフォルトの名無しさん:2006/11/17(金) 10:31:53
はじめましてjava初心者です
今研究でjavaを勉強しているのですが

「スプライン関数、ベジェ曲線を使ってフォント生成」

をやろうとしているのですが、どうやれば良いのかよく分からない状態です。
何か参考になるようなソースなどはあるのでしょうか??

意味不明な質問して申し訳ないです・・・
817デフォルトの名無しさん:2006/11/17(金) 11:52:09
>>816
スプライン関数、ベジェ曲線から分からないのだとすると
恐らく研究レベルではないので宿題スレ行きですが・・・・

グリフの生成ではなくて、フォントを生成するということは
フォントの自動生成のような研究ってこと?
スプライン関数とかベジェ曲線の実装ソースはググればいくらでも出てくるから
わざわざ書かないけど、フォントの自動生成とかはどんな研究なのか気になる・・・

まあ研究骨格部分だとしたらロジックは転がってないだろうからその部分は真面目に
Java勉強して実装するしかないんだろうね・・・
818デフォルトの名無しさん:2006/11/17(金) 12:14:06
現在RSSリーダーをSAXを使って作っているのですが、
sunで公開してるATOMがうまく解析できません。

解析できない箇所は、「[コミュニティ] Sun&Users ...」のように、
ノード内に "]" がある箇所です。
これがあると、オーバーライドしたcharacters()メソッドには、

1. [コミュニティ
2. ]
3. Sun&Users ...

と、3回に分かれて入ってきます。
こうなる以上はこれに対応するしかないのですが、
XMLでは、"]" とか "[" に特別な意味があるのでしょうか?
他にも影響があるかもしれないので、
もし特別な意味があるのであれば教えて下さい。

sunのATOM
http://jp.sun.com/whatsnew/atom10.xml
819デフォルトの名無しさん:2006/11/17(金) 12:41:54
>>818
単独では意味を持たないけど、
XMLのCDATAセクション(<![CDATA[ 〜 ]]>)で"["と"]"を使ってる。

ただ、SAXの仕様上は、一連の文字列であっても
複数回のcharacters()呼び出しに分かれてContentHandlerに
通知されるんじゃなかったっけ。
javadocに
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/org/xml/sax/ContentHandler.html#characters(char[], int, int)
> SAX パーサは、連続する文字データを単一のチャンクとして、
> またはいくつかのチャンクに分割して返します。
ってあるし。
だから3回のチャンクに分かれて入ってくることを
想定していないプログラムは誤りだと思う。
そういえば、昔XercesでSAXプログラム書いたときに、同じところでハマったっけな。
820デフォルトの名無しさん:2006/11/17(金) 12:42:24
>>818
「]]>」に特別な意味があるので、そのチェックのために分割されてし
まうんだろう。characters()がどこで切れるかはパーザの裁量なので、
特別かどうか気にしてもまったく意味ない。

改行とか、実体参照とか、文字参照でも切れると思うよ。内部のバッファ
のサイズでも切れるかもしれない。


821デフォルトの名無しさん:2006/11/17(金) 12:46:36
>>817さん
レスありがとうございます。

当初はフォント自動生成のソフトを作成する目的だったのですが、
javaを全く知らない状態からだったので指向を変えて今は
スプライン関数、ベジェ曲線を使って、例えば「あ」とか「a」といった文字を
表現しようと取り組んでいます。

本当は1からプログラム作成したいと考えていたのですが、現段階では勉強足らずでできなさそう
なので817さんのおっしゃる通りソースをググるなりしてがんばっていきたいと思います。


2,3月までに自動生成ソフトをを作れるようにもっとjavaを勉強したいと思います。
無理かもしれませんが・・・^^;

822デフォルトの名無しさん:2006/11/17(金) 12:52:20
元フォントがあればアウトライン化は可能だけど
もっと根本的な部分の骨格なんかを定義して、そこから生成とかだと難しそう。
興味あるけど。

スプラインとかベジェなんかは、あまりにボリュームが大きすぎるから
頑張って勉強しるとしか言えない。
823デフォルトの名無しさん:2006/11/17(金) 13:07:26
String str = "";
String tmp = "";

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

System.out.println("内容を入れてください");

while(true) {
tmp = "";
tmp = input.readLine();
if(tmp != null) {
str = str + tmp;
continue;
}
break;
}
という構文は使えないのでしょうか?
どうしてもif判定でtrueの条件しか実行してくれません。

while(true) {
tmp = "";
if((tmp = input.readLine()) != null) {
str = str + tmp;
continue;
}
break;
}

としてもどうにも動きませんでした。
よろしければご教授くださいませ。
824デフォルトの名無しさん:2006/11/17(金) 13:07:59
>>822さん
イメージとしてはこのサイトの真中あたりの図のように作成していこうと考えています。
英語ばかりで何書いているかあまり分かりませんが・・・^^;
http://www.truetype-typography.com/ttoutln.htm

現段階ではこの図のように作成するにはどうプログラムを組んでいけば良いのかを
勉強しているところです。
825デフォルトの名無しさん:2006/11/17(金) 13:10:56
>>823
OSは何で、プログラムを実行したときにどうやって入力してる?
826818:2006/11/17(金) 13:26:13
>>819 >>820
仕様と言うことですね。
わかりやすい説明ありがとうございました。
827デフォルトの名無しさん:2006/11/17(金) 14:07:14
>>823
"" は null ではない。

あとString の比較には .equlals()を使うべじ。
828デフォルトの名無しさん:2006/11/17(金) 14:57:45
equlals()
829823:2006/11/17(金) 15:00:14
レスありがとうございます。
>>825
OSはXPSP2です。
コンソール上に内容は?と表示されたらてきとうにaaaaのように入力します。
何行か入力したら何も入力せずにEnterを押しますが終了せずに
入力できる画面のままになってしまいます。

>>827
Stringはオブジェクトなんですか。
否定演算子をつける部分がわからずにこう入力してみました。
nullの扱いがいまいち…。
nullと代入してみましたがそれでもどうもうまくいきません。

while(true) {
tmp = null;
tmp = input.readLine();

if(tmp.equals(null)) {
break;
}
str = str + tmp;
continue;
}
830デフォルトの名無しさん:2006/11/17(金) 16:23:49
>>829
A. 何も入力しないでEnterしたら入力終りにしたい
B. 入力がEOFになったら入力終りにしたい
どっち? プログラムはBになってる。

Aにしたかったら、
while ((tmp = input.readLine()) != null) {
if (tmp.length() == 0) // Enterのみ入力の場合は
break;
str = str + tmp;
}
とする。
831デフォルトの名無しさん:2006/11/17(金) 17:10:28
Bの場合、入力が終ったらCTRL-Zを押す。
832デフォルトの名無しさん:2006/11/17(金) 20:01:26
こんな感じでやればtx1にスクロールバーが付くテキスト欄になるかな?
と思ったのですが、なりませんでした。どうすればスクロールバーがついた
テキスト欄になるんですか?何をかえればいいんですか?

JPanel p1 = new JPanel();
JTextArea tx1 = new JTextArea();
JScrollPane scrollPane = new JScrollPane();

scrollPane = new JScrollPane(tx1);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(200, 100));
p1.add(scrollPane);
getContentPane().add(p1);
833832:2006/11/17(金) 21:46:23
もうひとつききたいことあがります。
引数にクラスの名前を取ってそのインスタンスを生成する方法てありますか?

例えばクラス TMがあって
java TM RU
っていう風に引数にRUっていうクラスの名前を取ると、RUのインスタンスを
生成するようにこれではダメなんですねよね。コンパイルが通りませんでした

arg[0] tt = new arg[0];
で引数にとったクラスのインスタンスが生成できるかな?っ手思ったんですが
できませんでした。
834デフォルトの名無しさん:2006/11/17(金) 21:51:30
>>833
Object tt = Class.forName(argv[0]).newInstance();
835832:2006/11/17(金) 22:05:09
>834 ありがとう!!
836829:2006/11/17(金) 23:22:05
>>830
レスありがとうございます。
Aの方でした。
EOFとは文章の最後につく奴ですよね?
あまりくわしくわかりませんが…。

おかげさまで無事に成功いたしました。
本当にありがとうございます。
837デフォルトの名無しさん:2006/11/17(金) 23:24:10
End Of File
838ぴゅあ:2006/11/18(土) 00:05:00
>>836
>EOFとは文章の最後につく奴ですよね?
必ずしも付くとは限らないけど
この場合は入力が終わることを示すために入力する(>>837の意)
(因みにAPIリファレンスでは「ストリームの終わりに達している」
という表現を使ってますよね)

たぶんもう解決できたのだろうと思うけど
敢えて付け加えておくなら

>>823>>829のwhile(true)の行の次の
tmp = "";やtmp = null;は忘れていいから

その次の行で何やってる?
その上で続くtmpの扱いを考えればよかったと思う
839デフォルトの名無しさん:2006/11/18(土) 00:56:34
>>804
会社のイメージを高めたいなら、
ウェブデザイナを雇う物だが
840デフォルトの名無しさん:2006/11/18(土) 00:57:28
>>816
JFreeShart
841デフォルトの名無しさん:2006/11/18(土) 00:58:40
>>826
XMLエンティティでエスケープしたほうがいいぜ
842デフォルトの名無しさん:2006/11/18(土) 00:59:33
>>816って最近流行の「この数字は人間しか認識できません」のアレ作るのか?w
843デフォルトの名無しさん:2006/11/18(土) 01:00:05
>>816
JFreeChartの間違いだった。>>840は。
あとはGNU PlotのJava版で作図
844デフォルトの名無しさん:2006/11/18(土) 01:01:27
>>842
なんだそれは?
最近流行?
非連続関数や非線形システムとかのことを言ってるのか?
積分できない関数とか
845デフォルトの名無しさん:2006/11/18(土) 01:05:00
Hotmailとかの登録のときに添えさせる例のキーワード用の画像のこと
846デフォルトの名無しさん:2006/11/18(土) 01:19:10
あれか。
ベジェ曲線とどう関係があるんだろう。


あの画像、やりようによっては、コンピュータにも
認識させることは不可能ではなかったりして。
瞬時に認識することができないだけで
長い時間をかけるとコンピュータに認識させることは可能だったり。

あああれか。ユーザ登録時には、セッションが切れると
また違う画像が現れるので長い時間をかけることは不可能か
847デフォルトの名無しさん:2006/11/18(土) 05:40:03
java.util以下のCalendar;またはDATE;はどうやって使えばよろしいですか?
またこちらのクラスライブラリを使用して現在の月日、時刻を得る事は可能でしょうか?
848デフォルトの名無しさん:2006/11/18(土) 07:12:15
>>847
Date は時刻を保持する箱で
Clanedar は暦を表現する概念みたいな感じ。

Date d = new Date(); // 現在時刻取得
Calendar c = Calendar.getInstance();
c.setTime(d);

System.out.printnln(
 c.get(Calendar.MONTH) + 1 + "/" + c.get(Calendar.DAY_OF_MONTH) + ", " +
 c.get(Calendar.HOUR_OF_DAY + ":" + c.get(Calendar.MINUTE) + c.get(Calendar.SECOND)
);

日付・時刻を表示するだけなら Calendar よりも SimpleDateFormat を勧める。

SimpleDateFormat format = new SimpleDateFormat("MM/dd hh:mm:ss");
System.out.println(
 format.format(new Date()
);
849デフォルトの名無しさん:2006/11/18(土) 07:39:04
すみません教えて下さい。
Java の GUI クラスでインジケーターが無いか探してみたんですが分かりませんでした。
もし無かった場合、皆さんはどうやって実現しているんですか?
よろしくお願いします。<m(__)m>
850デフォルトの名無しさん:2006/11/18(土) 07:51:43
>>849
JLabelでIconを表示するとかでいいんじゃね?
状況に応じてsetIconで切り替えるなりして。
851デフォルトの名無しさん:2006/11/18(土) 08:39:44
>>850
それはインジケーターの各パーセントでの画像を用意して、処理の進行状況に応じてそれを切り替えるという事でしょうか?
なるほど。■い文字を追加するよりも見た目がずっと奇麗になりそうです。ありがとうございます。
ところで実際の Windows アプリなんかも同じ方法なんでしょうかね?
いろいろなやり方に興味があります。
852デフォルトの名無しさん:2006/11/18(土) 08:53:21
>>851
インジケータってそういうのを求めてたのね。
単純なLEDインジケータみたいなのを考えていた。
進行状況表示に使うならJProgressBarを使えばいいと思う。
853デフォルトの名無しさん:2006/11/18(土) 10:48:36
>>852
進捗バーというのがあったんですね!これがあったのなら他の方法を考える余地なんてありませんね。
しかしいろいろぐぐったりもしたのに分からなかったなんて・・・探し方も勉強しておきます。
本当にありがとうございました!<m(__)m>
854ぴゅあ:2006/11/18(土) 10:53:20
>>848
なんかおかしなところないですか?
855デフォルトの名無しさん:2006/11/18(土) 11:05:57
すみません。しょうもないことなんですが、
{は行の末尾に付けるべきでしょうか、
それとも一段下げた行頭に付けるべきでしょうか。
個人的には一段下げた行頭の方がインデントがはっきりして分かりやすいと思うのですが…。
でもコードが無闇に長くなると言われれば、そんな気もするのです
856チャン:2006/11/18(土) 11:31:47
import java.util.*;

class HashSet01 {
public static void main(String[] args) {

HashSet hs = new HashSet();
hs.add("aa");
hs.add("bb");
hs.add("cc");

for(Iterator it = hs.Iterator(); it.hasNext();){
System.out.println(it.hasNext());
}
}
}

コンパイルできません。
for文の中のIterator it = hs.Iterator();が問題みたいなんですけど、
どっかまちがってます?シンボルが解決できませんって出るんですよね。

後、Iterator it = hs.Iterator();って一体どういうことをしてるのですか?
よろしくお願いします。
857デフォルトの名無しさん:2006/11/18(土) 11:41:19
>>855
"{"と言われているので誰かに指導されてのこととかいうのではないのでしょうね
或いは書いたコードを検証されて指摘されたとか
まずは自分で見やすいと思う形を採るのがいいんじゃないかと思います
職場で上司からの指示とかで、それとは違う形で指示されたとかだとすれば
(そこにどういう意図があるかとかも考えることとして取り入れた上で)
自分としての思いは変わらないままなら自分の思うところは(自分の中で)維持しつつも
指示とかに従って進めるとかいうのがいいんじゃないでしょうか

コードの可読性という面では全く以って「仕様ないこと」ではなくて
書くコード全体できちんと統一されるべきことだし
単純に「コードが無闇に長くなると言われれば…」とかいうものでもないと思いますよ
どう書くかと決め、また統一するのは単純なミスを防ぐためにも重要なことでしょう

"{"について言えばC言語から始まった"教科書"と呼ばれた書籍から受け継がれているところから来ているのでしょうけど
(あちし少なくともJavaでは,仕事上でのCとかでは行末ですが、
プライベートな(Java以外の)コードではこれまで多数のコードの改修をしてきた経験から次行に書いてますけど)
"{","}"の漏れ/ミスひとつで全く動きが変わってしまうような
また気付き難いミスをしてしまいやすくなっりしてしまうとかありますから
きちんと考えて決めておく(統一して進めていくようにする)のがいいと思います

少なくともJavaで言えば"{"は行末に付けることに慣れておいた方が
無難だろうと思います
(慣れれば自然に他言語もそれについてくることになるでしょう)
858ぴゅあ:2006/11/18(土) 11:50:38
>>856
>コンパイルできません。
ではなく、エラーメッセージが出ている筈ですから
まずそれを示してください

>for文の中のIterator it = hs.Iterator();が問題みたいなんですけど、
>シンボルが解決できませんって出るんですよね。
加えて、勝手に自分の言葉で置き換えるのではなく
メッセージそのものが欲しいですね

>Iterator it = hs.Iterator();って一体どういうことをしてるのですか?
どういうことをやろうと考えてコードを書いたのではないのでしょうか
このコードがどういうことをしているのか?については解らないです
何故ってhs.Iterator()なんて存在しないものでは?
存在しないものが何かをすることができるわけもないし。。。

コンパイルができるできないかの前に
もう一度よく考えてコードを書いてみることでしょう
859デフォルトの名無しさん:2006/11/18(土) 12:06:36
>>856
iterator() メソッドは小文字。
あと
System.out.println(it.hasNext());
も本来やろうとしてることとは違うはず。
860デフォルトの名無しさん:2006/11/18(土) 13:01:45
>>855
職場のコーディング規約に従うべき。

特に決められてないなら、好きにしろ。
861デフォルトの名無しさん:2006/11/18(土) 13:35:05
>>855
Javaでは末尾に付けるのが多数派かな、現場かわっていくにつれ指摘されるかもしらんぞ
そういった意味では末尾に付けた方が無難だな
862デフォルトの名無しさん:2006/11/18(土) 13:52:30
>>848
凄く助かりましたありがとうございます。
まだ試していませんがとても丁寧にありがとうございます。
863チャン:2006/11/18(土) 14:36:45
>>859
コンパイルできました。

>System.out.println(it.hasNext());
も本来やろうとしてることとは違うはず。

とはどういうことでしょう??
864デフォルトの名無しさん:2006/11/18(土) 15:15:32
値を一個ずつ取り出して表示したかったんじゃないかと思って。
やりたかったのはコレ↓じゃねーかと。
System.out.println((String) it.next());

違うならそれで良いんだ。
865デフォルトの名無しさん:2006/11/18(土) 15:43:59
コレクションって結構使うもんなんですか?
イマイチ、本読んでもイメージが沸かないというか・・・。
仕事で使って覚えていくしかないのかね〜。
866デフォルトの名無しさん:2006/11/18(土) 16:02:41
独習JavaとJava逆引きを読んだ後での
おすすめの本は何かありますか??

基本をおさえつつ、チョッとレベルアップなのを探しています
867855:2006/11/18(土) 16:28:17
>>857,860
やはり個人で使うのであれば好みで良いですよね。
ありがとうございました。
868デフォルトの名無しさん:2006/11/18(土) 16:32:18


869デフォルトの名無しさん:2006/11/18(土) 16:35:22
javaでポップアップメニューを出したのですが、
body部分の表のしたに隠れてしまってみえないのです。
どうすれば、表の上にポップアップが来るのか教えてください
870デフォルトの名無しさん:2006/11/18(土) 16:41:40
>>855

if文をコメントアウトしたい時

  //if(a = 0)
  {
     a = -1;
     ・・・
  }

ならコンパイル通るけど
  
  //if(a = 0){
     a = -1;
     ・・・
  }

これだと通らない

だから俺は上を勧める
871デフォルトの名無しさん:2006/11/18(土) 17:11:38
if(a = 0)なら元々意味ねぇーだろ
872デフォルトの名無しさん:2006/11/18(土) 17:15:52
いあいあ、例だから
文に意味は無いよ
873816:2006/11/18(土) 17:27:49
レスありがとうございます。

>>842さん
いえ、自分にはそんな難しいのはできません^^;
ただ研究?を通してjavaを学びたいと思っています。


>>843さん
JFreeChartですか?これはクラスか何かですか?

GNU PlotのJava版で作図というのは・・・?
すいません。。やはりまだ全然理解が足りていないようです。
勉強して出直してきます(T__T)
874デフォルトの名無しさん:2006/11/18(土) 18:03:01
values.addValue(new String("1"), new BigDecimal(200));
values.addValue(new String("2"), new BigDecimal(400));
values.addValue(new String("3"), new BigDecimal(300));
values.addValue(new String("4"), new BigDecimal(500));
values.addValue(new String("5"), new BigDecimal(600));
values.addValue(new String("6"), new BigDecimal(300));

上の数値の部分に.csvファイルから値を当てはめたいのですがどうしたらいいか教えてください

csvファイルの中身
1,200
2,400
3,300
4,500
5,600
6,300
875デフォルトの名無しさん:2006/11/18(土) 18:40:39
>>874
Scanner scanner = new Scanner(new File("data.csv")).useDelimiter(",|\\s+");
while (scanner.hasNext()) {
String string = scanner.next();
BigDecimal d = scanner.nextBigDecimal();
values.addValue(string, d);
}
876デフォルトの名無しさん:2006/11/18(土) 18:52:14
>>869
>>1に書いてあるけど
JavaScriptの質問はWeb製作板へ
877デフォルトの名無しさん:2006/11/18(土) 18:52:22
>>873
JFreeChartもgnuplotもグラフを作図するためのものなので、
図を描きたいときには便利だが、
816のやりたいフォントの生成に直接には役に立たなさそう。
生成したベジェ曲線等のデータを簡単に描画したいという時には、
作図ソフトやライブラリやフレームワークを利用したほうが、
一から自分でプログラムを書くよりは楽かもしれないけれど。
878デフォルトの名無しさん:2006/11/18(土) 19:23:32
>>876
これって、GUI画面でポップアップって意味でなかったのか・・・
宿題スレから追い出した者です。迷惑かけてすみませんでした。
879875:2006/11/18(土) 19:23:44
最後に
scanner.close();
で閉じてね
880816:2006/11/18(土) 19:32:57
>>877さん
役に立つ情報を教えて頂きありがとうございます!
一から書くのは自分には無理だと思うので
ググってスプライン、ベジェでの描画のプログラムを参考にして
フォント生成のプログラム作成に挑戦してみます。

881デフォルトの名無しさん:2006/11/18(土) 20:49:09
ボタンをクリックすると線が引かれると思うのですが惹かれません。
多分隠れてしまっていると思うのですがどうすれば線が見えるようになるの?

import javax.swing.*;
import java.awt.*;

public class nishi extends JFrame{
private static JFrame frame;
private JPanel p1,p2;
JButton btn3;
public void paintComponent(Graphics g){
super.paintComponents(g);
g.drawLine(300,300,300,709);
}
public nishi() {
p1 = new JPanel();
p1.setBounds(0,0,800,800);
p1.setLayout(null);
btn3 = new JButton();
btn3.setBounds(440,20,100,40);
p1.add(btn3);
Container cnt = getContentPane();
cnt.add(p1);
btn3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event){
si_ue=true;
repaint();

}
});
882デフォルトの名無しさん:2006/11/18(土) 20:49:55


public static void main(String[] args) {
// 自分自身のインスタンス化
frame = new nishi();
// フレームのセットアップ
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);// 終了時処理
frame.setSize(800,800);// サイズの自動セット

frame.setVisible(true);// 可視化(リアライズ)
}
}
883デフォルトの名無しさん:2006/11/18(土) 20:50:51
882は881の続きです
884デフォルトの名無しさん:2006/11/18(土) 21:12:06
>>881
上に乗っかっているものを全部除ければ見えるようになるよきっと
885ぴゅあ:2006/11/18(土) 21:34:34
>>881
>ボタンをクリックすると線が引かれる
とはどういうコードで実現されているのでしょうか

また
>paintComponent(Graphics g)
はどのオブジェクトに対して処理しようとしている(するつもり)でしょうか

(>>881>>882の間に抜けているコードとかもあるのかな?)
886デフォルトの名無しさん:2006/11/18(土) 22:03:15
>>864
突っ込むなら勉強してからにしないと恥かくぞ。
887デフォルトの名無しさん:2006/11/18(土) 22:42:53
すみません随分以前に知人から譲ってもらったexcel(micro office 2003)について伺いたいのですが
アイコンをクリックしても起動しません

http://ranobe.com/up/src/up150508.zip(excelファイル)
自分で色々調べてみたのですが原因が分かりません
問題を解決するためにみなさんのお力を貸してくださいどうかよろしく御願いします
888881:2006/11/18(土) 22:43:09
そうたぶん乗っかっているから線が引かれないと思います。
どのオブジェクト?
パネルp1上で線をひきたいです。ボタンとかあるそのパネル上で
線を引きたい
889デフォルトの名無しさん:2006/11/18(土) 22:46:16
javaでデーモンとして動作するような常駐プログラムを作りたいんですが、
参考となるソースやサンプルご存知ないですか?
890デフォルトの名無しさん:2006/11/18(土) 22:57:56
>>889
Thread クラスに setDaemon ちゅうメソッドがあるだろ
891ぴゅあ:2006/11/18(土) 23:11:04
>>888
>ボタンとかあるそのパネル上で
>線を引きたい
ならばまず
>public void paintComponent(Graphics g)
がどのオブジェクトに対して(どのクラスで)作用させようとしているか考えてみてください
また他にコードがあってpaintComponentメソッドを呼んでいるというのでなければ
paintComponentが呼ばれることはないんじゃないでしょうか

>そうたぶん乗っかっているから線が引かれないと思います。
は関係ないと思いますよ

(示されたコードから浮かぶキーワードとして)
"JFrame paintComponent"や"JPanel paintComponent"とかをキーにググッて
いくつかのサンプルコードとかを探して参考にしてみるのもいいかと思います
892デフォルトの名無しさん:2006/11/18(土) 23:26:24
>>888
難しいことからチャレンジしないで、やさしい事から解決してったほうがいいかも。
まずはボタンとか取り外して、JPanelの上に線だけを描くシンプルなプログラムを書いてみたらどうだろ。

今適当に検索してみたけれど、例えばここら辺を参考にして。
http://www.rsch.tuis.ac.jp/~k-yoshi/2005/java/java02.html

線を描くことが理解できたら、ボタンを押して線を書くことに挑戦してみては。
893デフォルトの名無しさん:2006/11/18(土) 23:43:49
>>889
デーモンの起動や管理はOS依存なので、Java側で特別気をつけるところはない。
ユーザインタフェース無しで、出力はログのみのプログラムにするくらい。
あとは、作ったプログラムを起動する方法だけど、Windowsならバッチファイル作ってタスクに登録か、
Linuxならcronか。

>>890
Thread#setDaemon()はデーモンスレッドを作成するために使うメソッドで、
デーモンプロセスを作るメソッドじゃない。よく知らないならレスしない方がいいよ。
894デフォルトの名無しさん:2006/11/19(日) 00:49:48
>>875
出来ました!ありがとうございます。
895デフォルトの名無しさん:2006/11/19(日) 03:08:00
    l:;:;l     ヽ、      l;:;:;:ミ.       l;;;;;r'´ ̄ ̄~  ̄ ̄ヽ;;;;;!
    l;:;:|   ,,....、    __,;;;;;;;,,,,,ヾ;:;-、        |;;;;;;|         |;;;;;|
    ヾl,r"‐''''―、,-r'",..,、  i!`T")|      {;;;;r' ,rww、  ,rww、 ',;;;}
    l^ーi '"' ’'` ノ ヽ、,,,...-‐' j!  |      rゝll  (●) l .l (●)  ljヽ
    i! :; `''ー'''';:',, ,,, )    : |ー'"      l(),|    ノ ヽ     !ノ,!
     ヽ-l    ,,.;:;::;;;;:,,,,,    |         ゝ_l    ゝ- '   ,jノ
        ヽ i '"ー''''"~~`' / ,,.!、_ .         l、.   ___   /
        `ヽ、 "" '''  ,,.:'"/' :ヽ         lヽ  ー‐'  ,/ !
         j^'ー--‐''".ィ'ン"   `ー-、     /!、`ー─‐'" /ヽ
おまえら、人生は大胆に生きろ!Javaなんかやっても、何も始まらないぞ!
俺達のように夢を掴め!
896デフォルトの名無しさん:2006/11/19(日) 03:23:59
誰?
897デフォルトの名無しさん:2006/11/19(日) 10:44:07
>>815
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28722

とりあえずここまで組んでみました。
100までのランダムな数字を10個、小さな数字から大きな数字(ループ使用)、
大きな数字から小さな数字(再帰使用)で表示出来るようにしてみました。
その数字の中から小さな数字だけを出力されるようにしたいのですが、
この場合、どのようにすれば最小の数値を見つけることが出来るのでしょうか?
898:2006/11/19(日) 11:03:03
java.util.Arrays というクラスに sort(..) というメソッドがあるが..
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html
899デフォルトの名無しさん:2006/11/19(日) 12:39:36
すっごく基本的なことなんですが
JAVAアプレットって何の役に立つのでしょう
DBにアクセスできないって書いてあるし
ゲーム専用ですか?
900:2006/11/19(日) 13:11:34
ライブカメラ
901881:2006/11/19(日) 13:19:22
891 892 ありがとう、教えてもらったURLのサンプル参考にして
最初から作ったら思い通りになりました!!!
ありがとう!!
902デフォルトの名無しさん:2006/11/19(日) 13:45:28
Javaでエクセルのファイルを開いてセルの内容を取得することはできますか??
903デフォルトの名無しさん:2006/11/19(日) 14:05:44
>>900
アプレット使えませんね・・・・
904デフォルトの名無しさん:2006/11/19(日) 14:09:52
>>902
つ Jakarta POI
905デフォルトの名無しさん:2006/11/19(日) 14:29:47
いまprob0っていうクラスがあってそのインスタンスを生成したいとします。
そのクラスにはメソッドgetTXガ実装されているとします。でそのgetTXを
途中から呼び出したいとします。以下のような感じでいけると思ったのですが
いまいちうまくいきません。コンパイルが通りません。

int i=0
{
Object tt = Class.forName("prob" + i).newInstance();
}

tt.getTX()
どうすれば、プログラム中でインスタンスを生成してメソッドを
呼べますか?
906デフォルトの名無しさん:2006/11/19(日) 14:41:02
キャストすればいいだろ
907デフォルトの名無しさん:2006/11/19(日) 14:46:28
>>904
ありーー。
908905:2006/11/19(日) 15:05:59
キャスト?
int i=0;

Object tt = Class.forName("prob"+i).newInstance();
(Object)tt.get();
みたいにキャストするってこと?コンパイルが通らないです
909デフォルトの名無しさん:2006/11/19(日) 15:22:11
>>908
キャストではできない。キャストする型はコンパイル時に決まっている必要がある。
リフレクション使うか、それよりもスマートなのは、
probX型に共通するメソッドgetTX()を持つインタフェースを定義して、その型にキャストする。
910デフォルトの名無しさん:2006/11/19(日) 15:28:51
>>905-906>>908
Prob0, Prob1, ... に共通の親クラスかinterface Prob を用意しておく。
その上で
Object tt = (Prob)Class.forName("Prob" + i).newInstance();
すりゃいいいだろって話だろ。あ、>>909と被った。
911デフォルトの名無しさん:2006/11/19(日) 15:29:44
>>910
Prob tt = (Prob)Class.forName("Prob" + i).newInstance();
じゃね?
912905:2006/11/19(日) 15:33:24
>909 こういうことですか?
例えばインターフェース
 
get_prob{
getTX();
}

としてクラスmaをつくる。
class ma implements get_prob{
public static void main(String args[]){
int i=0;
Object tt = Class.forName("prob"+i).newInstance();
tt.getTX();
}
}

prob0{
int getTX(){
return 2;
}
}
ということ?
913デフォルトの名無しさん:2006/11/19(日) 15:34:40
private void getStreams() throws IOException {
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
displayArea.append("\nI/O ストリームを受信\n");
}

ソケット通信で、outputを指定のIPアドレスに繋げるためにはこれをどう変えたらいいんですか?
914デフォルトの名無しさん:2006/11/19(日) 15:37:01
教えてあげないよ、じゃん♪
915デフォルトの名無しさん:2006/11/19(日) 15:40:53
分からないなら分からないと素直に言ってくださいよ
916905:2006/11/19(日) 15:43:39
>909、910、911ありがとう!!インターフェースやったら
できた!!ありがとう!!
917905:2006/11/19(日) 15:53:59
ごめんやっぱへん

public interface Prob{
getTX();
}

class ma {
public static void main(String args[]){
int i=0;
Object tt = Class.forName("prob"+i).newInstance();
tt.getTX();
}
}

prob0 implements Prob{
int getTX(){
return 2;
}
}

とやってみたんですが、tt.とやったときにちゃんとメソッドgetTXが
エクリプス上で表示されたので大丈夫かと思ったのですが、
書き終わると×がでてコンパイルがやはり通りません。
eclipseがgetTXを実装しろといってきます。実装しているのに
なんでまた実装しろと言われるのかわかりません。
918デフォルトの名無しさん:2006/11/19(日) 15:55:27
知るかボケ
919デフォルトの名無しさん:2006/11/19(日) 15:58:24
>>917
純粋仮想関数の返り値の型が
voidとintだから別の型だって判断されているんじゃないの?
920905:2006/11/19(日) 16:01:20
>919 ?
void と int ?
どこにもvoid なんてしてませんよ。
それにSystem.out.println(tt.getTX());とやっても2と表示されません。
eclipseだからダメとか?
921ぴゅあ:2006/11/19(日) 16:02:48
>>897
再帰でやりたいというところは再帰の例として微妙かもしれないような気もするけど…
(素直にfor文とかの方がいいんじゃないかと
ただ再帰処理という処理の流れの中でやるということは出てくることは想定できるでしょうけど)

arrayMinメソッドがうまく書けてないということですよね?
まずはprintArrayメソッドの中でやってみる形で確認してみてはどうでしょうか
或いはそれは解っているからやってないのかも知れませんけど、いちおコードを書いてどういう処理になるのか目に見えるようにして考えてみるのもいいかも

arrayMinメソッド…つまり再帰処理でこれをやろうとすると
1.a[0]〜a[N-1]の値を全て見るように動いてくれないといけない
2.返却値として最小値を返していくようにしないといけない
3.は比較の元になる値とその入れ物がないといけない・・・で、その入れ物としては返却値ですよね

1つ目はif文とarrayMinメソッドの再帰呼び出しで実現できているでしょう
それはarrayMinメソッドの先頭にSystem.out.println("i=" + i);とか入れてみると動きが見えるでしょう

先に…3つ目は2つのreturnが何時呼ばれるかと何を返すかをまず見てみればいいと思うので、returnの直前で返そうとしている値を表示させてみればいいでしょう(どっちのreturnであるかを確認できるように表示して)
なおa[0]〜a[N-1]の値も予め表示して判っているとして

そしてarrayMinの再帰呼び出しの戻りとして返却値が何を返すか、a[]のどの要素を見ることになるかというところで、
戻ってきたときのminの値とiの値がそのとき何なのかを見てみるといいでしょう
その上で2つ目として、小さい方の値を判断するのは何処でどうやって(判定処理)返してやればいいかを考えればできると思います

解り難い説明かもしれないけど
再帰呼び出しを考えるポイントは(1つのメソッド内の一連の流れが1つの層として重なっているとして)今見ているのがどこか(どの層か)
i,a[]の何番目の要素を見るか,minに注目して考えてみるのがいいのかも
922905:2006/11/19(日) 16:09:06
ごめんこっちの間違い

public interface Prob{
getTX();
}

class ma {
public static void main(String args[]){
int i=0;
Prob tt = (Prob)Class.forName("Prob" + i).newInstance();
tt.getTX();
}
}

prob0 implements Prob{
int getTX(){
return 2;
}
}

tt.getTX()でこけます
923ぴゅあ:2006/11/19(日) 16:20:26
>>922
なら
>tt.とやったときにちゃんとメソッドgetTXが
>エクリプス上で表示されたので
のというのは判ります

>書き終わると×がでてコンパイルがやはり通りません。
保存するとと言っているのだろうと思いますけど
保存(ソースコードの書き替え)が発生した時点でリビルド(コンパイル)が走るので

Javaで純粋仮想関数とかいう呼び方が出てくるのかどうかは知らないですが
>>919の言っているところをよく考えてみれば?

因みに
>>908で言っているキャストは
(Objectにキャストしているという点だけでなくて)扱い方間違ってない?
924デフォルトの名無しさん:2006/11/19(日) 16:23:35
>>922
public interface Prob{
int getTX(); // int 重要
}
925デフォルトの名無しさん:2006/11/19(日) 16:31:35
>>922
なんかえらくはしょって書いてないか?
926ぴゅあ:2006/11/19(日) 16:43:10
>>922
そうそう
あと
>それにSystem.out.println(tt.getTX());とやっても2と表示されません。
は実行はできたということなんでしょうけど
コンパイル通ったんだろうか?という気もしないでもないです。。。
927デフォルトの名無しさん:2006/11/19(日) 17:05:24
>>922
public interface Prob{
でコンパイルとおったっけ?
928デフォルトの名無しさん:2006/11/19(日) 17:06:12
>>927
まちがい、下の
getTX();
929デフォルトの名無しさん:2006/11/19(日) 17:14:50
>>928
当然通らない
930デフォルトの名無しさん:2006/11/19(日) 17:21:21
コレクションの質問です。
TreeSet ts = new TreeSet();
ts.add("cc");
ts.add("bb");
ts.add("aa");
ts.add("ee");
System.out.println("***TreeSet***");

for(Iterator it = ts.iterator(); it.hasNext();) {
System.out.println(it.next());

for文のなかのIterator it = ts.iteratorが、どういう処理、また意味があるのか分かりません。
931デフォルトの名無しさん:2006/11/19(日) 17:25:46
932デフォルトの名無しさん:2006/11/19(日) 17:28:57
>>922
public interface Prob{
int getTX();
}

class ma {
public static void main(String[] args){
int i=0;
Prob tt = null;
try {
tt = (Prob)Class.forName("Prob" + i).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(tt.getTX());
}
}

class Prob0 implements Prob{
public int getTX(){
return 2;
}
}
933ぴゅあ:2006/11/19(日) 17:30:10
>>930
他で質問したものに付いてるレスは参考になってない?
934デフォルトの名無しさん:2006/11/19(日) 17:33:52
>>932
catchしたあとそのまま先に進んでるね
935905:2006/11/19(日) 20:23:28
サンクス!!ありがとう
936デフォルトの名無しさん:2006/11/19(日) 21:14:23
BuffereImageにした画像を
AffineTransformのrotateで傾けた後
JFrameに表示させたんですが,
その傾けた後の画像を
もう一度BuffredImageとする方法が分かりません
どのようにしたらいいでしょうか?
937デフォルトの名無しさん:2006/11/19(日) 21:38:25
自己レス

int w = comp.getWidth(), h = comp.getHeight();
BufferedImage image = new BufferedImage( w, h, BufferedImage.TYPE_INT_RGB );
Graphics2D g2 = image.createGraphics();
comp.paint( g2 );
g2.dispose();
ImageIO.write( image, "jpeg", new File( "savedImage.jpeg" ) );

しかし
int w = comp.getWidth(), h = comp.getHeight();
では画像が切れてしまうのが難点。
938デフォルトの名無しさん:2006/11/19(日) 23:51:01
>>919
純粋仮想関数ってなんのことだ?
939デフォルトの名無しさん:2006/11/19(日) 23:51:45
c++でいうインタフェースのことだ
940デフォルトの名無しさん:2006/11/20(月) 00:05:47
あのー
とりあえずはじめてのジャバ読み終わりました
で・・・次になんかDBにアクセスしてデータいじるPG
勉強したいのですが・・・
ジャバアプリケーション勉強すればいいのでしょうか
それともサーブレット+JSPやればいいのでしょうか
なんか世の中の流行で行くと後者みたいですが
そもそもアプリケーションはマイナー(過去の遺物)なのでしょうか
教えてください先輩方
941デフォルトの名無しさん:2006/11/20(月) 00:40:31
>>937
傾けた後の画像のサイズ分だけ拡げたものを最初から用意すればいいんじゃないか?
942デフォルトの名無しさん:2006/11/20(月) 00:44:02
>>941
そですね。解決いたしました

(int)(image.getWidth() * (Math.abs(Math.sin(theta)) + Math.abs(Math.cos(theta))));

って感じのやつにしましたです
ありがとでした
943デフォルトの名無しさん:2006/11/20(月) 00:46:28
940へ。
創るJavaか独習Java
の後コアJavaへ。
まあできるならコアJavaをいきなりでも
かまわないと思うけど。
で、サーブレット+JSPは別の本で勉強すべし。
全部やれよ。
そうすれば重労働だが飯は食える。
後TCP/IPもな
944デフォルトの名無しさん:2006/11/20(月) 01:11:54
>>943
なるほどコアJavaね・・・
高!!!!!!!!!
アプレット中心に載ってる
初めてのジャバ応用編買ってしまった俺って・・・
ところでJavaアプリケーションってヤッパつかってる人いないのかなあ

945ぴゅあ:2006/11/20(月) 01:27:35
>>944
(微妙に文面に気になるようなところがあるような気がしたりするところもあったりだけど…)

実際どんなの作ってるのか見えきれないところはあったりするけど
ここに出てきてる話って殆どがアプリケーションぽくて(或いは多少アプレット)
サーブレットとかJSPとか殆ど出てきてなさそうに思えない?
946デフォルトの名無しさん:2006/11/20(月) 01:59:10
944へ
俺今日基礎編読んだ。
応用は明日からだな。
JSPとサーブレットはテキトーで。
947デフォルトの名無しさん:2006/11/20(月) 08:58:49
>>921
色々とやってみましたが、どうも上手くいきません…
説明までしてくださったのに力不足です。

どのようにすれば求められるのかぴゅあさんの模範ソースを教えては戴けないでしょうか?
それを元に次は最大値を求めるソースを書いてみるつもりです。
あつかましいですが、どうかよろしくお願いします。
948ぴゅあ:2006/11/20(月) 09:24:10
>>947
ホントにあつかましいわね。
ソースには著作権がありますから無理です。
もう書き込まないでくださいね。
949ぴゅあ:2006/11/20(月) 09:50:27
>>947
何とか導き出せなかったのは残念ですが…

static int arrayMin(int[] a, int i) {
System.out.println("I: i=" + i);
if (i > 0) {
System.out.println("C: a[" + (i - 1) + "]=" + a[i - 1]);
int min = arrayMin(a, i - 1);
System.out.println("R1: min=" + min + " a[" + (i - 1) + "]=" + a[i - 1]);

// if (min > a[i - 1]) {
// min = a[i - 1];
// }
// System.out.println("R: min=" + min);
return min;
}
System.out.println("R2: a[" + i + "]=" + a[i]);
return a[i];
}

まず"if (i > 0)"によりa[9]〜a[0]についてarrayMinメソッドの再帰呼び出しが起こりますよね
(>>921で1つ目と言っていたところ)

i=0でarrayMinメソッドが呼ばれたら、末尾のreturnが実行されa[0]を返却値に戻り
最後のarrayMinメソッドの呼び出しに戻る,つまりminの値はa[0]となる
つまりその前の1つ目のreturnでminを返却値として戻る
以降、順次1つ目のreturnで戻ることになる
(同じく3つ目と言っていたところ)

それらはまず上記のコードで確認してみれば判るでしょう

そして2つ目と言っていたところは上記のコードのコメントアウトしてあるコードを生かしてみれば確認できるでしょう
950ぴゅあ:2006/11/20(月) 09:51:30
ただ、先のコードは>>897で示されたコードを改変しないように書いてありますが
1点無駄があることに気付くかも知れません

例えば

C: a[0]=86
I: i=0
R2: a[0]=86
R1: min=86 a[0]=86
R: min=86

となりますが
"R1: min=86 a[0]=86"のminはa[0]
つまりa[0]同士で"if (min > a[i - 1])"をやっていることを示しているでしょ?

a[0]が返される(i-1=0)ときは比較対象がないんですから
arrayMinメソッドを呼ぶ必要はなく
末尾のreturnで戻るだけをすればいいということになるでしょう

C: a[1]=57
I: i=1
R2: a[0]=86
R1: min=86 a[1]=57
R: min=57

そこは宿題にしてみます
951デフォルトの名無しさん:2006/11/20(月) 11:12:50
ちょっと教えて下さい。
Class A と Class B を作って A のメインクラスで B のオブジェクトを利用します。
それでしばらく使っていたんですが、ある時ふと、B のオブジェクトから A 非 static なメソッドを利用したいと思って、
そこで B のクラス内で A のオブジェクトを作るコードを書いて実行してみました。
実は実行するまでこのアプリは無限にオブジェクトをループで作り続けて実行できないと思っていたのですが、
実際は何も問題無くできたんです。
さて、どうして無限にオブジェクトができなかったんだろう?って疑問に思ったんですが、実際プログラムはどんな参照をして
動いていたんでしょうか。
お馬鹿な質問ですがよろしくお願いします。
952デフォルトの名無しさん:2006/11/20(月) 11:24:18
>>951
B のクラス内で A のオブジェクトを作ったからといって
A のメインクラスが実行されるわけではないから。
つまり、Bのクラス内で A のオブジェクトを作っただけ
なら、そのとき作られた A のオブジェクトの中で、「新
たに B のオブジェクトを作るロジック」が動作するわけ
ではない。
953デフォルトの名無しさん:2006/11/20(月) 11:29:51
>>952
ありがとうございます。
でも、どうして新たに B のオブジェクトを作ろうとしないのでしょうか。
A のクラス内には B b = new B(); が実行されているのに不思議だと思います。
勉強が足りなくてすみません。
954デフォルトの名無しさん:2006/11/20(月) 11:34:08
じゃあ足りるまで勉強して来い
955デフォルトの名無しさん:2006/11/20(月) 11:35:52
>>954
す、すみません!(;_;
分かりやすく教えて頂けると思ったので・・・・。
本にも聞いてみます!
956ぴゅあ:2006/11/20(月) 11:55:28
>>955
本に聞いてもすんなり答えてくれることは少ないかも?と思ったりもするけど…

AでBのオブジェクトを作っているのが何処か
BでAのオブジェクトを作っているのが何処か
>B のオブジェクトから A 非 static なメソッドを利用したい
という中で"AでBのオブジェクトを作っている"(相互に作り続ける)という流れを通っているか

書いたコードの流れをしっかり追ってみる

>>951が言わんとしているのはそういうところだろうし
>>954の言う"足りるまで勉強して来い"というのは
そういうところ(追え)でしょうねぇ?
957ぴゅあ:2006/11/20(月) 11:59:10
>そういうところ(追え)でしょうねぇ?
自分で書いたコードなんだから

というところ
958デフォルトの名無しさん:2006/11/20(月) 12:01:35
>>949
ぴゅあさん、レスありがとうございます。

丁寧な解説で、どのように再帰が動いているのか掴むことが出来ました。
宿題の方ですが、「末尾のreturnで戻るだけ」という事は、単純にmainメソッドの方で
このように呼び出せば良いという事でしょうか?

System.out.println("Min number: "+arrayMin(array, array.length));

また、maxの値ですが、

static int arrayMax(int[] a, int i){
if(i > 0){
int max = arrayMax(a, i-1);
if (max < a[i - 1]) {
max = a[i - 1];
}
return max;
}
return a[i];
}

とし、同じように

System.out.println("Max number: "+arrayMax(array, array.length));

と呼び出してやれば良いでしょうか。
959ぴゅあ:2006/11/20(月) 12:39:27
>>958
いやそれは
>System.out.println("Min number: "+arrayMin(array, array.length));
(当然ながら欲しいものだから)結果を表示しているというだけで

触るのはarrayMinメソッドの中
>>949の中で殆ど答えになるようなヒントは出ていると思いますけどね
>a[0]が返される(i-1=0)ときは比較対象がないんですから
>arrayMinメソッドを呼ぶ必要はなく
>末尾のreturnで戻るだけ

例として挙げた2つの結果をよく見比べ、
またiの値によってどう流れが変わるか絵に描いて考えてみたりするといいかも

たぶんその流れの部分を理解できるかが
再帰呼び出しの処理を理解する上での"キモ"かも

arrayMaxメソッドについては確認するまでもなく
arrayMinメソッドができれば簡単よね("最小値を採る"の代わりに"最大値を採る"にするだけだし)

あと、>>921の冒頭で書いたfor文内でやるのはちゃんとやって検証しておいた方がいいと思う
(簡単だからとか解ったつもりで頭でイメージするだけでなく、ちゃんとコードを書いて実行し、結果を得ること)
最小値,最大値を求めたりという場面はfor文内とかの方が多かったりするかも?

また、for文内で処理するとき、再帰呼び出しで出てきたようにa[0]或いはa[9]等、
1つはループから除外するとかという形になったりすると思うけど
(除外するという形の方が簡単で判り易いだろうと思うけど)
ループ内でa[0]或いはa[9]等を判断して場合分けするようなのもオマケでやっておくのもいいかも
ループ内での処理の仕方を知っておく上では損はないだろうと思います
(再帰呼び出しについて理解しようとしているということに限れば余計なことだろうけど)
まぁそれはarrayMin/arrayMaxメソッドの後にでもやろうと思えば…ってことで
960デフォルトの名無しさん:2006/11/20(月) 13:03:06
>>959
ありがとうございます。やってみます。
961デフォルトの名無しさん:2006/11/20(月) 15:04:37
>>957-958
ぴゅあさんありがとうございます。
B のオブジェクトが A のオブジェクトを作ったときに、作られた A のオブジェクトが B のオブジェクトを
作るコードの所を通っているかどうかを確認しなさいって事ですね。
今から暇を見て確認してみます。
それよりも、相互に作り続ける簡単なコードを書いてもいいかもですのでやってみます。
962961:2006/11/20(月) 15:05:52
↑アンカー間違ってました。
>>956-957でした。
963961:2006/11/20(月) 15:41:30
無駄にスレを消化する馬鹿だと人に言われるかもしれませんが実験してみました。
結果、StackOverflowError が発生して処理がストップしました。
少しずつ>>952さんの説明が理解できて来ました。ありがとうございます。
当り前な事でも馬鹿な実験でもしないと理解できない飲み込みの悪い新人でした。
お邪魔しました。
964デフォルトの名無しさん:2006/11/20(月) 15:44:12
昨日からJava始めたばかりですが、いきなり分からない事が出てきました。

//Exercise1.java

class Exercise1{
public static void main(String args[]){
float a;
a=2.0;
System.out.println("変数aの値は"+a+"です");
}
}

これでコンパイルすると、エラーが出ます。
検出値:double
期待値:float
となります。
doubleで宣言してやるとうまく行きましたが、どうしてfloatで宣言できないのでしょうか?
965デフォルトの名無しさん:2006/11/20(月) 15:51:02
>>964
2.0という値の型がdoubleだから。
2.0f と書くとfloatの定数になる。
966デフォルトの名無しさん:2006/11/20(月) 16:14:15
>>965
すいません。理解できません。
本には、floatとdoubleの違いは、扱える桁数にある、と書かれていたのですが…
それ以外にも違いがあるということでしょうか?
967デフォルトの名無しさん:2006/11/20(月) 16:16:33
>>966
double から float への変換は、精度が悪くなる変換なので
キャストしないとコンパイル時に怒られる。

float から float なら問題ないけど。
968ぴゅあ:2006/11/20(月) 16:22:55
なんだろ?

>>963
>当り前な事でも
誰が当たり前と決めたのか知らないけど
どんな些細なことでも実際にやってみることが大切だと思いますけどね
969デフォルトの名無しさん:2006/11/20(月) 16:33:58
>>967
せっかく答えて頂いたのに、私の理解力が追いついていません。
とりあえず、入門書を一通り読んでから、また来ます。
ありがとうございました。
970デフォルトの名無しさん:2006/11/20(月) 17:16:30
>>966
2.0 と書いただけだと double になるのよ。だから内部的には2進数で
   0100000000000000000000000000000000000000000000000000000000000000
として保持される。64ビットを使って表現してるわけですよ。さてここで
あえて float だと指定してすると(※ 2.0f と書く(>>965を参照))今度は
   01000000000000000000000000000000
というように32ビットの表現になるわけですよ。扱える桁数が違うとか、
数値の精度が違うというのは、こういうことです。
>>964>>966>>969は、わかりましたか?
971970:2006/11/20(月) 17:20:42
あと、詳しいことは http://ja.wikipedia.org/wiki/IEEE754 でも見て勉強してくれ。
972デフォルトの名無しさん:2006/11/20(月) 17:33:26
>>969
float と double の違いは、扱える桁数にある
⇒ 桁数が多いほうから少ないほうへ不用意に変換すると、値が変わってしまうことがある
⇒ もしプログラマ側が意図していない変換だとバグの元になる (実際この手のバグでロケットが墜落している)
⇒ コンパイラが親切にも警告を出してくれる

OK?
973デフォルトの名無しさん:2006/11/20(月) 17:43:29
みなさん。
ちょっと解かったかもしれません。
つまり、
>>964でコンパイル出来るということは、32ビットで作業しているから。
本の作者は32ビットの環境でコンパイルしていたって事でしょうか?
Java のバージョンの問題?
OSの違い?
974デフォルトの名無しさん:2006/11/20(月) 17:43:50
精度や桁数がどうとかいう問題の前に、
ある型の変数に異なる型の値は入れられない、
というのを理解しているんだろーか。
975デフォルトの名無しさん:2006/11/20(月) 17:45:32
javaのバージョン (かな? コンパイラでバージョンアップと共にワーニングが厳しくなるのはよくある事)
もしくは本のバグ
976デフォルトの名無しさん:2006/11/20(月) 17:50:32
>>973
32bit の環境でコンパイルしたとか、OS が違うとかは考えにくい
java もしくは javac のバージョンが違うというのは、まあよくあること

最も多いのは、本の誤植もしくはバグ
977デフォルトの名無しさん:2006/11/20(月) 17:55:31
>>974
それは大丈夫だと思います。
int に 2.0 は入れられないということですよね。
int a;
a=2;
としなければいけないのは解かります。
2.0 は double で、2.0f とすれば float ということですね。
978デフォルトの名無しさん:2006/11/20(月) 18:07:54
本のバージョンは 1.4.1_01 で
私のバージョンは 1.5.0_09 でした。
Java のバージョン違いが原因?
とにかく、2.0 だと double になるというのが解かったので、本の float を double に置き換えながら、読み進めたいと思います。
979デフォルトの名無しさん:2006/11/20(月) 18:09:25
>>978
その本の名前を書いてちょ
980デフォルトの名無しさん:2006/11/20(月) 18:18:48
>>979
世界でいちばん簡単な
Java の e 本
Java の基本と考え方がわかる本

2003年6月1日 第1版第1刷発行

著者 堀江 幸生

発行 株式会社秀和システム

ISBN4-7980-0533-9 C3055

です。
981デフォルトの名無しさん:2006/11/20(月) 18:21:29
>>980
うーん、改訂入ってるんじゃないかな・・・
982デフォルトの名無しさん:2006/11/20(月) 18:30:01
質問です。

ttp://java.sun.com/applets/jdk/1.4/index.html

このページのGraphLayout (1, 2, 3, 4)のデモアプレットのソースが全部同じなんですけど
これのソースってどこかにないでしょうか?
983デフォルトの名無しさん:2006/11/20(月) 18:43:30
>>982
よく見ろよ
984ぴゅあ:2006/11/20(月) 18:57:38
>>978
>とりあえず、入門書を一通り読んでから、また来ます。
と言ってたからそれでいっか と思ってたけど、>>965,>>967で十分なものが出ているんじゃないかと思いました
(>float から float なら問題ないけど。
は"float aからfloat bへの代入…"とかいう表現の方がいいのかな?と思ったりはしたけど)

>>966では
>本には、floatとdoubleの違いは、扱える桁数にある、と書かれていたのですが…
ということだけど、"扱える桁数にある"というところもよく理解できていないような気もしたりします

解らなければ仕方ないのだろうけど
変に考え込み過ぎているんじゃないだろうか?という気もしたりです
コンパイラがエラーだと言っているんだから
解らないと思ううちは解らないなりに素直に従えばいいような気がしますけど
(いちおでも>>965,>>967の言ってることを把握できていれば)

また>>964に示されたコードはその本に書かれていたものなのでしょうか
あちしが選んで最初に買った唯一のJavaの書籍はかなり古いですが、>>965,>>967が言ってることはちゃんと解説されています(JDK 1.0.2頃に書かれたものらしい)
因みに最近主に使っているのは1.4.2_12で1.4.1よりは新しいけど、確認してみるとちゃんとエラーとして通知されるようです

>>964
>これでコンパイルすると、エラーが出ます。
>検出値:double
>期待値:float
>となります。
と書かれているところから
"Exercise1.java:8: 精度が落ちている可能性"とか出ているだろうところを
落としてしまっているところにも理解に至れない問題があったりするのかも?
985デフォルトの名無しさん:2006/11/20(月) 23:00:42
>>984
>>964のコードは、本に書かれていた通りのものです。
float と double の違いについては殆ど触れられておらず、悩んだ挙句にここへ質問に来たわけです。
さっき、書店によって、他の本を見てきたところ、
「 float a=1.0f; 」と、数値の後に f をつける必要があるので注意と、ちゃんと書かれていました。
どうも、私の買った本に誤植があったということみたいです。

いろいろ教えてもらって、本当にありがとうございます。
こんなに親切なスレは初めてです。
986デフォルトの名無しさん:2006/11/20(月) 23:02:20
javaでwindowsのguiアプリって作れますか?
987デフォルトの名無しさん:2006/11/20(月) 23:06:59
applet
988デフォルトの名無しさん:2006/11/20(月) 23:14:28
>>983

同じだとおもうんですけど…
989デフォルトの名無しさん:2006/11/20(月) 23:18:26
>>986
できます
990デフォルトの名無しさん:2006/11/20(月) 23:27:51
>>988
HTML ファイルのソースをよく見ろよw
991デフォルトの名無しさん:2006/11/21(火) 02:16:15
アプレットにパラメータ与えられることを初めて知った俺うんこ
992デフォルトの名無しさん:2006/11/21(火) 03:35:58
これでpicoを二回実行しても一回しか音がならないのですが
どう直せばいいのですか?
public class SE {

static final int EXTERNAL_BUFFER_SIZE = 128000;
static AudioInputStream audioInputStream;
static AudioFormat audioFormat;
static DataLine.Info info;
static SourceDataLine line;
static File soundFile;
static SE se = new SE();
private SE(){
try{
soundFile = new File("se_saa01.wav");
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
audioFormat = audioInputStream.getFormat();
info = new DataLine.Info(SourceDataLine.class,audioFormat);
line = (SourceDataLine)AudioSystem.getLine(info);
}catch(FileNotFoundException fe){ fe.printStackTrace();
}catch(IOException ie){ie.printStackTrace();
}catch(Exception e){
}
}
993デフォルトの名無しさん:2006/11/21(火) 03:36:46

public static void pico(){
try{
line.open(audioFormat);
line.start();

int nBytesRead = 0;
byte[] adData = new byte[EXTERNAL_BUFFER_SIZE];
while(nBytesRead != -1){
nBytesRead = audioInputStream.read(adData,0,adData.length);
if(nBytesRead >= 0){
int nByteWritten = line.write(adData,0,nBytesRead);
}
}
line.drain();
line.close();
}catch(Exception e){System.out.println(soundFile);}
}

}
994デフォルトの名無しさん:2006/11/21(火) 03:58:13
今日から始めた初心者です。if文について確認させてください。
{}を付けなかった場合のif範囲ですが、例えば以下のようなコードで…
 int i = 2;

 if (i == 1)
 System.out.println(1);
 System.out.println(2);
 if (i == 2)
 System.out.println(3);
 System.out.println(4);
この場合、コンソールには2,3,4が出力されます。
感覚的に3,4の出力を期待してしまうのですが、
これは特に{}で範囲を指定しない場合、
ifが見るのは直近の処理1つのみだからという認識でよいでしょうか?
995ぴゅあ:2006/11/21(火) 05:50:34
995
は?
996ぴゅあ:2006/11/21(火) 05:55:58
996
埋める。

| What search for?
|  It's cool!!!
| ┌────────────┐
| | How to eat you?       |
| |                   |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
997デフォルトの名無しさん:2006/11/21(火) 05:57:44
>>992
どういう風にpicoを呼び出しているか分からないが、
そこに出ているソース以外には、SE.pico();SE.pico();しかないのなら、
二度目のpicoの呼び出しの時にはaudioInputStreamにはデータが残ってないから。
lineはpicoの呼び出しのたびに開いているのに、
audioInputStreamをSEのコンストラクタでしか開いていないのなら当然1回しか鳴らない。

>>994
if文で条件が成立したときに実行されるのは一つの単文か{}のブロックに囲まれた一つの複文。
どこまでがifの下についているか紛らわしいので、単文一つしかない時でも{}で囲めという規範の人もいる。
そのあたりはコーディング規約に従うか、無ければ個人の趣味に従うかすればいいと思う。
998ぴゅあ:2006/11/21(火) 05:59:41
| What search for?
|  It's cool!!!
| ┌────────────┐
| | How to eat you?       |
| |                   |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
999ぴゅあ:2006/11/21(火) 06:01:05
久々の1000ゲット
| What search for?
|  It's cool!!!
| ┌────────────┐
| | How to eat you?       |
| |                   |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
1000デフォルトの名無しさん:2006/11/21(火) 06:01:38
うふふ
さいごのしょうしゃはかなりあかしらかしら〜
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。