トップページ⇒tech
1001コメント465KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/22(日) 13:42:10
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下の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あたりで。
0002デフォルトの名無しさん2006/10/22(日) 13:45:18
【初心者】Java質問・相談スレッド92【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1159642341/l50

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

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

本スレはこちら

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

0006デフォルトの名無しさん2006/10/22(日) 18:10:37
for文を使って
2次元配列をつくるのにはどうしたらいいんですか?
0007デフォルトの名無しさん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];
0008デフォルトの名無しさん2006/10/22(日) 18:27:04
>>6

このスレは偽物です。

本スレはこちら

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

向こうでは本物とも偽物ともくだらんことは一言も言い出してないし
向こうでは本スレではないと明言されてるんじゃないの?
0010デフォルトの名無しさん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のデータ)
0011デフォルトの名無しさん2006/10/22(日) 19:01:37
>>9
むこうのスレに(・∀・)カエレ!
0012デフォルトの名無しさん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)
0013ぴゅあ2006/10/22(日) 19:21:21
>>10
>行が一つのインスタンスになっていて
というのはそういうクラスを既に作ってあるということ?
(匿名でもできなくないけどちゃんと作った方が楽だと思うし)

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

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

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

或いは
>get項目1(key) → return c
>...
とかの部分はそのMapを操作した結果から1行を得てそれぞれにアクセスするとか
Mapを含めて操作するクラスを作って必要なメソッドを用意しておいてやるとか
0014デフォルトの名無しさん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)

とか、そんな感じの方が良いか。
0015デフォルトの名無しさん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を定義すればいいんでしょか?
0016デフォルトの名無しさん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
0017デフォルトの名無しさん2006/10/22(日) 20:10:48
>>15
言葉足らずでごめんね。

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

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

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

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

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

まじ、参考になりまくりでした。ありがとうございまっす!
0020デフォルトの名無しさん2006/10/22(日) 20:40:26
兄弟スレッド
【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
0021デフォルトの名無しさん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を作成した意味がないような気がするんですが、なにか根本的なところが間違ってるんでしょうか?
0022ぴゅあ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でも可)
0023ぴゅあ2006/10/23(月) 00:39:39
あぁ あと
>List<List<項目>> l;
とするということは2次元配列を扱おうとしていることになるでしょうから
(Listとか関係なく)2次元配列の扱い方について調べてみるといいのかも

そうすればforループの中をどうすればいいかとか
判ってきたりするんじゃないでしょうか
0024デフォルトの名無しさん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を配列にしてるのがおかしいんでしょうか?
0025デフォルトの名無しさん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次元配列みたいに扱えるんですね
0026ぴゅあ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で決めておく)にするかの違いでしょう
0027デフォルトの名無しさん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
0028デフォルトの名無しさん2006/10/23(月) 01:41:38
>>27
prontln
は負荷がおっき〜のでバッファに保存して、
ボトルネックがprintlnかシリアルポートかき莉分けてみては。
0029デフォルトの名無しさん2006/10/23(月) 01:44:04
>>27
まさかとは思うが、println() がボトルネックになってたとか、そーゆー話じゃないよね?
0030デフォルトの名無しさん2006/10/23(月) 01:44:41
今、世論調査用の入力フォームをアプリケーションとしてJavaで作成しているのですが
メニュー画面から入力フォーム(入力用テキストフィールド等が配置してある)
に行きさらにボタンを押すと2枚目の入力フォーム・・・というような画面遷移の処理の仕方が全く分かりません。
ラベルの配置等個々の画面の表示等は教本片手になんとかできたのですが
Javaでプログラムをするのが初めてなものですいません、どなたかご教授お願いします。
0031ぴゅあ2006/10/23(月) 01:53:55
>>25
そんなとこです

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

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

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

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

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

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

