【初心者】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:18http://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:370005デフォルトの名無しさん
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:372次元配列をつくるのにはどうしたらいいんですか?
0007デフォルトの名無しさん
2006/10/22(日) 18:15:19int[][] a = new int[10][];
for(int i = 0; i < a.length; i++) a[i] = new int[10];
0008デフォルトの名無しさん
2006/10/22(日) 18:27:04このスレは偽物です。
本スレはこちら
【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むこうのスレに(・∀・)カエレ!
0012デフォルトの名無しさん
2006/10/22(日) 19:16:21> 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>行が一つのインスタンスになっていて
というのはそういうクラスを既に作ってあるということ?
(匿名でもできなくないけどちゃんと作った方が楽だと思うし)
>なにかいいクラスないでしょうか?(多次元のHashとか?)
その上で、行方向だけみればいいので多次元とか考える必要はなくて
1次元配列として考えられますよね
そして
>日付をキーとしてデータを取得したい
というところからキーと値のペアを持てるのはMap(くらいかな?)
(キーが一意になることを前提としてみれば)
・キー部分(日付)を取り出してMapを作る
・先のクラスには値部分だけを持たせてキーと値のペアでMapを作る
とか考えられるんじゃないでしょうか
HashMapを使うのかどうかとかは目的に応じて適したものを使えばいいと思う
或いは
>get項目1(key) → return c
>...
とかの部分はそのMapを操作した結果から1行を得てそれぞれにアクセスするとか
Mapを含めて操作するクラスを作って必要なメソッドを用意しておいてやるとか
0014デフォルトの名無しさん
2006/10/22(日) 19:23:42SortedMap<日付, 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
すいません、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中止となります。また、それに伴いましてクリスマスイヴやプレゼント交換会
も中止となります。ご了承下さい
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言葉足らずでごめんね。
> Map<日付, Integer>と、日付に対してIntegerを割り当ててるのは、N個前を表現するためですか?
yes
> Mapを作る時点で日付の一番古いところに値0、それ以降は値++って感じ
そんな感じで。
0018ぴゅあ
2006/10/22(日) 20:31:05>既にクラスがあるのではなく、
>データをどのようなクラス(or配列)にいれるのがベターかという話しです
取り敢えずやってみるとかなら兎も角も
行の全ての項目を持つかキーと値を別としたクラスを作っておくと
1つのオブジェクトとか考えられて楽かもね
後々も
キーで探したい仕組みというのと、行内の各項目とはまた別でしょ?
Mapが作れた後は、キーをどう扱うかだけ考えればいいことになると思うし
例えば
・キーとなる日付の行を基準に存在する行に対して±nとか
・日付に対して±nの日付をキーとして探すとか
作ったMapに対して操作するクラスがあればいいわけで
機能を増やしたければメソッドを作りこんでいけば
行が取り出せれば、行の単位としたオブジェクトから各項目を取り出したりすればいいわけだし
(それは行単位としたクラスにメソッドがあればいいでしょ)
>>13で言ったのと同じことしか言ってないですけどね
0019デフォルトの名無しさん
2006/10/22(日) 20:40:20どもどもー
とりあえず>>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>>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根本的に間違っているといえば・・・
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:36ArrayList<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あぁぁ、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>そもそも、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:10rxtxを使ってシリアル通信でデータを取り込もうとしているんですが、
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:38prontln
は負荷がおっき〜のでバッファに保存して、
ボトルネックがprintlnかシリアルポートかき莉分けてみては。
0029デフォルトの名無しさん
2006/10/23(月) 01:44:04まさかとは思うが、println() がボトルネックになってたとか、そーゆー話じゃないよね?
0030デフォルトの名無しさん
2006/10/23(月) 01:44:41メニュー画面から入力フォーム(入力用テキストフィールド等が配置してある)
に行きさらにボタンを押すと2枚目の入力フォーム・・・というような画面遷移の処理の仕方が全く分かりません。
ラベルの配置等個々の画面の表示等は教本片手になんとかできたのですが
Javaでプログラムをするのが初めてなものですいません、どなたかご教授お願いします。
0031ぴゅあ
2006/10/23(月) 01:53:55そんなとこです
ArrayListの中身って、オブジェクトの配列になっていたりします
("います"と言ってしまってもいいのか?)
Integer[] koumoku;
とかとしてしまうと、予め要素数が判っている必要がありますが
ArrayListにしてやると、足りなくなったら拡張してくれるので
(内部ではサイズを変えて(拡張して)newし直している)
必要な要素数が予測できないとき(要素数が可変の配列として)ArrayListとかで一度受け取ってから
後でサイズを得て、ピッタリサイズの配列に作り直すとか
よくやられているみたいです
0032ぴゅあ
2006/10/23(月) 02:07:592次元配列辺りとかが解ってくると(似た形にはなったりすると思う)
その辺りも解ってくるんじゃないかと思います
という肝心なところを書き忘れてました。。。
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:230035ぴゅあ
2006/10/23(月) 02:18:540036デフォルトの名無しさん
2006/10/23(月) 02:29:49長々とまじでありがとうございました。
コレクション使ったことなかったけど、だいぶ使い方がわかりましたっっ
ここの板IDでないのが(´・ω・`)
0037デフォルトの名無しさん
2006/10/23(月) 02:46:14List<? extends List<Integer>>
くらいに汁
0038デフォルトの名無しさん
2006/10/23(月) 07:59:52レベルの高い人と全然駄目な人が混在してますね。
>>28-29、37さんはもう少し勉強したほうがいいですよ。
0039デフォルトの名無しさん
2006/10/23(月) 13:03:07ぴゅあ乙
0040デフォルトの名無しさん
2006/10/23(月) 13:30:480041デフォルトの名無しさん
2006/10/23(月) 16:48:46ユーザー 'admin' によってロックされているので、更新できませんでした。
っていうエラーがでるんだけど、どういうエラー?
0042デフォルトの名無しさん
2006/10/23(月) 16:54:090043デフォルトの名無しさん
2006/10/23(月) 18:43:200044デフォルトの名無しさん
2006/10/23(月) 19:03:450045デフォルトの名無しさん
2006/10/23(月) 19:08:000046ぴゅあ
2006/10/23(月) 19:19:46Math.min,max
こっちで質問してもらっても良いですよ
【100%】Javaの質問・相談にぴゅあが答える【PURE】
http://pc8.2ch.net/test/read.cgi/tech/1161423563/l50
0047デフォルトの名無しさん
2006/10/23(月) 19:30:380048デフォルトの名無しさん
2006/10/23(月) 19:33:420049デフォルトの名無しさん
2006/10/23(月) 19:55:27Vectorでクラスの配列をリストで管理するように
整数の配列をリストで管理するようなクラスってありませんか??
0050デフォルトの名無しさん
2006/10/23(月) 20:20:38jakarta commons primitives
0051デフォルトの名無しさん
2006/10/23(月) 20:28:50どこかに参考となるようなサンプルソースコードが掲載されたサイトはありませんか?
0052ぴゅあ
2006/10/23(月) 20:55:52(その後、どうだったかとかがないし・・・)
>>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もしかしてファイルのアップロードとか?
"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:560056デフォルトの名無しさん
2006/10/23(月) 21:39:11どうしてもドットコムから送られてきたコノメールが良い様にとらえる事が出来なくて。違う観点があるのでしたら聞かせてもらえますか
0057デフォルトの名無しさん
2006/10/23(月) 23:56:43Javaアプリケーションでファイルコンバータを作ろうと思っています。
Java1.4.2_12
そこでファイルダイアログを開く為にFileDialogクラスを使ってみましたが
・拡張子が選択できない。(”すべてのファイル”しかない。)
・初期参照フォルダパスが設定できない。
FileDialogで上記の設定ができるでしょうか?
もしくは別なファイルダイアログクラスはありますでしょうか?
よろしくお願いします。
0058デフォルトの名無しさん
2006/10/24(火) 00:46:12ArrayList<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:31java.awt.FileDialog だったら
> 拡張子が選択できない。
setFilenameFilter 使う。
ただし、Sun のJDK使ってるなら、Windowsでは機能しないらしい。
> 初期参照フォルダパスが設定できない。
setDirectory 使う。
Swing だと JFileChooser かな。
0060デフォルトの名無しさん
2006/10/24(火) 01:14:11FileFilter 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, "ファイルを開く");
006230
2006/10/24(火) 02:41:45まさかこんなに丁寧に答えてくださるとは思ってもみませんでした
ありがとうございます
がんばってみますね
もしその方法を試されて成功された場合はまた教えてください
0063ぴゅあ
2006/10/24(火) 13:55:35ドンピシャです!参考になりそうなソースが出てきました。ありがとうございます!
0064デフォルトの名無しさん
2006/10/24(火) 13:57:11出た方が便利なのに。
0066デフォルトの名無しさん
2006/10/24(火) 15:51:240067デフォルトの名無しさん
2006/10/24(火) 16:54:05public 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
006867
2006/10/24(火) 16:58:57g_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半透明を指定するアルファ値を不透明に固定で良いなら
final int alpha = 0xFF;
int argb = (alpha << 24) | (red << 16) | (green << 8) | blue;
必要があるなら & 0xFF とかでマスクする。
007067
2006/10/24(火) 17:11:38上記の方法で解決しました!
2chでこんなやさしくされたの初めてだ(´ー`)
0071デフォルトの名無しさん
2006/10/24(火) 17:17:31以下のようなソースだと、あらかじめパレットを用意しておく必要がでてきてしまいます。
パレットを自動的に最適化してくれるような方法はないでしょうか?
//パレット
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:46GUIアプリケーションを作成した後, アイコンをダブルクリックして実行するようには出来ないんですか?
0073ぴゅあ
2006/10/24(火) 20:44:19そんな仕様もないのは放っときゃあいいと思うけど
肝心の質問の方は解決できましたか?
0074ぴゅあ
2006/10/24(火) 21:01:40http://pc8.2ch.net/test/read.cgi/tech/1159700963/702
以降と似た話だと思いますよ
>アイコンをダブルクリックして実行する
ということだけを求めるのなら
バッチファイルにしたのでもいいんじゃないかと思うんですけど
0075デフォルトの名無しさん
2006/10/24(火) 21:18:59exewrap や JSmooth でぐぐる
0076デフォルトの名無しさん
2006/10/24(火) 21:47:27ありがとうございます.
また質問ですが, jarコマンドでマニフェストファイルを一緒に格納したのですが,
圧縮後のアーカイブファイルの中のマニフェストファイルのMain-Class: xxxの行が消えてしまうのです.
何故でしょうか?
007776
2006/10/24(火) 21:58:53007876
2006/10/24(火) 22:28:37別PCで試してみたところ, "JavaVMを作成できませんでした"というコメントが出てきたのですが, これは何が問題なのでしょうか?
0079デフォルトの名無しさん
2006/10/24(火) 23:06:010080デフォルトの名無しさん
2006/10/25(水) 10:55:01JREが複数インストールしてあって、レジストリと呼び出すjava.exeの整合性が取れてないとか?
0081デフォルトの名無しさん
2006/10/25(水) 16:02:24run.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(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入力の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ありがとうございます。オーバーヒートしかけてましたが、
悩みつつあった内容と同じでした。
もう少しゴテゴテと周辺で起こりそうなことを加えると
・(挙げていない点でしたが)Reader で渡している以上、Reader の読み込み時点で
文字化け等が起こって無いことは渡すものの責任
・Reader と言うことは内部的には Unicode で渡るのだから、明示的にエンコーディングを
指定した転送後の展開を意図するならば、「例えば」setEncoding しておけ。
と言っても、これを見るかどうかは受け取り側次第。
その結果文字化けが発生したらどうしようもない。強いて言えば決めてないことが悪い。
・ストリームであれば復元に関してこのような考慮は無いので、
一般的には Reader やシステム ID でなくストリームで渡す。
(ファイルへ書くだけならそのままであるし、その後にエンコーディングが必要な
パーズ処理などをもしやるのであれば、正しくコピーされたファイルの中身
から判別、といった道も自由)
つまり元々の回答には答えがないと言うか…
0085デフォルトの名無しさん
2006/10/25(水) 19:43:040086デフォルトの名無しさん
2006/10/25(水) 20:17:35実はその逆をやってくれるツールが欲しい。
探してるのですがそういうのをご存知なら加えて教えてもらいえないでしょうか?
0087ぴゅあ
2006/10/25(水) 21:24:48その手のには、java2cとかjava2c++とか(或いはその逆)
或いはj2cとか・・・
名前が付けられたりする傾向があったりするし
"Java C コンバート"とかでもググッてみるとか
色々組み合わせて探してみると
何か出てくるかも?というところですけど
0088デフォルトの名無しさん
2006/10/25(水) 21:46:580089デフォルトの名無しさん
2006/10/26(木) 00:35:35すれ違いならば何処のスレで聞けばいいですか?
0090デフォルトの名無しさん
2006/10/26(木) 10:52:43色々組み合わせて探してみると
何か出てくるかも?というところですけど
0091デフォルトの名無しさん
2006/10/26(木) 16:16:12Windowsごと落ちた。
1.4.2_12だと単にFileNotExceptionをスローするだけで、JVMもOSも無事だった。
JVMのバグ?
0092デフォルトの名無しさん
2006/10/26(木) 16:30:461.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:590096デフォルトの名無しさん
2006/10/26(木) 19:31:14携帯からスマソ
0097デフォルトの名無しさん
2006/10/26(木) 19:45:14色々組み合わせて探してみると
何か出てくるかも?というところですけど
0098デフォルトの名無しさん
2006/10/26(木) 21:19:210099デフォルトの名無しさん
2006/10/26(木) 21:22:150101デフォルトの名無しさん
2006/10/26(木) 21:42:241.4 とか 5.0 で deprecated になったメソッド使ってるとか、
1.4 で予約語に指定された assert、5.0 で予約語に指定された enum とかを
変数名、フィールド名、メソッド名に使ってなければ大丈夫だと思うけど。
■ このスレッドは過去ログ倉庫に格納されています