こっちで質問してもらっても良いですよ
【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
0047デフォルトの名無しさん2006/10/23(月) 19:30:38
>>46は偽者。みんなわかるよね?
0048デフォルトの名無しさん2006/10/23(月) 19:33:42
java.utilCollections.max&min
0049デフォルトの名無しさん2006/10/23(月) 19:55:27
質問です。
Vectorでクラスの配列をリストで管理するように
整数の配列をリストで管理するようなクラスってありませんか??
0050デフォルトの名無しさん2006/10/23(月) 20:20:38
>>49
jakarta commons primitives
0051デフォルトの名無しさん2006/10/23(月) 20:28:50
JavaServletを使ってファイルが送信されてくるのを待つプログラムを作りたいのですが、
どこかに参考となるようなサンプルソースコードが掲載されたサイトはありませんか?
0052ぴゅあ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を作って乗せるとかの方がいいのかも
(何かのときに試してみようかとも思ってるけど
もし試してみたら、こんなだったとかあると嬉しかったりするけど…)
0053ぴゅあ2006/10/23(月) 20:58:45
>>51
もしかしてファイルのアップロードとか?
"Servlet アップロード"とかでググってみれば色々出てくると思うけど
0054デフォルトの名無しさん2006/10/23(月) 21:07:15
私はドットコムというサーバー会社を借りています。
昨日私宛に1通のメールが届きました。

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

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

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

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


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

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

よろしくお願いします。
0058デフォルトの名無しさん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
0059デフォルトの名無しさん2006/10/24(火) 01:10:31
>>57
java.awt.FileDialog だったら

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

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

Swing だと JFileChooser かな。
0060デフォルトの名無しさん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, "ファイルを開く");
0061572006/10/24(火) 01:49:22
>>59-60
回答ありがとうございます!
探し求めていたものはまさにこのようなクラスです。
本当に助かりました。
感謝です!!
0062302006/10/24(火) 02:41:45
>>52
まさかこんなに丁寧に答えてくださるとは思ってもみませんでした
ありがとうございます
がんばってみますね
もしその方法を試されて成功された場合はまた教えてください
0063ぴゅあ2006/10/24(火) 13:55:35
>>53
ドンピシャです!参考になりそうなソースが出てきました。ありがとうございます!
0064デフォルトの名無しさん2006/10/24(火) 13:57:11
なんでマ板ってID出ないのかな。
出た方が便利なのに。
0065512006/10/24(火) 14:09:17
>>63は私じゃありません!誰かがぴゅあさんを陥れようとしているのです。。。
0066デフォルトの名無しさん2006/10/24(火) 15:51:24
ぴゅあが出てからAA荒らしがなくなったのが全てを物語ってる
0067デフォルトの名無しさん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
0068672006/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;
です
0069デフォルトの名無しさん2006/10/24(火) 17:03:15
>>67
半透明を指定するアルファ値を不透明に固定で良いなら

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

必要があるなら & 0xFF とかでマスクする。
0070672006/10/24(火) 17:11:38
ありがとうございます!
上記の方法で解決しました!
2chでこんなやさしくされたの初めてだ(´ー`)
0071デフォルトの名無しさん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以上は表現上マイナスになってしまいます。
これは仕様なのでしょうか?
0072デフォルトの名無しさん2006/10/24(火) 20:38:46
初歩的な質問ですが...
GUIアプリケーションを作成した後, アイコンをダブルクリックして実行するようには出来ないんですか?
0073ぴゅあ2006/10/24(火) 20:44:19
>>65
そんな仕様もないのは放っときゃあいいと思うけど
肝心の質問の方は解決できましたか?
0074ぴゅあ2006/10/24(火) 21:01:40
前のスレッド
http://pc8.2ch.net/test/read.cgi/tech/1159700963/702
以降と似た話だと思いますよ

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

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

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

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

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

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

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

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

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

JVMのバグ?
0092デフォルトの名無しさん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();
}}

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

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

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

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


v1.3で書かれたコードからv5.0では、どういう実情なのでしょうか?
0101デフォルトの名無しさん2006/10/26(木) 21:42:24
>>100
1.4 とか 5.0 で deprecated になったメソッド使ってるとか、
1.4 で予約語に指定された assert、5.0 で予約語に指定された enum とかを
変数名、フィールド名、メソッド名に使ってなければ大丈夫だと思うけど。
■ このスレッドは過去ログ倉庫に格納されています