【初心者】Java質問・相談スレッド93【大歓迎】
1 :
デフォルトの名無しさん :
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 あたりで。
4 :
ぴゅあ :2006/10/22(日) 14:09:37
偽スレなんて思ってませんよ。わちき一人が我慢すればいいことなので……
6 :
デフォルトの名無しさん :2006/10/22(日) 18:10:37
for文を使って 2次元配列をつくるのにはどうしたらいいんですか?
>>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
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のデータ)
>>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を含めて操作するクラスを作って必要なメソッドを用意しておいてやるとか
それだったら 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) とか、そんな感じの方が良いか。
>>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を定義すればいいんでしょか?
>>15 言葉足らずでごめんね。
> Map<日付, Integer>と、日付に対してIntegerを割り当ててるのは、N個前を表現するためですか?
yes
> Mapを作る時点で日付の一番古いところに値0、それ以降は値++って感じ
そんな感じで。
18 :
ぴゅあ :2006/10/22(日) 20:31:05
>>15 >既にクラスがあるのではなく、
>データをどのようなクラス(or配列)にいれるのがベターかという話しです
取り敢えずやってみるとかなら兎も角も
行の全ての項目を持つかキーと値を別としたクラスを作っておくと
1つのオブジェクトとか考えられて楽かもね
後々も
キーで探したい仕組みというのと、行内の各項目とはまた別でしょ?
Mapが作れた後は、キーをどう扱うかだけ考えればいいことになると思うし
例えば
・キーとなる日付の行を基準に存在する行に対して±nとか
・日付に対して±nの日付をキーとして探すとか
作ったMapに対して操作するクラスがあればいいわけで
機能を増やしたければメソッドを作りこんでいけば
行が取り出せれば、行の単位としたオブジェクトから各項目を取り出したりすればいいわけだし
(それは行単位としたクラスにメソッドがあればいいでしょ)
>>13 で言ったのと同じことしか言ってないですけどね
>>17-18 どもどもー
とりあえず
>>17 みたいな感じで作っていき、
あとはメソッドを作り込んで対応してみようと思います。
まじ、参考になりまくりでした。ありがとうございまっす!
20 :
デフォルトの名無しさん :2006/10/22(日) 20:40:26
>>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ループの中をどうすればいいかとか 判ってきたりするんじゃないでしょうか
んーと、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を配列にしてるのがおかしいんでしょうか?
>>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で決めておく)にするかの違いでしょう
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
>>27 prontln
は負荷がおっき~のでバッファに保存して、
ボトルネックがprintlnかシリアルポートかき莉分けてみては。
>>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
うざーー
35 :
ぴゅあ :2006/10/23(月) 02:18:54
>>31-32 長々とまじでありがとうございました。
コレクション使ったことなかったけど、だいぶ使い方がわかりましたっっ
ここの板IDでないのが(´・ω・`)
きもいので List<? extends List<Integer>> くらいに汁
このスレは初めて来ましたけど
レベルの高い人と全然駄目な人が混在してますね。
>>28-29 、37さんはもう少し勉強したほうがいいですよ。
39 :
デフォルトの名無しさん :2006/10/23(月) 13:03:07
[Microsoft][ODBC Microsoft Access Driver] マシン '自分のマシン名' の ユーザー 'admin' によってロックされているので、更新できませんでした。 っていうエラーがでるんだけど、どういうエラー?
レコードロックかなんかだろ。 つーかjava関係ないし
43 :
デフォルトの名無しさん :2006/10/23(月) 18:43:20
最大値と最小値を求めるメソッドを教えてください
宿題はそれ用のスレがあるですよ。
45 :
デフォルトの名無しさん :2006/10/23(月) 19:08:00
宿題ほどでもないと思うんですが。。。
46 :
ぴゅあ :2006/10/23(月) 19:19:46
47 :
デフォルトの名無しさん :2006/10/23(月) 19:30:38
java.utilCollections.max&min
質問です。 Vectorでクラスの配列をリストで管理するように 整数の配列をリストで管理するようなクラスってありませんか??
>>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などの設定なども解りません。
メール設定なども最初からやらなければならないし。
サーバー会社ってみんなこんな感じなんでしょうか?
なにこのうざい語り口調で適当な事しか言わない変な固定
56 :
デフォルトの名無しさん :2006/10/23(月) 21:39:11
すみません意味解んないんですけど私の捉え方が間違っているんですかね? どうしてもドットコムから送られてきたコノメールが良い様にとらえる事が出来なくて。違う観点があるのでしたら聞かせてもらえますか
57 :
デフォルトの名無しさん :2006/10/23(月) 23:56:43
質問させて下さい。 Javaアプリケーションでファイルコンバータを作ろうと思っています。 Java1.4.2_12 そこでファイルダイアログを開く為にFileDialogクラスを使ってみましたが ・拡張子が選択できない。(”すべてのファイル”しかない。) ・初期参照フォルダパスが設定できない。 FileDialogで上記の設定ができるでしょうか? もしくは別なファイルダイアログクラスはありますでしょうか? よろしくお願いします。
>>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
>>57 java.awt.FileDialog だったら
> 拡張子が選択できない。
setFilenameFilter 使う。
ただし、Sun のJDK使ってるなら、Windowsでは機能しないらしい。
> 初期参照フォルダパスが設定できない。
setDirectory 使う。
Swing だと JFileChooser かな。
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, "ファイルを開く");
61 :
57 :2006/10/24(火) 01:49:22
>>59-60 回答ありがとうございます!
探し求めていたものはまさにこのようなクラスです。
本当に助かりました。
感謝です!!
62 :
30 :2006/10/24(火) 02:41:45
>>52 まさかこんなに丁寧に答えてくださるとは思ってもみませんでした
ありがとうございます
がんばってみますね
もしその方法を試されて成功された場合はまた教えてください
63 :
ぴゅあ :2006/10/24(火) 13:55:35
>>53 ドンピシャです!参考になりそうなソースが出てきました。ありがとうございます!
なんでマ板ってID出ないのかな。 出た方が便利なのに。
65 :
51 :2006/10/24(火) 14:09:17
>>63 は私じゃありません!誰かがぴゅあさんを陥れようとしているのです。。。
66 :
デフォルトの名無しさん :2006/10/24(火) 15:51:24
ぴゅあが出てからAA荒らしがなくなったのが全てを物語ってる
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
68 :
67 :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;
です
>>67 半透明を指定するアルファ値を不透明に固定で良いなら
final int alpha = 0xFF;
int argb = (alpha << 24) | (red << 16) | (green << 8) | blue;
必要があるなら & 0xFF とかでマスクする。
70 :
67 :2006/10/24(火) 17:11:38
ありがとうございます! 上記の方法で解決しました! 2chでこんなやさしくされたの初めてだ(´ー`)
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
>>72 exewrap や JSmooth でぐぐる
76 :
デフォルトの名無しさん :2006/10/24(火) 21:47:27
>>75 ありがとうございます.
また質問ですが, jarコマンドでマニフェストファイルを一緒に格納したのですが,
圧縮後のアーカイブファイルの中のマニフェストファイルのMain-Class: xxxの行が消えてしまうのです.
何故でしょうか?
77 :
76 :2006/10/24(火) 21:58:53
事故解決しました\(^o^)/
78 :
76 :2006/10/24(火) 22:28:37
度々すみません. 別PCで試してみたところ, "JavaVMを作成できませんでした"というコメントが出てきたのですが, これは何が問題なのでしょうか?
JREはインストールしてある?
>>78 JREが複数インストールしてあって、レジストリと呼び出すjava.exeの整合性が取れてないとか?
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です。よろしくお願いいたします。
(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 を理解してない?
>>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がどう作られるかの仮定が持てない場合は、「元
と同じエンコーディングにしたい」は不可能。
>>83 ありがとうございます。オーバーヒートしかけてましたが、
悩みつつあった内容と同じでした。
もう少しゴテゴテと周辺で起こりそうなことを加えると
・(挙げていない点でしたが)Reader で渡している以上、Reader の読み込み時点で
文字化け等が起こって無いことは渡すものの責任
・Reader と言うことは内部的には Unicode で渡るのだから、明示的にエンコーディングを
指定した転送後の展開を意図するならば、「例えば」setEncoding しておけ。
と言っても、これを見るかどうかは受け取り側次第。
その結果文字化けが発生したらどうしようもない。強いて言えば決めてないことが悪い。
・ストリームであれば復元に関してこのような考慮は無いので、
一般的には Reader やシステム ID でなくストリームで渡す。
(ファイルへ書くだけならそのままであるし、その後にエンコーディングが必要な
パーズ処理などをもしやるのであれば、正しくコピーされたファイルの中身
から判別、といった道も自由)
つまり元々の回答には答えがないと言うか…
C言語のソースをJavaのソースにコンバートしてくれるツールってないですか?
>>85 実はその逆をやってくれるツールが欲しい。
探してるのですがそういうのをご存知なら加えて教えてもらいえないでしょうか?
87 :
ぴゅあ :2006/10/25(水) 21:24:48
>>85 ,
>>86 その手のには、java2cとかjava2c++とか(或いはその逆)
或いはj2cとか・・・
名前が付けられたりする傾向があったりするし
"Java C コンバート"とかでもググッてみるとか
色々組み合わせて探してみると
何か出てくるかも?というところですけど
cのJVM向けのコンパイラでも用は足りるな
AspectJを学ぼうとしたら何処のサイトがいいでしょうか? すれ違いならば何処のスレで聞けばいいですか?
"AspectJ"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
Java 5.0 Update 8で、1と0が1600個並んだ文字列を指定してFileInputStreamを開いたら、 Windowsごと落ちた。 1.4.2_12だと単にFileNotExceptionをスローするだけで、JVMもOSも無事だった。 JVMのバグ?
>>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が複数のサーバ上にあり、それぞれのサーバに接続しデータを受信 することにより早くダウンロードしたいのです。
"同時ダウンロードのアルゴリズム"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
ここのスレの回答はググレばっかりだなw
iアプリをちまちま作りたいと思っているんですが、アプリ作成に最適なフリーソフトは何ですか? 携帯からスマソ
"iアプリ、最適なフリーソフト"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
98 :
デフォルトの名無しさん :2006/10/26(木) 21:19:21
JavaはあるバージョンのSDKで書かれたコードを別のバージョンのSDKに変えてもそのまま通ってくれるんですか?
バージョンによる
100 :
98 :2006/10/26(木) 21:29:54
>>99 そうなんですか、ややこしいですね…
v1.3で書かれたコードからv5.0では、どういう実情なのでしょうか?
>>100 1.4 とか 5.0 で deprecated になったメソッド使ってるとか、
1.4 で予約語に指定された assert、5.0 で予約語に指定された enum とかを
変数名、フィールド名、メソッド名に使ってなければ大丈夫だと思うけど。
enum予約語化のインパクトは絶大だった・・・
ではv1.4.1で書かれたコードからv5.0ではどうでしょうか?
105 :
98 :2006/10/26(木) 22:06:58
>>101 ドキュメント読んでみて、非推奨項目に引っかからなければ原則大丈夫ってことかな。
とりあえず5.0で試してみます。ありがとうございました。
1.4 → 5.0 のインパクトに比べれば、どんなこともインパクトに欠ける。
数字のインパクトか!?
108 :
ぴゅあ :2006/10/26(木) 22:50:08
>>105 取り敢えず見てみるというところでは
コンパイルしてみれば
ワーニングやエラー出してたり(出させられたり)してなかったかなぁ?
それに対してどうしようかってときに
リファレンス見ていったりしたのでもよいだろうと思うけど
setTimeoutでページをジャンプさせる時に履歴を残さないようにしたいのです。 location.replaceを使えばいいように思うのですが、どうしてもうまく出来ません。 よろしくお願いします。
"setTimeout ページをジャンプ"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
deprecatedなだけなら残ってるんじゃ 1.3未満の環境で作ったGUI周りは動きがおかしくなる事が間々あるな
package 宣言がないとコンパイル出来ない、等も。 いずれにせよ、対処はそれなりに簡単。
116 :
デフォルトの名無しさん :2006/10/27(金) 13:10:19
これってお金とかかかるんですかぁ~? タダなら始めようと思ってるんですけど
計算結果(誤り表示)部分をクリックするとすべてがクリアされるようにせよ クリアするメソッド?クラス?はなんですか?
118 :
デフォルトの名無しさん :2006/10/27(金) 14:08:39
"計算結果(誤り表示)部分をクリックするとすべてがクリアされるようにせよ クリアするメソッド?クラス?はなんですか?"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
>>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すると切り替えにかなりの時間がかかってしまい出来れば避けたいのでいい 方法はないでしょうか?宜しくお願いします。
122 :
デフォルトの名無しさん :2006/10/27(金) 17:40:11
120へ。 そんなにゆれる? ソースは?
>>119 なんで「デフォルトの名無しさん」が、ぴゅあ様だってわかったんだろ?
>>120 CardLayout直下のJPanel 半分ぐらい削って、がくがく震えるかってのを
JPanel の数が無くなるまで繰り返してみる、とかして原因特定できないか?
125 :
デフォルトの名無しさん :2006/10/27(金) 18:54:01
>>123 あれだけAA荒らしで荒れてたスレがぴゅあが来てから不自然に静かになったことから察しろ
普通にとんでもない量のリソースを食うんじゃなかろうか。
127 :
デフォルトの名無しさん :2006/10/27(金) 19:08:09
>121 ㌧クスです。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 そうですよね・・・
ところで震えるのは、フレーム(アプリの一番外側)なんでしょうか?
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
何のライセンス違反?
134 :
デフォルトの名無しさん :2006/10/27(金) 22:22:47
まず、ライセンス読んでみた?
136 :
デフォルトの名無しさん :2006/10/27(金) 22:26:58
英語なので挫折しました・・・orz
>>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を使ってるのが良くないのか、よく分かりません。 エスパーで指示して貰えませんか?
staticやめればちゃんと表示される
140 :
ぴゅあ :2006/10/27(金) 23:00:28
>>138 >エスパーで
というのがどんなものか教えて貰えませんか?
エスパーで指示とか解らんので、取り敢えず
>public static int member;
クラス変数(クラスフィールド)について理解してみるのがいいでしょう
141 :
132 :2006/10/27(金) 23:02:31
ライセンスについてはもう一度調べてみることにします ところで、バグの方はどうでしょうか?
142 :
138 :2006/10/27(金) 23:03:29
>>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をパッケージに含んでいて、
は、まぁこの場合余計なものだったりするだろうけど
・期待している結果
・期待通りではなかった実行結果
・それを分析できる材料(ソースコード…分析するに十分な)
145 :
138 :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をインスタンス化して入れてるところがなかったね
148 :
138 :2006/10/27(金) 23:34:02
>>147 いろいろありがと。
時間とらせてスマンかった。
149 :
ぴゅあ :2006/10/27(金) 23:55:12
>>132 ライセンスは問題なし。ASLに従って
「このプロダクトにはApache Software Foundationの製品が含まれています」の
一文が製品情報に含まれていればOK。
バグはある。というか無いわけがない。
Apacheのjiraを見れ。
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 はそれ独自のファイル内に定義されなければなりません。”とでてました。 どういう意味なのかさえ検討つかないのです。教えてください。
>>151 Awt01 って名前のトップレベルな public クラスは
Awt01.java の中で宣言されないといけない。
大文字小文字も区別されるので注意。
154 :
127 :2006/10/28(土) 15:11:38
>131 遅れてごめんなさい。 レスありがとうございました。 ピュアさんどうもありがとうございます。 一応レイアウトマネージャーは今まであるものが不便だったので一応自作しました。 JPanelを継承しているクラスで使っているこのレイアウトマネージャーに原因があるのかも しれないのでもう一度見直します。かなり単体テストをしまくったのですが一応もう一度慎重に 調べてみます。後使い方も調べてみます。あとはNortonを外したりいろいろやって見ます。 >137 ありがとうございます。 そうですね・・・みんなこれはやっていることなので参考にしながらやってみたのですが・・・ 他の皆さんもありがとうございました。 ここでレスしてくださった方法と自分が知る限りの方法で原因を探り 後2週間程度で仕上げに入ってテストに入りたいと思います。 いろいろ参考になりました。本当にありがとうございました。
155 :
デフォルトの名無しさん :2006/10/28(土) 15:31:20
>>151 全角スペースとか、全角アルファベットとか入ってないかチェク
publicを消していい訳は無い
>>151 ファイル名とクラス名が一致していないとダメ。大文字小文字も一致させてね。
ファイル名は Awt01.java になってる?
すごい初心者的な質問です。 int[] a = new int [128]; のaなのですが、一体何クラスなのでしょうか。 .length で配列の長さが取れるのが不思議でなりません。 Arrayクラスというのを見てみましたが、それではないようです。 それになんで .length() ではなく .length で長さが取れるように設計されているのでしょうか。 くだらない質問ですが、どなたか解説していただけませんでしょうか。お願いします。
こんにちは。ぜひ相談させて下さい。 サーバサイドJavaの話なのですが、特に制限されてなかったので・・・。 Mayaaを使用したことある方、ぜひお願いします。 mayaaファイル内の変数の条件によって、Strutsのtaglibを用いて作成したhtml要素に、 属性を付加することはできますか? htmlテンプレートに <input id="xxx" type="text"> があったとして、mayaaファイル内で、 <html:text m:id="xxx" name="..." property="..."/> (例 とすれば、テキストボックスが作成されますが・・・。 しかし、これに属性を追加する方法がわかりません。 <m:echo> と <m:attribute>を使うことも考えましたが、 これはテンプレート上のタグをそのまま出力するためのものですよね。 識者の方、ご解答よろしくお願いします。
>>157 int[] クラスです。.length は隠しフィールドです。
配列は言語仕様上特別扱いされているので
API リファレンスを見るより言語仕様書を見た方がいいでしょう。
インターフェースと抽象クラスの使い道がよくわかりません。 メソッドの内容がかかれてないのに、なんの役に立つのと初心者の私にはおもうのですが。 多重継承できないJAVAには必要とかかれてましたが、なおさらパニクってます。
>>158 "サーバサイドJava Mayaa"とかでもググッてみるとか
色々組み合わせて探してみると
何か出てくるかも?というところですけど
>>158 ググりましたし、メーリングリストも全てチェックしたのですが、、、
多少ヒントになる話題はあっても(条件分岐を伴うm:attributeによる属性追加 等)、
『属性追加の対象がtaglibによるものである』
といった、ポイントに触れるものはありませんでした・・・。
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"という文字を送っても 処理の部分が実行されません。 何故でしょうか?
>>163 isいらんやん
printlnで表示されたからといってequalsじゃないだろ
buff 1024バイトあるんだろ?Stringの後ろはどうなってるかチェックしてみ。
ServerSocketクラスの勉強をしているんですが、 ServerSocket s = new ServerSocket(1333); このようにポートを開放?してもセキュリティ的に大丈夫なんでしょうか? よくわからないんですがなんとなく心配です。
>>165 なるほど。buffの使ってない部分が影響してるということですか
では、この方法で文字列を比較することはできないんでしょうか?
文字列の最後に\0を付加することでできたりするんですかね?
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
>>167 if(st.indexOf("TEST")!=-1)
>>160 「ポリモフィズム」とか「多態性」とかでググってみると良いかも。
DIコンテナのサンプルコード読むのもお勧め。
ここで抽象的な話しても、多分理解してもらうのは難しい。
実用アプリやフレームワーク設計とか始めると
分かってくる(=実感する)と思う。
>多重継承できないJAVAには必要とかかれてました
破り捨てた方が良い。
>>167 String のコンストラクタに、
バイト数指定できるやつがあるから
それを使ってみたらどうでしょう。
st = new String(buff, 0, n);
String st="か"; byte[] byt=st.getBytes(); System.out.println(byt); System.out.println(st.getBytes()); 出力結果 [B@145d068 [B@758fc9 このコードではなぜか異なる結果が出てしまいます。 Stringの方の出力結果が、bytの出力と同じ結果を返すようにするにはどうすればよいでしょうか? どうかよろしくお願いします。
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.配列"辺りを読んでみるといいんじゃないでしょうか
10日で覚えるJAVAの本を買ったのですが、理解できないところあるので、ご示唆ください。 public~略 public static~略 String myStr = new String("サンプル”) System.out.println(myStr); 以下略 実行結果はサンプルを表示するのはわかるのですが、 Stringは文字列を扱うということは分かるのですが、 myStrと newStringの意味がわかりません。 myとnewの使い方の意味をおしえてください。
JAVAアプレットにBMP形式の画像ファイルの読み込み, 表示をさせたいのですが、表示させることができません。 どうすればよろしいのでしょうか?
>>180 変数の概念をわかっていないようです
これはわかる?
int myInt = 0;
数字型を扱うmyIntという変数に0を入れる
上と同じこと
String myStr = new String("サンプル");
文字列を扱う変数myStrに サンプル という文字列を入れる
myは命令ではなく変数名として名づけただけ、無くてもいい
あらま、釣りでしたか
185 :
ぴゅあ :2006/10/28(土) 19:20:52
>>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
189 :
ぴゅあ :2006/10/28(土) 20:43:51
>>158 >識者の方
ではないですが、Mayaaって
http://mayaa.seasar.org のこと?
MayaaとStrutsの共存とか
なんかぶつかったりするものとか、
適用/機能する順番とかあったりするんだろうか?
とも思ってしまいましたけど
サンプルページに"Mayaa単独版"とか"Struts利用版"とか出てるみたいなので
もしまだ見てないのだとすれば参考にできるものもあったりするのかも?
その 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
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の内容を表示する方法ないですか?
195 :
194 :2006/10/28(土) 21:40:45
ごめん、hogeとchokoガ表示されると思いましたが、 の間違いです。
"hoge hage"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
>>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 ques1 と ques2 がローカル変数なら、リフレクション使っても無駄。
201 :
158 :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文との使い分けとかの話も出てくるんじゃないかと思います
× Stringbuffer ○ StringBuffer
204 :
ぴゅあ :2006/10/28(土) 22:05:11
>>197 ques というのはあまりにも・・・(配列オブジェクトとか?)
と思ったのでザックリ読んでみたのですけど
StringBuffer型の"配列型のオブジェクト"という扱いであって、
明示的なクラスというのはなさそうに思えたりします
lengthはフィールドということになっています
が、配列は言語要素の深く関わる実装で、
ArrayクラスのようなAPIリファレンスに現れるのとは違って
表に見えない形のクラスとして存在しているんじゃないかと思います
(無理矢理当て嵌めるならObjectクラスから継承された無名クラスのようなもの?)
なのでArrayクラスとかでもないし、APIリファレンスにも出てこない
言語仕様の"10.配列"辺りを読んでみるといいんじゃないでしょうか
ぴゅあ様、配列すら理解してないのか……
そういや
>>194 も、ぴゅあ様も Stringbuffer って書いてるな……
207 :
ぴゅあ :2006/10/28(土) 22:16:35
>>206 そんな仕様もないのは放っときゃあいいと思うけど
肝心の質問の方は解決できましたか?
208 :
158 :2006/10/28(土) 22:22:16
>>208 ぴゅあ様の ご参考になってくれれば良いね。
エレベータっぽいアプリを作ってみようと思っています。 今ボタンを押されたときの処理を作っているのですが、 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"とかでググってみれば色々出てくると思うけど
あ、ちなみにmainメソッドは別のクラスにあります。 テストさせるために移しました。
>>211 そうです。もうちょっと調べてきます。悔しい
214 :
ぴゅあ :2006/10/29(日) 03:35:37
215 :
ぴゅあ :2006/10/29(日) 03:37:17
>>210 ,
>>212 そのコードでIOExceptionが出ているのですか?
例外発生時のスタックトレースを提示して欲しいですね
(発生箇所によっては入力待ちまで進んでいてどういう入力をしたかとか)
>>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
ちょっと考え直しますね
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になります。 どう書けば良いでしょうか?
"レコード数 2000万件近く"とかでもググッてみるとか 色々組み合わせて探してみると 何か出てくるかも?というところですけど
>>217 ありがとうございます。コンパイラが古いのかなぁ。
一応サンマイクロのHPで一週間以内にDLしたやつです。
IOExceptionについてまた今から調べてきます。
ありがとうございました。
222 :
ぴゅあ :2006/10/29(日) 03:55:50
>>221 いまググってるのでもうすこし待ってくださいね
223 :
デフォルトの名無しさん :2006/10/29(日) 03:58:47
プログラミング歴一ヶ月未満で、Javaの勉強は始めて2週間なのですが ボウリングのスコアカウントプログラムを作りたいのですが どう作ったらいいかさっぱりわからず困ってます・・・。 ご指導していただけるとありがたいのですが、お願いします。
224 :
221 :2006/10/29(日) 04:01:47
>>222 親切にどうもありがとうございます。
プログラミング暦一週間なのであまり詳しいことはわからないのですが、
普通はこのコードならすんなり通るのですか?
通らないからエラーがでてると言われればそれまでですが・・・
>>223 "プログラミング歴 一ヶ月未満"とかでもググッてみるとか
色々組み合わせて探してみると
何か出てくるかも?というところですけど
226 :
ぴゅあ :2006/10/29(日) 04:09:56
あのうググッてみるとかググッてるとかどういう意味なんでしょう。
228 :
223 :2006/10/29(日) 04:11:17
色々ググッては見たのですが、なかなか見付からなくて…。
229 :
221 :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
232 :
ぴゅあ :2006/10/29(日) 04:31:06
>>224 (=
>>210 ?)
例外について理解してみれば言い訳ですけど、
1週間ですか。。。
その間にどれくらい飲み込めたかによりますけど
すんなり行くものではないと思ってよいと思います
例外処理について勉強してみて
まずは例外周りの書き方からだけでも少しずつ理解してみてください
233 :
ぴゅあ :2006/10/29(日) 04:32:58
て・・・解決できそうなまで行けたのか
234 :
221 :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);
・・・・・・・・・・
上の処理ではコンパイルが通り実行できてました。
>>232 そうですね・・・早く自分で何かを作ってみたいという気持ちばかりが前に行っていたので
ちょっと本やらなにやらを読み直したほうがよさそうですね・・・
210と234をみくらべて見ることも重要と思いさっきから眺めております。
>>233 正直catch&tryやthrowsの存在はしっていましたが、まだ自分には
何かが抜けているみたいなので解決するには至らないと思います。
出直したほうがよさそうですね。
みなさん、夜遅くまでご迷惑をかけました。ありがとうございました!!
236 :
ぴゅあ :2006/10/29(日) 04:43:43
>>223 色んなサンプルコードを実際にコンパイルして動かしてみたり
コードを理解し、色々手を加えて行けるようになるまで繰り返す
(当然、簡単なサンプルから)
どう作ればいいかというのをイメージできるようになるまで
そうして作り方というものを学んで行くしかないかなぁ
作りたいものに似てそうなものがあれば
流用するとかもあるだろうけど、
その判断もまだ難しいでしょ?
>>234 「クラスなので」という説明がよく分かりません。
238 :
223 :2006/10/29(日) 04:54:48
一応、例外・入出力処理までは勉強して、クラスや継承、インターフェース までは理解できたのですが、スコアカウントの計算というか、処理がイメージ できないんです。 似たものを参考にしたりするのも勉強になるとは聞いたのですが 似たもの自体が見つけられなくて…。
>>238 まずは処理の流れを
紙に書いてみる
数字付き箇条書きで
そこからだ。
なかなかコンパイルが通らなくてずっと悩んでさっきも試したのに うまくいかなくて・・・でも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(); }}
>>240 根本的な原因は
>>240 がException処理について勉強していないこと
まずはeclipseのエラーの意味が分かる程度には勉強しようや
>177 ピュアさんレスありがとうございます。 Nortonを疑ったのはまず他のアプリでも私のプログラムほどの頻度ではないが そういう現象が現れたときがあったからです。例えばJBuilder やIE等。JBuilderが何で Javaで純粋に書かれているのかC++で書かれているのか良く分かりませんがNorton をインストールした後でこういう現象が起きたので疑ってみました。Javaのプログラムの実行に 少し干渉する可能性も外せないと思ったわけです。まぁインストールするまでに 出来上がっていたものは僅かだったのでなんとも言えないのですが・・・ とりあえず原因を徹底的に洗って見ます。いろいろありがとうございました。
243 :
デフォルトの名無しさん :2006/10/29(日) 08:08:38
本当に初歩的な質問で申し訳ありません。 デフォルトでボタンに使われている色を抽出するにはどうしたらよいでしょうか? ただこれはインスタンスを作って button.getColor();等の方法で以外のものを教えてください。
244 :
243 :2006/10/29(日) 09:27:01
>243 訂正です ただこれはインスタンスを作って button.getColor();等の以外の方法を教えてください。 Systemではないけど取れたような記憶があるのですがググッても見つからないので 宜しくお願いします。
245 :
デフォルトの名無しさん :2006/10/29(日) 10:49:48
ヤフれカス
とりあえず何のbuttonでしょう・・・・
>>210 Java の例外はチェックする例外(checked exception)と
チェックしない例外(unchecked exception)の2種類がある。
って話をどこかで聞いた?聞いてないなら勉強不足。
C# や C++ の例外処理とは似てるようでかなり違う。
IOException はチェックする例外。
248 :
ぴゅあ :2006/10/29(日) 12:24:47
>>247 RuntimeExceptionとその他の事ですか?
しらない人はきちんと調べてからカキコしてくださいね。
これ偽者の方か? 実際には Exception 以外にも Error があるから この説明じゃ不足してるのは確かだな。
250 :
デフォルトの名無しさん :2006/10/29(日) 13:37:31
Javaのジェネリクスって多重継承と何が違うの?
251 :
ぴゅあ :2006/10/29(日) 13:43:53
>>249 >>248 の
>RuntimeExceptionとその他の事ですか?
とか、何を言おうとしているのか解らんですけど
>>247 に対して"Errorがあるから"ということなら
検査/非検査について言おうとしているでしょうから
いいんじゃないかと
(ただ強いて言うなら
>>210 とは繋がりないような・・・)
>>250 "Java 何が違うの?"とかでもググッてみるとか
色々組み合わせて探してみると
何か出てくるかも?というところですけど
254 :
デフォルトの名無しさん :2006/10/29(日) 13:49:10
255 :
ぴゅあ :2006/10/29(日) 14:04:27
ぴゅあ様、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++のテンプレートみたいなのだったらいいのにねぇ。
261 :
ぴゅあ :2006/10/29(日) 15:40:30
>>259 ないよりはいいだろうと思いますよ
("C++のテンプレートより優れている"とか言ってたりするみたいなところとか
具体的なところまでは知りえてないですけど)
型保証で言えば、例えばList<Integer>とすればInteger(或いはIntegerを継承したクラス)しか
受け入れてくれなくなるし
厳密に区別したきゃ自前でクラスやインターフェイスを作ればいいし
(
>>10 からの話の流れでもちょっと気になったりしてたけど)
ListとしたらIntegerでもStringでも受け入れてしまうから(List<Object>と同様)
使ってやれば最低限でもアホなミスは防げたりするのだろうし
262 :
158 :2006/10/29(日) 15:41:19
streamを使ってファイルから文字列を読み込んでいるのですが a.txtとb.txtの2種類のファイルを読み込む場合 streamのオブジェクトを2つ使うのと、1つを使いまわすのでは何か違いがありますか?
JavaのジェネリクスとC++のテンプレートなら比較議論が出来る。 でも多重継承とじゃ無理。
実際にどういう処理を行っているか知りたいから、流れ図書いてきてと言われたんだけど 流れ図ってどこまで詳しく書いたらいいんだろう?
欲望のおもむくままに
269 :
デフォルトの名無しさん :2006/10/29(日) 18:40:38
>243-244 恐らくシステムカラーで使っているやつでよいのでしょうか? でしたら、UIManagerクラスのgetColorを使ってみてください。 そしてそこに入るキーはSystemColorクラスで定義されているキーです。 恐らくボタンであれば、getColorで使えるキーは"activeCaption"でいいかと思います。 後はDocを見るかまたは、ソースが見れる状態であればソースをみればいいかと思います。
beansでセッションを扱うクラスを実装することはできないのでしょうか? 値と値の名前を引数として、セッションにその引数を格納するモジュールをbeansとして作っているのですが そのモジュールをservletにて呼び出して使用すると、servletがどうしてもコンパイルを通ってくれません
質問です。 パネルAの中にパネルBを配置し、パネルB内にボタンを配置しています。 そしてパネルAにはキーリスナー、ボタンにはアクションリスナーを登録しています。 その状態でパネルBのボタンを押すと、パネルAのキーイベントが発生しなくなるという問題が発生します。 その後またパネルをクリックすればキーイベントを受け付けるのですが、常にパネルAにキーイベントを発生させる方法はありませんか?
ボタンBをクリックした時点でそのボタンにフォーカスが移ってるから、Aにキーイベントは発生しない。 AB両パネルの親なり、上の階層でキーイベントを受ける。
>>272 ありがとうございます。
ボタンが押された後に強制的にAにフォーカスを合わせる方法ってありませんか?
setFocusableメソッドがそれかと思って使ってみたのですが、違うらしくうまくいきません。
>>274 無事に解決しました!
ありがとうございました!!
javaを使って「リンク」または「リンクとその説明」をランダムに表示させるようにしたいのですが、 分かりやすく説明してあるおすすめのサイトはないでしょうか? よろしくお願い致します。
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に適用できませんっとでました これを解消するためにはどのうような感じで書き換えればいいですか?
>>279 コンパイルエラー消したいだけなら
> a=((coms[0]+coms[1])*coms[2])/2;
a=((Integer.parseInt(coms[0])+Integer.parseInt(coms[1]))*Integer.parseInt(coms[2]))/2;
281 :
279 :2006/10/30(月) 18:03:57
>>280 お早い回答ありがとうございます
Integer.parseIntについては自分で調べてみます
ありがとうございました。これで最期の問題が解けました
282 :
デフォルトの名無しさん :2006/10/30(月) 18:34:33
死んじゃうのか
いい人でした…
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 どんなことをなのか判らないですけど
たぶん工夫しなくても
ソケットとかを普通に使えばできるんじゃないだろうかと・・・
286 :
279 :2006/10/30(月) 23:08:05
>>284 今、がんばってる最中です
まだまだ勉強不足だという事がわかります( ´Д⊂ヽ
publicについてはそういう意識がありませんでした
これからはつけるようにします
>というのもなんか…なんて言うのか…思ってしまうけど
これについては意図がよくわかりません
向こう側からこういう指定があったので、こうしましたが
何か問題があるのでしょうか?
>>286 普通こんな書き方しないようなぁってのが散見されるけど
課題のためのコードなんで、多分気にしないでガリガリやればいいよ。
288 :
ぴゅあ :2006/10/30(月) 23:21:33
>>286 いえ・・・なんていうか
確か存在はしていたような気はしたりするんですけど(もう忘れてしまった)
負の長さで面積を求めるというのがなんとなく…
あったような気もしなくはないのですけど、
どうだったかな?と気になったというだけです
頑張ってください
"/2"に関する部分はそこから展開して行けば
答えも得られると思います
本当は実数を扱いたかったりするでしょうから
それにはどうすればいいかと考えていれば
尤も出題がそこまで求めてないものかも知れませんけど
それならってことでついでに考えてみようとか思っても損はないです
289 :
279 :2006/10/30(月) 23:24:30
>>288 何度もすいません
とにかくがんばってやってみます(`・ω・´)
宿題スレで聞いたらこちらで質問しる っと誘導されてきました 数値以外のものが入力されたら 「数値以外のものが入力されています」 というエラー文が出せるようにするにはどうすればいいですか? 自分自身で考えたりしましたが、全然検討がつきません
291 :
ぴゅあ :2006/10/31(火) 00:15:50
292 :
デフォルトの名無しさん :2006/10/31(火) 00:21:04
最近、EラーニングってWEBの教材使ってjavaを学んでいるのですが 解答とか晒されてるサイトとか在りませんかね? 全問正解しないと次ステップ進めない ググったけど見当たらなかった
javaスレで質問する前に、もう少し常識で考えてみるといい
294 :
290 :2006/10/31(火) 00:48:42
>>291 前スレの
>>635 を参考にすればいいってことですよね?
args.lengthっというのは
変数argsが参照している配列の要素の個数をint型の値として返すって事
ですよね?この値が1か0で判断しろって事なのでしょうか?
> 変数argsが参照している配列の要素の個数をint型の値として返すって事ですよね? ここから、 > この値が1か0で判断しろって事なのでしょうか? ここへ飛躍する思考が理解できん。
296 :
ぴゅあ :2006/10/31(火) 01:14:54
>ここへ飛躍する思考が理解できん。
同じく…
>>294 >
>>635 を参考にすればいいってことですよね?
そこの後半の話から少し展開しているので…
10個くらい先までくらいは見ておいた方がいいのかな
最近、正直思うのは・・・勘の悪いヤツにJava覚えられると俺が困るだけなんじゃないか・・・ということ・・・
いや、まぁ教えてもいいが・・・Java関係に就職はさせないで・・・・
>>292 しかたない教えてやるよ
つ
ttp://java.sun.com/ 答えは全てこの中だ
298 :
290 :2006/10/31(火) 01:46:53
お騒がせしてすいません 前スレを参考にして「try、catch」を参考書を使って 調べたらなんとか自分の思っているプログラムができました。 ただ自分がやった場合は args.lengthを使わなかったのですが これはやっぱり一般的なやり方ではなかったのでしょうか?
args.length を使う方法なんてないので安心してください。
>>298 沢山書いていけば分かる。体で感じてくれ。
>>298 「配列の長さを取得」と「入力が数値がどうか判断」になんの関連性もありません。
俺もできません。
もう少し基本的な事から考えて、順序だてて思考する事をオススメします。
マウスリスナーで左クリックか右クリックどちらを押されたか判定ってできませんか?? マウスのボタンの数がプラットフォームによって異なるためできないと聞いたのですが。
Javaのバイトコードを詳しく解説したお勧めの本ってありませんか?
>>305 Java仮想マシン仕様第二版
JAVA PRESS vol. 14 から連載してた「Java仮想マシン入門」
ぐらいか?
307 :
デフォルトの名無しさん :2006/10/31(火) 18:52:07
もともと一つのプロジェクトで test1.javaとtest2.javaを作っていて test2はtest1にあるクラスをオーバーロードしてたのですが、 別々のディレクトリで保存することになりました。 こういう場合実行できなくなりますよね? どうしたらよいのでしょうか。 現在実行環境にいないこともあって悩んでいます
>>307 packageの概念とimport文によって解決できると思う。
あとはclasspathに注意するくらいかな。
>>307 ㌧クスです。
環境に戻り次第やってみます
310 :
デフォルトの名無しさん :2006/10/31(火) 20:57:51
URLを与えて、取得したHTMLのhref属性のURLが相対なら絶対に置換えたいのですがどうすればできますか? DOMでhref属性を取得するところまではできました。
311 :
ぴゅあ :2006/10/31(火) 21:53:00
>>307 もしかするとそれはオーバーライド?
(>test2はtest1にあるクラスを…
というのも微妙に気になったりもしたりするけど。。。)
>別々のディレクトリで保存することになりました。
は、所謂パッケージが変わる(移動する)という意味なのかな?
或いはパッケージとかはなくて、単に複数のディレクトリに分かれるというだけなのか
例えば他の場所にライブラリとしてあるクラスとか継承できてますよね(APIとかも)
どっちにしても、移動に合わせて手を加えてやれば問題ない筈でしょう
(今、問題になりそうな例が浮かんで来ないから…だったりですけど。。。)
>現在実行環境にいないこともあって
実行環境と言われると運用環境とかテスト環境とか浮かんでしまうのですけど…
ちょこっとサンプルとか作って試してみる開発環境がないということ?
JFrameとかでコンポーネントのインスタンス変数をまとめたクラスをつくって、 それをもちまわる(他のクラスのコンストラクタの引数にする)っていうのは普通かな。 いろんなところから、コンポーネントに対して内容の更新などができるように。 スレッドなんか走らせるときは、必ずそのクラスをもたせてstartさせる。 こういうのってなんかデザインパターン的に名前ついてる?
グローバル変数を宣言してるのと大差なくなるよ。 それでも収拾がつくならご自由にどうぞ。
>>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());
}
}
316 :
270 :2006/11/01(水) 10:29:57
package beansの宣言を忘れてただけでした スルーされる訳だ(´・ω・`)
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++; } } }
>>318 クラス変数なら
import static aaaaa.i;
としておけば単純名 i でアクセスできるようになるけど、インスタンス変数は無理。
> 具体的には以下のようなプログラムを作りたいと思っています
コンパイルが通るソースコードさらしてくれ。
全て aaaaa 内に見えるので 「クラス、メソッドをまたいでも「xxxx.yyyy」とせず」ってのが分からんし。
321 :
317 :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
>>322 > int i = 1;
static int i = 1;
> public void bbbb() {
public static void bbbb(){
JAVAでパチスロみたいなソフトを作ろうと考えてるのですが まず何から勉強すればいいでしょうか? ちなみにスキルは0です
>>323 それ、リダイレクトかなんかでファイル入力させるんじゃない?
もしくは 0以上 255以下の数字を 100回入力。
>>325 小学生レベルの算数と、中学生レベルの英語。
>>326 数値打ち込む→リターン
の繰り返しじゃだめだったんですけど…;
>>328 EOF 入力してないんじゃないの
unix とかだと ctrl + d で、
Windows のコマンドプロンプトだと ctrl + z だっけか?
331 :
デフォルトの名無しさん :2006/11/01(水) 16:11:08
Socketクラスを用いて、第一引数で指定されたホストの第三引数で指定されたポートへ、第二引数の文字列を送信するエコークライアントプログラムを作成できる人いませんか?? できる人いたらお願いします!!
宿題だったら宿題スレへ。 そんな質問の仕方だと誰も答えてくれないだろうが。
しかし引数の順序にはいささか興味を覚えた。 ホスト名 ポート番号 メッセージ だよな、普通。 でも宿題スレ行けよ。
334 :
デフォルトの名無しさん :2006/11/01(水) 18:13:57
じゃばげんごってなんぎょうぐらいのプログラムソース掛けるようになれば ばしょしんしゃじゃなくなるの?
335 :
317 :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( )); } } --
質問です。 ArrayListで、新規に追加する要素が 既にリスト内にある場合は追加しない、というようなメソッドはありませんか? やはり毎回リスト内を全てチェックするしか方法はありませんかね。
>338 順序関係なしならSet使ったほうがいいんで無いかい。
340 :
ぴゅあ :2006/11/01(水) 21:55:50
>>338 >やはり毎回リスト内を全てチェックするしか方法はありませんかね。
の意味が「そんなコード自体を書きたくない」というようなことなら
APIリファレンスをもう一度よく見てみれば?
Listインターフェイスの説明には
# ユーザが重複する値を挿入しようとしたときに実行時の例外をスローすることにより、
# 重複する値を禁止するリストを実装する場合もありますが、
# このように使われることはほとんどありません。
とあったりするけど、"逆にやる"というのもありかもだけど
>>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 やはりプログラムは習うより慣れろなんですね。
大変参考になりました。
たくさんソースを書いて精進してみます。
>>336 慣れるにしても、自分でコード書くばっかりで先人の知恵にふれておかないと、
独りよがりなバッドノウハウの固まりになる危険性があるから注意だよ。
本でなくても、Java SEのAPIとか、有名なオープンソースソフトのソースとか、いろいろ見ておくと役に立つ。
347 :
デフォルトの名無しさん :2006/11/02(木) 00:42:14
>>345 二冊とも求めていたものに近いように思います。
明日本屋に行って手にとって眺めてみますね。
ありがとうございました。
もっとうまい方法あると思うけど、思いつかないからこれで我慢 なバッドノウハウは経験しといた方が良い。 この経験がないとエレガントな方法がなんでエレガントなのか実感できないから。
349 :
デフォルトの名無しさん :2006/11/02(木) 01:02:03
>>346 APIってソースも見られるんですか。
知りませんでした。
あとオープンソースで有名なものっていうと
たとえばどんなものがありますか?
>>346 その辺は両輪だと思うぞ。
コード書かないで本とかソースを読んでばかりでも頭でっかちになりがち。
マ板的な話題になりつつあるのは気のせいだよね。
>>349 インストールした先に src.zip ってないですかい?
352 :
デフォルトの名無しさん :2006/11/02(木) 01:39:57
>>351 確かにありました。
こんな厖大なものが入っていたんですね。
これは勉強になりそうです。
ライブラリはこれを分かりやすく解説してくれているわけですか。
353 :
ぴゅあ :2006/11/02(木) 07:43:26
>>352 javadocコマンドでソースにあるコメントとかを
抽出して作られたのがAPIリファレンス
悪い例も見とかないと何が良い例なのか判らないでしょうね
尤もそれは後の方がいいんだろうし、望むならだろうけど
所詮良いか悪いかは自分が判断することだし
xxx/65535のような65535分率のランダムを生成するにはどんなプログラム組めばいいんでしょうか? MathクラスのRandomメソッドを使うんだと思うのですがイマイチよくわからないので教えていただけないでしょうか?
356 :
デフォルトの名無しさん :2006/11/02(木) 10:47:08
nextInt
357 :
デフォルトの名無しさん :2006/11/02(木) 10:47:59
被った orz
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」は何が起きたのですか?
浮動小数点に誤差は付き物 doubleを使う時は気を付けよう あと、Math.PI と言う物もあるから
質問です。 JButtonまたはButtonで押されたという情報は拾ってこれるのですが ボタンが離されたという情報を拾ってくる方法ってありますか?
押されたという情報=マウスボタンが離されたとう情報 じゃまいか?
ボタンを押す(actionPerformed) = ボタン上でマウスボタンを押す(pressed) + 同一のボタン上で離す (released) だな。 (ソース見たわけじゃないが、動作としてはこうなる) ActionListener#actionPerformedの時点でボタンが離されていると思ってよい。 押しっぱなしとかの状態が知りたきゃ、ボタンに限定した概念ではない。 MouseListenerを見てみろ。
ServerSocket ss = new ServerSocket(****); これで****番目のポートを開けるみたいなんですが これって開けっ放しにしてもセキュリティ的に大丈夫なんですか?
>>363 セキュリティってなんだか分かって言ってる?
>>363 そのServerSocketで何かをするサーバプログラムの出来しだい。
たとえば、予期しないパケットが来たら例外で落ちるようだとDoS脆弱
性があると言える。
>>364 >>365 >予期しないパケットが来たら例外で落ちるようだとDoS脆弱性がある
予期しないパケットが北場合の例外は作ってませんが、作らないと危ないですか?
ちなみに
ServerSocket ss = new ServerSocket(****);
で空けて置いて
もう一個のプログラムで
soc = new Socket("localhost",****)
っていう風に繋げて文字列を送ったり、返したりさせてみようと思ったんですが
この程度ならセキュリティも何もないんですかね?
とんでもなく長い文字列が送られたらどうなるよ
>>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 が解説してくれたところまでもが)
最近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インスタンスしか作らないような仕組みになってるんですか?
>>371 Yes.
だだしnew String("aaa")すると新しくStringが生成される
373 :
371 :2006/11/02(木) 21:22:46
試してみたら確かにそうなりました。ありがとうございます。
374 :
ぴゅあ :2006/11/02(木) 21:39:52
>>373 でもまだ微妙かも?
"=="は文字列"aaa"を見てるんじゃないよ
というのとかをまず理解できた方がいいんじゃないかと思う
(
>>371 に対しては長くなったので割愛しました@色々やれば色々と判ってくると思うし)
iアプリでゲームを作っているのですが 質問なのですが、DoJa 4.0以降でAACもしくはPCMは再生できるのでしょうか。 ADPCMもDoJa 4.0世代での対応周波数が分からないので…。 よろしくお願いします。
376 :
ぴゅあ :2006/11/02(木) 22:04:48
>>373 あ いや…
Stringオブジェクトについて見ようとしていたのかも知れないし
"aaa"の方かな。。。
結局はStringと"=="の話に到達してそうな気もするけど…
>>371 必ずそうなる訳ではないので、内容比較はequals使いましょう
Integerとかも、場合によってはインスタンス使い回すし。
不変オブジェクトはそういうインスタンス使い回しがよくされる。
でも、それは実装依存だからね。
379 :
371 :2006/11/03(金) 04:57:09
参照型の変数はC/C++のポインタと同じようにとらえていたので、
内容比較にならないのはわかっていたんです。
"hoge".instanceMethod()という構文ができるということは
文字列リテラルを書いただけでインスタンスが作成されていて、
更に
>>371 の二回目の"aaa"では新たに作成せずに
自動的に一回目と同じインスタンスになっているんですよね。
そのあたりのJavaの挙動が不思議だったんです。
ところで
>>378 のような文脈での「実装」という言葉の定義がよくわからないのですが、
ソースから処理実行までの過程のどの部分のどういった差異の事を指すんですか?
>>371 C/C++でも静的文字列は使いまわされる実装が多い気がするが
Javaでは文字列リテラルはVMだかクラスローダだかで一意の
Stringオブジェクトになることが仕様で決まっている。
(たとえ複数のクラスにまたがって書いてあったとしても!)
なおJavaに限らず仕様で決まっていないことは *すべて* 実装依存だ。
>>379 >ところで
>>378 のような文脈での「実装」という言葉の定義がよくわからないのですが
VM とか java.lang.* みたいなVMに直結したライブラリの実装。
というより、言語規定で明確に決められていないって事かな?
>>371 に関して言えば、言語規定で決められてないって意味では
"aaa" == "aaa".substring(0) が true になった事ぐらいのような気もするけど。
383 :
デフォルトの名無しさん :2006/11/03(金) 13:40:29
Clonableインターフェイス、Cloneメソッドについて質問があるのですが、 これらはCopyメソッドと比べて何が違うのでしょうか? どちらもオブジェクトの情報を複製するのが目的だと思うのですが、 どのように使い分けるのでしょうか?
FileReader fr= new FileReader(args[0]); BufferedReader br= new BufferedReader(fr); FileReaderとBufferedReaderの違いがよくわからないのですが 具体的に何をどう読み込んでるか教えてくだしあ><
>>383 Copyメソッドって何だ?
それから、大文字小文字は区別しろ。
386 :
デフォルトの名無しさん :2006/11/03(金) 13:58:38
>>385 配列を複製する時に使用するのが、copyメソッドらしいのですが
配列以外では使えないのか、cloneメソッドでは複製出来ないのかな、と。
また、Clonableインターフェイスを絡めて他のクラスからの情報を複製する場合、
どのような感じでコードを書けば良いかが分かりません。
ご指摘ありがとうございます。今後、気をつけます。>大文字小文字は区別しろ。
>>386 配列でも clone() 使えるぞ。 それに配列に copy() なんてメソッド無いぞ。
java.lang.System#arraycopy(Object,int,Object,int,int) の事を言ってるのかもしれんが、
あれは複製じゃなくて内容を書き写すメソッドだからなぁ。
そういやCloneableの綴りはもう一生直らないのですか?
>>384 > FileReaderとBufferedReaderの違いがよくわからないのですが
BufferedReader は readLine() が使える。
FileReader は一文字読み込みの read() やらを連発すると、
実行速度が著しく低下する可能性がある。
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); }
>>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;
}
こんな感じで良いのでしょうか?
>>388 Bug ID: 1234712 Cloneable is misspelled を参照。
>>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 にも影響が及ぶ。
ディープコピーでは影響が及ばない代わりに、コピーのコストが高い。
>>393 public Object clone() メソッドを実装しろ。それだと Cloneable である意味が全然ない。
clone メソッドの中でコピーをする方法を書くんだ。
シャローコピーでいいなら super.clone() を呼ぶだけでよい。
397 :
ぴゅあ :2006/11/03(金) 19:21:29
>>391 "うまく"というのか、"選択"?だろうけど
1.まずその付近全体のコードを整える
2.コード全体を眺めメソッド等に抽出できるものはないか挙げてみる
>whereSql = whereSql + "joken1 = ?";
なんて"StringBuffer使えよ"とか言われてしまいそうなところから
全体を書き替えてみると何か気付くこともあるのかも知れないし
(その前の部分のコードもあるのだろうけど、
そっちはベタでそのまま文字列になってるのかもだけど)
使い捨てでもなく、ちゃんと管理できると思えるなら
StringBuilderならぬSqlBuilderみたいな形に
作ってみたりもできそうだけど
(その前にその手のものなら探せばありそうな気も…
質問部分には答えてくれないかもだけど)
>>390 読み込む中身はファイルの文章全体であることは同じなのですか?
>>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 の話を読み直してみるとか
ゲッターがない場合、privateな変数を外から取り出すのは絶対に無理なんでしょうか?
402 :
デフォルトの名無しさん :2006/11/04(土) 00:16:03
リフレクション使えばどうとでもなるよ Fieldそのものはprivateでも取り出せるから あとは無理矢理アクセス権を作ってしまえばいい。
>>402 ありがとうございます。リフレクションのこと調べてみます。
ゲッター書かないで保存してしまってすごく困ってました(´Д`;)ヾ
jLabelにsetIconを使ってgif画像を貼り付けています。 アプリケーションを起動したときにはきちんと表示されるのですが、 他のウィンドウが重なったり、最小化させたあとに もう一度そのウィンドウを開くと、 画像が表示されなくなってしまいます。 きちんと表示させるためには何が必要なのでしょうか? よろしくお願いします。
>>404 特に必要なことはないはずだけど。
ImageIconとかの既存のIconでなく自分で実装したIconで再描画に対応できない造りになっているとか。
状況を再現できる最小限のソースがあれば指摘できる人が増えると思う。
406 :
ぴゅあ :2006/11/04(土) 11:44:35
>>404 >他のウィンドウが重なったり、最小化させたあとに
>もう一度そのウィンドウを開くと、
>画像が表示されなくなってしまいます。
と言われると、
(Javaとか関係なく)再描画ができていない…paint/repaint周りとかを
オーバーライドして何かやってる?(何か必要なことを落としている)
とかが浮かぶのですけど・・・
>jLabelにsetIconを使ってgif画像を貼り付けています。
だけなら、
>>405 の言っているように特にないだろうと思うけど
>>404 >>405 レスありがとうございます。
jPanel -- jLabel1
-- jLabel2
という構造で、jLabel1に前述の画像表示、
jLabel2ではpaint周りをオーバーライドしています。
jLabel1の方にまでjLabel2のオーバーライドの影響が及ぶものなのでしょうか?
影響がなければ、javaでなくPC環境のせいなのかもしれないのですね。
>>407 > jLabel2ではpaint周りをオーバーライドしています。
これの所為だな。
409 :
ぴゅあ :2006/11/04(土) 14:12:31
>>407 >jLabel1の方にまでjLabel2のオーバーライドの影響が及ぶものなのでしょうか?
は、ないだろうと思ったりはしますけど
(jLabel1はJLabelそのものをそのまま使っているということだと解釈するけど)
JPanelとか、JPanelを乗せているものとか...(更に…)には
オーバーライドとかやっていることはないんでしょうか
>>405 も言っている再現される最低限のソースが用意できるなら
判りやすいでしょうね
(jLabel1とかjLabel2とか、なんか話に微妙なもの?がありそうな気もしたりするし…)
>>407 swingの場合は paintではなくpaintComponentをオーバーライドする。
public void paintComponent(Graphics g) {
super.paintComponent(g);
//paintする処理を記述
}
教材通りに書いたらエラーが出ました。教材のミスでしょうか?教材の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); } }
教材には小文字で"string"って書いてあるのか? だとしたら、教材のミスだ。
413 :
411 :2006/11/04(土) 17:13:09
>>412 すいません、Stringでした・・・
なぜ小文字だとエラーになるのですか・・・?
言語仕様で、大文字小文字を識別するから 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
417 :
411 :2006/11/04(土) 18:58:45
ファイルの読み込みについて、 下の例のように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
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ってやってました。
なんて、馬鹿なんだろう。
ありがとうございました。
424 :
418 :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ファイルを読み込んで正規表現かけて欲しい情報を一発で取得したいがために
そんなに大きなファイルとなることもないんでしょうけど
読み込みつつ・・・なんて処理ができるといいんだろうと思いますけど
ただ、一気に読み込んでおくよりはめんどくさそうだという気はしますけどね
一度作れてしまえばその仕組みを色々活用できそうですけど
javap
428 :
ぴゅあ :2006/11/04(土) 21:02:35
>>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()とかが呼ばれないようなものになっているとか
最大化することによって再描画される状態になるのでやっと表示されるという状態が
起きていたりするんじゃないだろうかと思えたりですけど
デフォルトアクセス(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 なアクセスレベルで あるべきと思うんですが。 みなさん、どのようにしていますか?
リスト→配列変換で下記のようなコードを書いたのですが 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の変換がうまくいかずエラーがでてしまいます。
toArray使ったらInteger配列だからプリミティブで欲しいってこと? あなた自身の書いたそのコードがベストプラクティスに見えるけど。
>>434 にあるforを使わずに
Object[] toArray(Object[] a) という関数を用いて
b=a.toArray(new Integer[a.size()]);
のように1行で書けるならそっちのほうがよりよいのかなと思ったのですが、
Integer[] → int[] へのキャストがわからずエラーがでてしまいます。
>>434 のようにforで書いた方がよさげですか?
そう書いたんだけど、何で繰り返し質問されるんだろう
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()内)
>>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
宿題はそれ用のスレがあるのでそこでやって下さい。
>>442 たぶん、それで良いと思う。
後は、Frame を extends しつつインターフェイスを実装できるのに対して
Frame を extends しつつ、アダプタクラスも extends はできないので
別のクラスを作ってるという点が若干違うとか、そんぐらい。
>>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つ書くのは異常に面倒だと思うのですが、なにかうまい書き方ないものでしょうか?
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){ 処理; }
>445 Array#getLong。ただし実行効率上不利になることが予測される。
>>446-447 なるほど、そうやって処理を一つにまとめればいいんですね
型変換による効率悪化 と 処理のコーディング楽さ どっちを取るかって感じですかね。
参考になりました、ありがとうございます。
すいません、こちらでJavaScriptの質問をして良いのでしょうか・・・
452 :
デフォルトの名無しさん :2006/11/05(日) 16:57:02
g.dispose(); をぐぐったら リソースを開放すると出たのですが 開放とはどういった意味なのでしょうか?
内部に保持してるネイティブなリソースだね。 中身見たわけじゃないから何ともいえないけど WindowsならHGCあたりを開放してんじゃないかな。
>>452 gというオブジェクトが使っていたメモリその他の計算機資源を、
他のオブジェクト等で再利用できるようにするという意味。
その代わりdisposeするとgは使えなくなる。
455 :
デフォルトの名無しさん :2006/11/05(日) 17:07:02
すいません、教えてください フルスクリーン表示して大きさ固定するにはどうすればいいでしょうか setExtendedState(MAXIMIZED_BOTH); setResizable(false); ってやるとフルスクリーン化は解けてしまうし、 getMaximizedBounds()やgetBounds()は何故か0が返されてしまいます
>>455 やりたいことはフルスクリーン化でなく最大化かな
setResizable(false);
setVisible(true);
setExtendedState(MAXIMIZED_BOTH);
の順序でやってみると?
要素の最大があらかじめ分かってる場合のHashMapの 初期値というのはどうするのが良いのでしょうか。 ArrayListなどと違って負荷係数とかあるので最適値というのが良く分かりません。
KeyListenerの切り替えってどうすればよいでしょうか? たとえば、状態AのときはAKeyListenerクラスを使って状態BのときはBKeyListenerクラスを使いたいんですが。 メインフレームでは addKeyListener(new AKeyListener()); addKeyListener(new BKeyListener()); とやってますが状況に応じてどっちを使うか切り替えたいです。
>>458 removeKeyListenerとaddKeyListenerで状況に応じて登録しなおすとか、
AKeyListenerとBKeyListenerの方で、それぞれ状態Aか状態Bのときにしか実際の処理をしないようにするとか。
>>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
>>457 最適化の肝は実測にあるので、
与えるデータや初期値や負荷係数などのパラメータを実際に変えながら、
最適ポイントを求めてみるとか。
465 :
ぴゅあ :2006/11/05(日) 23:01:42
>>462 >状態数が多くキー処理の数がものすごく多いのでなるべく分けておきたいなぁと。
いや別にリスナそのものは状態に応じた分岐までとかでもいいんじゃないでしょうか
(AKeyListener,BKeyListenerと分けたかったメソッドを用意して状態によってそれへの分岐だけとか)
その先は好きなだけ(機能もグループ分けしたりとかでメソッド分けするとか)どうにでもなるのでは?
そうすることでより見通しがよくなりそうに思えますけど
逆にadd/removeだと、状態が変わることとadd/removeのタイミングが保証できているかとか
疑問が出てきたりもするかも?
466 :
ぴゅあ :2006/11/05(日) 23:05:39
追記… なので、いずれにしても状態とリスナが呼び出されるタイミングに配慮する必要は あるだろうと思う (たぶん、ちゃんと考えてないと、"動きが怪しい"とか後で悩むことになりやすい部分だろうと思いますよ)
>>457 capacity の 80% くらいデータが埋まると capacity の拡張が起こったはず。
正確な値はソースをみないとわからないが。
なのでその拡張が起こる直前で収まるような inital capacity を与えれば最適になる。
ハッシュ値が重複するからきっちり容量取るのは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/ベル/スイカの入賞個数を 入力すると、それぞれの設定で起こり得る確率を表示させたいのですが、 これを、携帯で計算&表示させることは可能でしょうか? また、比較的簡単に出来るならば、ご指導宜しくお願いしたいです。
ResourceBundle rb = ResourceBundle.getBundle("io.Sample"); みたいな構文はnewを使ってインスタンスを生成してからじゃなくても 使えるようなのですが、どういう場合にnewを使ってコンストラクタを呼んで、 どんな場合はクラスのメソッドを直接呼べるんでしょうか?
staticがついているクラスメソッドの場合は インスタンス不要。
なるほどなるほど、標準ライブラリの中にもStaticのついたメソッドが色々とあって、 そういうのを使うときはリファレンスで確認して、メソッドの呼び出し方法を確認すれば OKって感じですかね
477 :
317 :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周りの話でないにしても)
それらしいものは得られたりしそうな気もしたり。。。
>>477 > com.ms.security.SecurityExceptionEx
それ、MSJVM 使ってるんじゃない?
MSJVMってポリシーファイル使えるんだっけか?
481 :
317 :2006/11/07(火) 18:58:50
>>479 各動作確認端末からのデータベース接続や
もっと根本的なApplet動作などを再確認してみます。
>>480 MS JVMを使っているっぽいです。
SunJavaを導入して動作確認してみます。
>>482 それ書き換えると、そのJVMで実行する全てに影響。
それがいやなら実行時に-Dオプションでポリシーファイルを指定
>>477 ポリシーファイルでcodebase指定したら
そのcodebaseのクラスに対してのパーミションが開く
Codebaseからファイルを持ってこずに、ローカルのライブラリを
使った場合は、同じクラスでも権限は与えられないから注意。
484 :
482 :2006/11/07(火) 22:04:46
>>483 なるほど。-Dで指定するのね。ありがと。
JavaでRSSリーダもどきを作っているんですが、少し詰まったので、質問させて下さい。 Web上からrdfファイルを入力し、それをXMLとして解釈してタイトルや内容を抽出、String型の変数に入れて それをprintで表示させたいっていう内容です。 タイトルに関しては問題なく表示されるのですが 内容のみ『~~文章の途中......』と点で省略されて最後まで表示されません。 Stringって文字数制限ありましたっけ? 具体的なソースプログラムを晒した方がいいですか? ご教示よろしくお願いします。
一応晒して。 あとDOMで保持するよりSAXで 他のオブジェクトに落としちまった方がいいよ。
>>485 文章の切れ方にルールは?
何文字目かで切れているかとか。
それと、まず、読み込み元が切れているというオチが無いかだけは確認して欲しい。
取得するノードが違っているということもあるかもしれんし。
>>485 そのRSSでは全文が配信されているのかい?
rdfファイルの時点でdescription要素の中身
が『~~文章の途中......』になってたりしない?
489 :
485 :2006/11/08(水) 00:46:11
凡ミスでした。 DOMでRSSを扱っていたのもありますが、大本の原因は 488氏の仰る通り、rdfファイルの元が......で切れてました。 確認怠ってた私の責任です。 即レスして下さった方々ごめんなさい。 元々のRSSが切れている場合、文章全ての表示って不可能ですか? Mixi等はRSSから文章全てをひっぱてこれたと思うのですが、どういうメカニズムなんでしょう……orz
いやDOM関係ない。DOMやSAX云々は処理効率の問題だろ。 > Mixi等はRSSから文章全てをひっぱてこれたと思うのですが、どういうメカニズムなんでしょう……orz 全文引っ張ってこれるRSSってだけだろ
>>489 RSSに記事のURLがあれば、そのURLのページを取得して、うまいことやれば。。。
って無理か。
mixiはHTMLを解析して抜き出してる
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); だとコンパイルエラーになったんだけど、下の書き方はどこが間違っていますか? ホームページでクラスの配列とかで検索するとよく下のような書き方がでてきます。
494 :
493 :2006/11/08(水) 03:36:27
すいません下のnew BallData[5]はnew BallData[2]です。
>>493 特に問題なく通ると思う。
エラー箇所を間違ってないか?
496 :
493 :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 個
25行目がおかしいと思うよ。
498 :
493 :2006/11/08(水) 05:30:52
25行目は BallData[] ball = new BallData[5]; という表記なんですがこの宣言の仕方は間違っていますか?
499 :
デフォルトの名無しさん :2006/11/08(水) 05:49:05
おはよう。
>>498 まちがってなさそうだけど。
>>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 になってるし。
タイプミスとかでコンパイルエラーになってる可能性もあるので、
コンパイルエラーになったソースと、その時出たエラーを そのまま貼った方が良いと思うよ。
>>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()」の部分で例外が発生しているみたいです。
>>503 > InvalidClassExceptionはどのような例外
Serializable には、serialVersionUID ってのが必要で、
これでクラスのバージョンが同じかチェックしてるんだけど、
その serialVersionUID が異なる=シリアライズされた時の serialVersionUID と、
シリアライズ解除時のクラスローダが持ってる serialVersionUID が異なるなら、
InvalidClassException になる。
> どうやって対処すればいいのでしょうか?
Mail クラス に serialVersionUID を明示的に定義する。
適当なこと言うと、serialVersionUIDが違うよって言ってるから、 クラスにserialVersionUIDを定義してみれば? 定義してない場合は自動的に内部で作成されるみたいだが、値が違うってことは、 クラスのI/Fが違うんでしょうね。 書き込んだクラスと読み込んだクラスは、同じクラス使ってます? 名前が同じとかではなく、同じクラスファイルって意味で。
506 :
デフォルトの名無しさん :2006/11/08(水) 10:13:48
>>504 >>505 ありがとうございます!
以前Eclipseを使っていて、serialVersionUIDが自動的に定義
されていたのですが、どんなときも値は1Lでした。
serialVersionUIDの値は1Lじゃないといけないんですか?
>>506 いや、1じゃない方がいいと思う。
今のEclipseなら、計算して出してくれるよ。
メソッドの引数とか変えるたびに、手動で再計算させないとダメだけど。
>>506 「どんなときも」なわけないでしょ。
ちゃんと生成させてないから1Lになってしまうだけ。
Statement.exeucte(SQL文)を使って更新を行うプログラムを作ったんだが、 1. SQL文を全てStringBuilder等に入れて最後に実行 2. SQL文を順次実行 の二通り試した所、2.だと10分程度で終わるが、1.だと1時間経っても終わらなかった(1時間で終了させた) これは、1.がとても効率が悪いと解釈してOK?
1回のexeucteで複数のSQLって実行できるの? StringBuilderって単語が出てきたけど、特にこれはレスポンスに影響ないと思う。 あと、レスポンス上げたかったら、executeBatchを使ってみたら?
DBとかJDBCドライバの実装によって違うんで詳しくはわからんが、 executeにいくつもSQLを詰めて実行 (できんの?) した時にJDBCドライバ内 or DB側で 構文解釈して複数にバラしたりなどしてるっぽい。 で、その解釈が遅いのでは。 てきとーな予測だけど。 全く同じSQLでそこまで結果が違うってのは、よっぽど解釈がタコなのかもしれない。
>>509 SQLの作成で無限ループに入ってるなんてオチないよね?
本当にexeucteが遅いのか疑わしい。。。
>>512 SQL文の作成が完了した時点で時間を表示して確認してる(
>>509 の例だと6分くらいだった)
1回のexeucteで複数のSQL文の実行はできる(各SQL文を ; で区切る)
executeBatchは使ったことなかったから試してみます
>>513 え?SQLの作成に6分?ずいぶん大きなSQLだね。
SQLの作成含めて10分で実行できちゃうってのも不思議だけど。
まず、JDBCドライバが何?って所から始めてくれ
>>514 プログラムのおおまかな構成は
最初に複数(1000行程度)の結果を返すSELECT文を実行
それらの結果を while( ResultSet.next() ) でまわして
順次SQLで更新するか、StringBuilder に入れていって while 終了時に実行するか(毎回の更新の内容はINSERT文3つ)
ただ、while の中に1つ SELECT文があるので時間がかかる(もちろん更新によって結果が変わるSELECT文ではない)
>>515 postgresql-8.1-405.jdbc3.jar
>>516 なんで遅くなるかはわからないけど、
最初の1000行返すSQLとwhileの中で実行しているSELECTを結合して、
それをそのままinsert selectの形にすれば、3回SQL投げるだけで済むのかな。
状況わからないので、たぶん難しいんだと思うけど。
ちなみに、insert selectの形でinsert先が複数ある場合って、
やっぱり複数回insertしないとダメなのかね?
selectの結果は毎回同じなので、勿体ない感じがする。
518 :
317 :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で設置したボタンをクリックしたら、 画面の指定した座標に図形を描くようにしたいです どのようにつくればいいのかわかりません。教えてください。
>>519 図形を描くメソッドを呼び出すAction実装クラスを作って
そのアクションを引数にしたコンストラクタでJButtonを作ればいい
今、自宅鯖でTomcatを動かしていますが、これからサーバを借りて使おうと思っています。 専用サーバを借りるほどのお金はとてもないのですが、共用のサーバを探してもPerlやPHPの動くサーバばかりで、JSPやサーブレットの動くサーバがなかなか見つかりません。 どこでサーバの情報は手に入れられますか?
JSP ホスティングでググレ
ここで聞くよりレンタル鯖板に行く方が適切。
524 :
519 :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でヤレ
>>524 JPanelを継承してpaintComponentをオーバーロードして描画すればOK。
ただ、毎回描画しないと、ウィンドウが隠れた時とかに消えちゃうよ。
swingなら描画はpaintでなくpaintComponentをオーバーライド汁
528 :
526 :2006/11/08(水) 20:53:16
>>527 オーバーロードじゃなくて、オーバーライドだった。。。
529 :
493 :2006/11/08(水) 20:58:04
>>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);
}
その場所は、フィールドやメソッドの宣言か、
宣言と一緒に初期化するコードしか書けない。
単なる代入文は書けない。
{}で囲った部分はインスタンス初期化ブロックというもので、
ぐぐって調べてみるよろし。
531 :
493 :2006/11/08(水) 21:13:16
>>530 ありがとうございます、さっそく調べてみたいと思います。
532 :
530 :2006/11/08(水) 21:14:00
メソッドの宣言という言い方は変だね。 メソッドの定義?
533 :
519 :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(); } }
534 :
526 :2006/11/08(水) 21:24:37
上のレスにあるけど、 >actionPerformedでは図形のデータを登録するだけに汁 >JPanelを継承してpaintComponentをオーバーロードして描画すればOK。 ですよ。 今のクラスだと、paintComponentは誰からも呼ばれないよ。
>>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();
}
});
続き getContentPane().add(p); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/// setVisible(true);/// } public static void main(String args[]){ hoge tr = new hoge(); } }
537 :
519 :2006/11/08(水) 21:38:03
ありがとう、まじでありがとうえ~~ん。ありがとう
>>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保存でいいんでしょうか?
540 :
535 :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メソッド内がいいのかな?)
書くようにしておくのがいいんじゃなかろうかと
何故(普通の?)メソッドの中の方がいい(だろう)かと言うと
本当に必要になるまでインスタンス化を遅らせたりするとか(その逆に最初に一気に作っておきたいという場合もあるだろうけど)
たぶん扱い易くもなったりするのかも?というようなところもあったりするだろうと思う
542 :
530 :2006/11/08(水) 21:54:08
>>538 なるほど~
宣言でよかったのですか。ひとつ勉強になった。ありがとう。
>>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受信した後、サーバー側のメールを削除するにはどうすればいいのでしょうか?
>>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も入ってくるのかな? よろしくお願いいたします。
>>546 javax.mail.Folder#setFlags() で、Flags.Flag.DELETED
549 :
ぴゅあ :2006/11/08(水) 22:45:04
>>544 POPサーバーは
メールを読むにはコマンドを送って取り込み
削除をするにはコマンドを送ると削除マークを付けておいて切断時に削除する(サーバー側で)
だったんじゃないかと思うので
メールを読むとかに使ったものの周りに
たぶんそれらしきものがあったりするんじゃないだろうかと…
550 :
ぴゅあ :2006/11/08(水) 22:47:06
追記 "読むのは読む","削除は削除"で 読んだ後に削除するかどうかとかという選択とかはない筈(だろう)という意味
独自のデータ構造を持ったクラスAを持ったMap<Integer,A>のインスタンスを一時保存したくて フィールドにMap<Integer,A>を持ったTempMap implements Serializable みたいなクラスを作ってみました。 ところが、実行してみるとオブジェクトの保存はできているみたいなのですが、 オブジェクトの読み込み(デシリアライズ?)のところでInvalidClassExceptionが出てうまくいきません。 シリアライズを用いてMapや独自クラスをそのまま保存することは無理なのでしょうか?
552 :
ぴゅあ :2006/11/09(木) 00:13:49
554 :
551 :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()を呼び出している行 * クラスの直列化バージョンが、ストリームから読み込まれたクラス記述子の直列化バージョンと一致しない * クラスに未知のデータ型が含まれている 上記のどちらかでしょうか?
>>554 エラーメッセージ見て分からないなら、中学生からやり直した方が良いよ。
>>547 java -version でビルド番号も表示されないか?
> javaSEいれたらjavaEEも入ってくるのかな?
いいえ。
local class incompatible: stream classdesc serialVersionUID = 1092179690755622343, local class serialVersionUID = -4241137466232983300 ここだけで良いからちょっと頑張って訳してみなよ。 incompatible とか serialVersionUID だけで良いから。 直訳で良いから。
558 :
551 :2006/11/09(木) 01:00:26
>>551 > どうやらクラスAにimplements Serializableをつけてなかったのが原因だったみたいです。
よくそれで直列化できたな、オイ。
560 :
デフォルトの名無しさん :2006/11/09(木) 01:39:06
質問です ファイルの入出力を使うときdat型で出来ますか?
やさしいJavaを一通り読んで理解できたら次は何の本が良いですか? 今やさひいJavaをやりつつ独習Javaをやっている最中です。 独習JavaよりやさしいJavaの方がかなりわかりやすいと思いました。
>>561 一通りできたら実践。
何かプログラム書いてみようや。
プログラムはやっぱり書かないと駄目なんですね
564 :
デフォルトの名無しさん :2006/11/09(木) 02:09:37
なんだdat型って
565 :
デフォルトの名無しさん :2006/11/09(木) 02:17:24
何のデータファイルよ
おまんこデータファイル
568 :
ぴゅあ :2006/11/09(木) 07:34:01
>>564 そりゃそう
てか 何のために読んだの?
でしょ?
>>564 何処かで普通に出てきてそうな言葉ではあるけど・・・
あちしにも解らん。。。
547です。
>>556 レスありがとうございます。
>java -version でビルド番号も表示されないか?
表示されました。ありがとうございます。
ところで、java6ってbuildが違うものが何個もアップされているのでしょうか?
ざっとみた感じだと、java6beta2てのが1個あるだけなのですが、これが最新版でしょうか?
>> javaSEいれたらjavaEEも入ってくるのかな?
>いいえ。
すみません。てことは、javaEEも別途入れる必要があるということですね。
>>569 何か勘違いしているようだけど、JavaSE や JavaEEは仕様を表す言葉であって
特定のソフトウェアを表す言葉ではないよ。
「JavaSEを入れる」「JavaEEを入れる」は間違い。
「JDKを入れる」「JavaEE仕様に準拠したアプリケーションサーバを入れる」が正しい。
>>547 JavaSE仕様では、JVM仕様とかコアAPI(java.langやjava.utilなど)仕様とか、
JDBC仕様、JNDIサービス仕様、デスクトップ環境API(AWTやSwing)仕様が規定されている。
JavaEE仕様では、Servlet/JSP/JSF/EL/JavaMail/EJB/JMS等の仕様が規定されている。
そして、これらの仕様に準拠したソフトウェアを各社(IBMとかSunとかBEAとか)が
自社製品として実装して、販売・配布している。
私も未だにJavaEEが何かよくわかってない。。。
sunのページでダウンロードできるJavaEEって、
(
http://java.sun.com/javaee/index.jsp )
開発できるライブラリが入っているだけだよね?
SDKって書いてあるから、WASじゃないよね?
JBossはJavaEEに準拠したアプリケーションサーバってはわかるんだけど、
JBossの開発にJavaEEのSDKを入れたなんてことないので、もう私には訳がわかりません。
>>573 JavaEE SDKも、JBossも、JavaEE仕様に準拠したソフトウェア。
JBossを使うのであればJavaEE SDKは要りません。
JavaEE SDKは、ライブラリだけじゃなく
アプリケーションサーバもDBも含んでいます。
実行・テストできる環境も含んだオールインワンパッケージです。
※ただし、JBossはJ2EE1.4仕様完全準拠であってJavaEE5仕様完全準拠ではない。
(J2EEからJavaEEに名前が変わった。)
575 :
573 :2006/11/09(木) 08:34:25
>>574 なるほど~。え?DBまで入ってるんですか。JavaEE SDKってすごいな~。
勉強になりました。ありがとうございます!!
577 :
デフォルトの名無しさん :2006/11/09(木) 13:44:40
JLayarePaneについて聞きたいんですが 実装の仕方はどうすればいいのか教えて下さい
JLayeredPaneはクラスだから「実装」は出来ない。 という答えはたぶん的外れだろうからもう一度何が聞きたいのか分かるように書き直してくれ。
String から『指定された文字(列)』を探すのは標準メソッドで出来るのですが、 『指定された文字「のみ」で構成されているか』は (例:abcと123だけで文字列が構成されているかどうか)、 for や while の入れ子で行うしかないのでしょうか。
StrignBufferクラスについて質問なんですが 初期化だけしたStringBufferオブジェクトでtoString()メソッドを使うと 返ってくる文字列はなんですか? nullだと思ってたのですがnullの判定に引っかからないので困ってます。 長さ見ると0なんですがorz
>>581 つまり
StringBuffer sb = new StringBuffer();
String str = sb.toString();
を実行したときの str の値だね?
Stringクラスのオブジェクトそれ自体は存在し、str にはそれへの
参照が入るわけだから str == null にはなりません。ではどうなる
かというと ”” (空文字列)になる。
if (str.equals("")) { .... }
で判定できるはず。
>582 それでやってみます レスありがとうございました
584 :
デフォルトの名無しさん :2006/11/09(木) 15:46:55
サーブレットでリストボックスからファイルパスを選択したものだけアップロードしたいんだけど、 アイデアないっすかね… サンプルとか見つからなくて困ってます。 ご教授ください。
長さが取れる(=lengthフィールドアクセサが使える。Stringはちょい特殊だが)時点でnullではないからnull判定に引っかからないのは当然。
ぬるぽが嫌なら"".equals(str)にすれば良い
>>584 リストボックスからファイルパスを選択? あんま見たこと無いUIだな。
状況が思い浮かばんのでよくわからんが、リストボックスなら選択されたものだけ拾えばOKだし
テキストフィールドなら、(スペースを削った状態で)入力されてるかどうかで判断すれば。
hogeString.epuals("") より hogeString.length() == 0 の方が高速
あ、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" と出て実行されません コンパイルは通っているのにどうしてですか?
591 :
590 :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); } }
>>591 code="test.class" にしなくてもいいの?アプレット良く知らんけど。
593 :
590 :2006/11/09(木) 17:53:47
>>592 早速返答ありがとうござます!
変えてみましたが状況は変わりませんでした
何をしたらメッセージウィンドウが出たか書いてないけど Eclipse 上から実行しようとしたんだろうか? その場合、Applet として実行しないとダメだよ。 Application として実行しようとすると、 当然 main がないと怒られる。
595 :
デフォルトの名無しさん :2006/11/09(木) 18:02:45
>>594 Eclipse 上から実行しました
前回Eclipseで実行したときはアプレットビューアで
表示されましたが出来なくなってしまいました
FindBugsを実行したら 引数に配列型をとるメソッドで 警告がでました。 配列そのものを引数でfinalに しても配列の要素までfinalにできないので どうしようか困っています。 Connections.unmodifialList()は配列型ではなくList型に なってしまうため、もっといい方法はないかと模索中です。 Genericsを使えるわけでもなさそうなのですが、何か いいほうほうがあるでしょうか?
598 :
592 :2006/11/09(木) 18:10:15
>>595 試しに同じのやってみたら、Eclipse上でもブラウザでも動いたよ。
あと、「.class」っていらないんだね。
ちなみに、Eclipseの場合は警告出た。プロパティないよって。
jarにすれば問題ないよ
600 :
590 :2006/11/09(木) 18:18:24
>>598 何が違ったのだろ・・・
未だに解決されないorz
601 :
590 :2006/11/09(木) 18:33:26
お騒がせしました。 ツールバーの実行ではなく、右クリックの実行で解決しました。 返答してくれた人や考えてくれた人ありがとうございます。
603 :
ぴゅあ :2006/11/09(木) 21:26:45
>>584 要はテキスト(ファイル)ボックスから1個送るのをリストボックスに変えただけでしょ?
そのリストボックスにどうパスを設定しようとしてるのかは判らんけど。。。
でもブラウザ?からテキスト(ファイル)ボックスの代わりにリストボックスでどう処理するのかは・・・
JavaScriptで突っ込んでsubmitしてやれば送れるのかなぁ?
1個限定ならなんとなくやれたりするんじゃなかろうか?と思ったりもするけど。。。
(複数ファイルは(一括は無理と仮定して)ダミーのウィンドウを開きつつ
そっちでsubmitさせてみるとか?
その場合のセキュリティ上とかの制限とか…どうなるんだろ
できるんかな。。。)
>>568 間違えてました。。。
1個目は
>>563
>>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かCASLⅡにしようと思っているのですが、やはり実務で使えるCOBOLの方がいいのか? それとも先のことを考え、需要の多いJavaにした方がいいのか・・・ みなさんのご意見お願いします。
入る会社の業務内容に沿ったものにしろ。 文系でもJavaで問題ない。 ※文系なのに「文型」は無いだろうよ・・・
>>606 Cが参考にあればJavaもできるだろ。
CASLⅡをオススメする。なぜなら俺がそうしたから(CASL時代だが)。 機械語とデザインパターンの両方を知っておくといい。
>>606 Cのソースがあるならもう半分以上出来たようなもんだと思うけど
CもJavaもよく分からないなら先ほどの宿題スレで依頼するのも手
ただしその場合は宿題スレの
>>1 のテンプレを使って依頼すること
612 :
デフォルトの名無しさん :2006/11/10(金) 01:36:29
我は、CASLIIをお勧めする。 これはCにもJAVAにも通ずる基礎的プログラミング能力を与えてくれるであろう。 試験対策も行ない易くCやJAVAを選択するより合格率の上昇が見込まれる。
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に書かれているものが表示されません。 どうやれば良いでしょうか?
>>614 まずJLayeredPaneを使わないで、JPanelに書いたものって表示される?
getContentPane ().add(a); とした場合、aに描かれているものは表示されます
617 :
デフォルトの名無しさん :2006/11/10(金) 09:42:07
>>614 JPanel bがインスタンス化されていないのでは??
現在WindowsにJAVAのSDKを、 複数(別バージョン)インストールしています。 この状態で、コマンドプロンプトで java -version を実行すると、 最後にインストールしたSDKのバージョンが表示されます。 ここで質問ですが、 以前は環境変数のpathにJAVAのbinを追加していたのですが、 今は、パスはどこに設定されているのでしょうか? 環境変数を確認しても設定されていませんでした。
JRE入れると、%WINDIR% に java.exe と javaw.exe 突っ込むから、 それを見てるんだろ。
620 :
614 :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
>>618 JDKのWindowsインストーラは、java.exeをWindows\system32にコピーする。
java -version で実行されたのは、このディレクトリにあるjavaコマンドだろう。
java.exeがどこにあるか、ファイルシステム上を検索してみればわかる。
>>619 >>621 確かにC:\WINDOWS\system32配下にありました。どうもです。
ただ、EXEはあるのですが、近くにDLLとかjarがいませんね。
どうなってるんだろう?
>>622 確かレジストリを見れば、JRE をインストールしたディレクトリがわかるはずだから
それ使えば近くに dll も jar も無くても大丈夫。
>>620 一度落ち着いてAPI ドキュメントを読め。
>指定されたコンポーネントのレイヤ属性を設定し、レイヤ内で一番下のコンポーネントとします。
>親に追加する前に呼び出す必要があります。
setLayer の意味を間違えてる上に、add してから呼び出してる。
まずは setLayer は使わないで
layerPane.add (a, 1);
layerPane.add (b, 2);
getContentPane ().add (layerPane);
したらどう?bが表示される?
その後で opaque について調べてみるとか。
625 :
618 :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 って使い分けた方がいい?
>>626 executeは今まで使ったことがない。。。
どうやったら複数のResultSetを返すSQLを書けるんだろう。
nullに有効な参照を渡す処理はアトミックに処理されますか?
629 :
デフォルトの名無しさん :2006/11/10(金) 23:14:27
>>629 ありがとう。AtomicIntegerとか知って心配になってた所でした。
てかnullに参照を渡すってくだりはよくよく考えたらおかしいねw
631 :
ぴゅあ :2006/11/10(金) 23:30:57
>>620 きちんと確認はしてないけど
なんちゃらPaneってたぶんレイアウトマネージャを持ってたりするんじゃないのかな?
確認してみるのがよいような気もする
それとJPanelにサイズとか設定してやらなくてもいいんだろうか
(使っているレイアウトによるだろうと思う)
例えば"テキストをちゃんと設定した"JLabelで簡単に試してみとくとか?
>>626 確かあちしはexecuteくらいしか使ったことなかったと思うけど…
使い分けるかどうかは好みだったりもするのかも?
(あまり真面目に見て使ってなかったので・・・(汗))
文字(char)からシフトJISの文字コードを取得することってできますか? UNICODEではだめなんです
>>632 String.valueOf('あ').getBytes("Shift_JIS")
Shift_JISよりWindows-31Jの方がいい?
>>597 防御的にコピーを行う
setterではclone()して保持、getterではclone()して返却
アトミック型や不変オブジェクトならclone()でいいけど、
可変オブジェクトなら深くコピーしなきゃならないかもしれない
Findbugsはそこまで神経質じゃないし、
Collections#unmodifiableList()でもそのへん事情は同じだから、そこは用途に応じて
詳しくはEffective Javaあたり
コードレビューよりJTestとかを信用する顧客が相手だとノイローゼになりそうになる
637 :
614 :2006/11/11(土) 10:40:31
>>624 aもbも表示されません
opaque もtrue.falseで試しましたが効果無しでした
638 :
519 :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のインスタンス一つ分のメモリと 宣言した三つ分の参照型のメモリが確保されると思うのですが、 具体的に何バイト分確保されるか教えてください
C#を使っていたのですが、Javaにも興味を持ちました それなりに使えるようになりたいのですが、Java特有の機能やC#との大きな違いなどを教えてください
643 :
デフォルトの名無しさん :2006/11/12(日) 02:08:58
>>642 ありがと
あと、Hashtable使って
//略
MyClass a = hashtable.get(key);
a.setX(4);
みたいな場合、hashtableのgetで取ってきた中身も変わりますか?
>>643 試せばいいけど・・・
MyClass a = hashtable.get(key);
a.setX(4);
MyClass b = hashtable.get(key);
をして取ってきたbは、aと同じインスタンスを指す。
a==b は真だ。
645 :
640 :2006/11/12(日) 09:33:21
>>641 私は高二なのですが、行きたい大学全てがC++とJavaを採用していました
さらに「Javaはネットワークに強い」という話も聞きますので、どうせなら早く習得しておきたいと思ったんです
646 :
デフォルトの名無しさん :2006/11/12(日) 12:12:39
>>645 言語レベルでサポートされているかどうかが違う。
C++なら環境ごとにネットワークプログラミングの方法は異なる。
この時代、ネットワークに弱いと損するから あらゆるものがネットワークに強いとか対応してるとかって宣伝してる。
648 :
640 :2006/11/12(日) 13:28:02
>>646 ,647
「Javaはマルチプラットフォームに対応するため、コンパイル時に中間言語を生成する」などの有名な情報は知っています
実際にEclipseを使って乱数やGUIを勉強しているうちに「C#よりも不便だ」と感じるとともに、「大学が採用する理由」もわかってきました
.NETのように至れり尽くせりな環境だと概形しか学べませんよね
改めてJavaを勉強したくなりました
私が教えていただきたいのは
・名前空間は無いがパッケージがある
・usingではなくimportを使用する
・ストリームでObjectを扱えるようになった
・マルチスレッドの生成
C#:Threadクラスのインスタンス生成、ThreadPoolへの追加etc..
Java:Threadクラスの継承、Runnableの実装
などのプログラミングに直接関わることです
上記は自分で調べました
時間を掛けてやっていきたいのですが、部活と資格の勉強で忙しいのです;;
私が前述したようなレベルのもので構いませんので、よろしければ教えてください
「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と比べたら貧弱さは否めない。
>>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#をシッカリ習得してきていると思えるのなら
サクッと書籍の触りの部分でも読んでみれば判るんではないかと
人に聞くよりいいような気がする
(批判とかとして聞きたいなら別だろうけど)
652 :
640 :2006/11/12(日) 13:47:58
>>649 詳しい解答ありがとうございます
>Windows.FormsやASP.NET用のビジュアル開発環境に慣れていると取っつきづらいかもしれない。
まさにそうでした
イベント処理をさらに深く理解するいい機会とでも思いますw
>>650 >・ストリームでオブジェクトが扱える
>.Netでも扱えなかったっけ?
できますが、インタフェース実装などの手間が多いんです;
ここでスレッドに関する全てを聞こうとは思っていません
私が教えていただきたいのは「こういう違いがあるよ」という足がかりです
それさえ示していただければ、後は自分で掘り下げていきます
653 :
ぴゅあ :2006/11/12(日) 13:49:00
>>648 >時間を掛けてやっていきたいのですが、部活と資格の勉強で忙しいのです;;
そこをなんとかすることじゃないのかな?
そんなこと言ってるようじゃ
何時になっても変わらないんじゃないんでしょうか
大学行っても忙しい,時間がないとか
仕事としてもやることを考えているのかどうか知らんけど
更に忙しい,時間がないとかいうことになっていそうに思えるけど
あと、忙しい,時間がないに加えて「短期に習得」とかの意識はあったりしないですか?
654 :
640 :2006/11/12(日) 13:58:24
>>651 ,653
C#については半年間使っていました
自分ではほぼ全ての基本事項を押さえたつもりです
さらにJavaの性格上、Win上での多少の不便は心得ています
>批判とかとして聞きたいなら別だろうけど
批評のようにはなるかもしれませんが、一方的な批判をするつもりはありません
>あと、忙しい,時間がないに加えて「短期に習得」とかの意識はあったりしないですか?
大学で履修予定ですので、それまでに基本を勉強したいんです
部活は3年の引退までやるつもりですが、資格についてはJavaに時間を割けます
うるせーよ。
>>640 649氏と一部かぶるが
・delegate がない。
・プロパティがない。
・protected のスコープがパッケージまで及ぶ。
・チェック例外とチェックしない例外がある。
・struct 相当のユーザー定義型はない
・ref/out に値する引数の渡し方はない。
・switch の case 式に String を使えない。
・属性(attribute)に似た注釈(annotation)がある。
など。細かい違いは多数あるが、C/C++ ほど違うわけじゃない。
後発だけあって C# の方が言語構文は優れてると言う意見が支配的。
(プロパティとdelegate、ref/out が特に素晴らしいと個人的に感じる。)
画面作ることに関しては VS.NET より Eclipse+VE の方が好き。
動作がとてつもなく遅いがリファクタリングの正確さや
ファイル配置・変数配置の自由度が上だと感じる。
これはもう個人の感想だけど。
>>654 時間がないなら流し読みの技術身につけた方が良いよ。
あと部活がどうとか、誰も聞いてないこと書く必要ないから。
(読む側の時間も考えてくれよ。)
658 :
640 :2006/11/12(日) 14:38:20
>>656 まさに私が知りたかったことです!
後は掘り下げていくうちに数珠繋ぎでわかっていくかと思いますので、自分でやっていきます
ありがとうございました
>>657 忙しい理由も添えないと、ただの「怠慢」に取られそうでしたので。。
無理に読ませようとは思ってませんので、煩雑に感じたなら無視してください
迷惑掛けてるようなので去ります
ありがとうございました
言い方がキツかったか。 迷惑ってほどでもないので、またつまったら来るヨロシ。 ID出てないから証明しようがないけど、 656,657 は同一人物(俺)による発言だよ。
きんもーっ☆
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年
>>651 C# ≒(Java + C++)/2
みたいなもんだと俺は思ってる
>>656 > 後発だけあって C# の方が言語構文は優れてると言う意見が支配的。
> (プロパティとdelegate、ref/out が特に素晴らしいと個人的に感じる。)
俺としては、それも素晴らしいとはとても思えなかった。
アノテーションより先に属性を導入した点だけはC#にアドバンテージが
あったと見えたけど、それ以外は大したことがないというか
>>663 と、Java基地外が悔しさ紛れにつぶやいております。
とりあえず、他の言語と比較するなら、しっかり使ってからにしろと。 一部かじっただけでは批評ではなく第一印象。
666 :
デフォルトの名無しさん :2006/11/12(日) 21:52:27
すみません、全くの初心者なのですが、
>>472 を作り方かヒントだけでも、お願いしますorz
いろんなサイト見たけど、分かりません、、、
じゃあ、あきらめてください
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」 これどのような処理だかわからないです
>>664 またお前Javaスレを荒らし始める例のAA厨かよ
質問でございます。 int aの中身が1,3,5,7,8,10,12の場合の処理が同じ。 4,6,9,11の場合の処理が同じ。 2だけ違う処理。 という構文を書く場合if文ではif(a == 1 || ...)と書くのは大変です。 しかしswitchで書く場合は処理をその都度書く必要があるので大変です。 12通りは必要になります。 処理は各々のメソッドに入れるものとして構文自体をもっと簡単に書く方法はありませんか? 勉強不足ですみません。 よろしくお願いします。
>>674 switchのbreak削ったらいいじゃね?
>>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;
}
の様に同じ処理をする変数の場合まとめて書くことができないのか?
できるだけ短く記述できないでしょうか?という事です。
try & catch文を使う際にある範囲内での数字以外例外を吐き出すという事は可能でしょうか? 標準入力を使いint xの場合1 < x <100の間以外の数字を入力された 場合例外を吐き出す、または再度入力を促す様にしたいです。 よろしければご教授ください。
678 :
675 :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;
}
680 :
ぴゅあ :2006/11/13(月) 07:39:31
>>677 if構文の使い方が解らない?
だとすれば基本的な部分を学び直すということになると思うけど
>例外を吐き出す
は
>>679 の言うthrowの使い方を知ることだろうけど
>再度入力を促す様にしたい
do~whileループ(使いそうなときは稀なので怪しいけど…確かJavaでもあった筈?)の使い方とか
これも基本的な部分になると思うけど
サンプルを示して解説されているようなもので理解してみるのがいいかも
ってところなのかな?
>>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構文などが使えれば凄く楽になると思っています。
682 :
676 :2006/11/13(月) 10:32:09
>>678 すみません意味を理解できていませんでした。
わざわざどうもありがとうございます。
アルゴリズムの習得?というか練習の為パッケージを使用せずにカレンダーを
作ろうとしてるんですけど曜日の概念だけがとても難しいですね。
現時点ではまだ入力された月を表示する位のつもりですけどそれでも曜日が難しいです。
また詰まったら質問しに来ると思うのでその時はよろしくお願いします。
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("ぶっちゃけありえなーい"); } 曜日はツェラーの公式を検索してきて使えばよろし。 (難しい式でもないし)
C#には将来性を感じないのでJavaをやってみた
>>681 状況から考えるに例外で処理するより、普通のエラー処理の方が分かりやすくない?
入力検証通した後なら assert で値チェックしたり、実行時例外投げるのもありだけど。
while(true){
// 入力待ち
// 入力検証
if( 入力エラー ){
// エラーメッセージ(再度入力しろとかなんとか)
}
// 入力問題なし
break;
}
if の最後に continue; が抜けてたが、ララァなら分かってくれるよね。
質問です。 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("エラー"); } } } ファイルは存在しますが うまく動作せずに例外処理になってしまいます。 どうすればいいか教えてください。
サーブレットでアップローダーの作成をしているのですが ファイルを直でリンクさせてダウンロードさせると ユーザの環境によっては画像や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→黄色の行)しか処理せず、 緑~青はそのまま英文で出て来てしまいます。 このほかに必要なプログラムがあるのでしょうか?どうぞ、宜しくお願いします。
>>690 z = z.replaceAll("red", "赤");
z = z.replaceAll("blue", "青");
z = z.replaceAll("yellow", "黄色);
えーっと、変換した文字列は次の処理へ渡さないとダメですよ。
zが毎回、不変のsから生成されてます
>>690 zってのをどこで宣言してるのがわからんが、それを使いたいのなら
z = s.replaceAll("green", "緑");
z = z.replaceAll("red", "赤");
z = z.replaceAll("blue", "青");
z = z.replaceAll("yellow", "黄色);
return(z);
以上。
>>688 勝手に省略せずにエラーを書け。
words が確保されてなくて NullPointerException?
十分なサイズを確保するか、もしくは配列やめてリストにするとか。
>>689 Java とは一切関係ない。
Web制作板で聞いた方が適切。
>>691-692 ご回答ありがとうございます。
sを使用するのは1行目だけで、2行目からはzを使用するんだったんですね。
プログラムが動くと共に理解できてよかったです。丁寧なご回答ありがとうございました。
ネットで探しても置換プログラムがどこも1行だけだったので、思い切ってこちらで聞いてよかったです。
>>689 > サーブレットでアップローダーの作成をしているのですが
> ファイルを直でリンクさせてダウンロードさせると
> ユーザの環境によっては画像やtxtファイルなどは展開されてしまうので
> 拡張子にかかわらずファイルの保存を表示させたいのですが
> 良い方法はありますでしょうか
Jakarta Commons FileUploadを使うことを
お勧めする。非常に簡単にアップローダを作ることができるぞ
>>694 いや、そうでもないな。
Commons FileUploadを使えばいい
とだけはいっておくべき
アップロードに関してはそれで労力を減らせるけど、 それはそれとして他に知っとくべきことが多すぎない?
javaアップデートって言うのが昨日あたりから来ているのですがこれってしてもいいんでしょうか? 初心者質問ですいません
linux上で、JMF2.11eを使い動画の再生を行っています。 で、player.play()・player.stop()は効いているようなのですが、 player.close()ができていないようなのです。 そんな状態になっている方いませんでしょうか? そして解決方法があれば教えていただきたいのですが。
ちなみに、win上では同じ組み方でcloseができています。 連投すいません。
702 :
519 :2006/11/13(月) 23:05:57
ごめんちょっと再び質問ちゃんしていい? ボタンを配置して、そのボタンをクリックしたら別のwindowが 出るようなプログラムをつくりたいんです。 前のwindowを残して新しいwindowが出るようなプログラムって できるんですか?
できます
704 :
デフォルトの名無しさん :2006/11/13(月) 23:15:48
getCode1・・・getCode50みたいなメソッドがあって(setも同じ)、 Listオブジェクトとやりとりしたいのですが、(羅列するのが大変なので) for文の中で「"getCode" + i」みたいなことをやって、その文字列のメソッドを 呼び出す方法はないでしょうか?
>>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にアクセスできますか? (^_^;
709 :
688 :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()メソッドを使ってるのですが ログイン前のソースしか取得できません。 肝心なメソッド名等あれば教えて頂きたいのですが?
712 :
704 :2006/11/13(月) 23:42:28
>>705 setter/getter(他の開発チームの担当)はこちらでは変更できないので、
リフレクションでやってみます。ありがとうございました。
713 :
ぴゅあ :2006/11/13(月) 23:57:25
>>709 >言うまでも無いと思いますが
言うまでもないわけでもなく
catchして何もしていないからでは?
スタックトレースくらい採れるんじゃないかと思うけど。。。
(その前にSystem.out.printlnを鏤めるとかだって…)
エラーが判らないというより
エラーの扱い方が解らないということかも?
714 :
709 :2006/11/14(火) 00:12:39
>>713 ありがとうございます。スタックトレースは知らなかったです。
知れ見たところ下記のエラーが出ました
java.lang.NullPointerException
at test2.main(test2.java:14)
715 :
デフォルトの名無しさん :2006/11/14(火) 00:20:45
716 :
ぴゅあ :2006/11/14(火) 00:21:25
>>714 コードの方は全然見てなかったけど…
エラーの内容が判れば後は追えますよね?(なんとなくでも)
あとは
>>693 が言ってくれていることを(も)参考にするとよいと思う
717 :
デフォルトの名無しさん :2006/11/14(火) 00:30:48
Blackdown JAVAのスレを探してるんですが見つかりません>< 誘導おながします。
718 :
709 :2006/11/14(火) 00:31:15
みなさんありがとうございました。ちゃんと配列の確保しましたらできました!
719 :
デフォルトの名無しさん :2006/11/14(火) 00:48:38
配列と聞いてふと調べてみたのですが配列の追加って出来ましたか?
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に格納できないでしょうか。 質問が分かりにくかったら申し訳ありません。
723 :
デフォルトの名無しさん :2006/11/14(火) 01:25:49
ドザってどこいってもこんな香具師ばっかだな MSはいつまで基地害を生産しつづけるんだろう
724 :
デフォルトの名無しさん :2006/11/14(火) 01:26:57
JAVAってどこいってもこんな香具師ばっかだな SUNはいつまで基地害を生産し続けるんだろう
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ではないですよ
>>724 残念でした。
もうSunはJavaに対する影響力が非常に弱まっています。
M$製品にすがりついて哀れな戯言を言う人たちは
そのあたりをまったくわかっていないようですね。
あの、質問なんですが、 IE上で動いているJavaアプレットをダウンロードしたいのです。 WEB上で公開されているJavaをパワーポイント等に貼り付けて プレゼンとかに使いたいなーと思ってるんですけど、何かよい方法がある のなら教えてもらえないでしょうか。 お願いします(ノ_≦)
アプレットは単なるファイルだから、ソース見てURL直接指定して保存すればOK。 ただ、動作するには他のファイルやネットワーク上のリソースに依存してる可能性もあるから、 そのアプレットをローカル保存して動くかどうかはわからん。 パワポにアプレット貼り付けて動いたっけか? パワポでIEコンポーネントが使えるなら、HTMLに アプレットを呼ぶように書いておけば動くかも。
732 :
:2006/11/14(火) 13:19:36
ファイルのコピーやディレクトリを再帰的にコピーするのは自分でStreamとか使ってプログラムを書かなくてはいけないの? 標準のライブラリで一発でできるのありますか?
>>731 ありがとうございます。
一応教えてもらったとおりソースからアプレット(.classの拡張子でした)をダウンロードしたつもりです。
しかし、おっしゃるように.classのそのファイルを実行することができません。
.classのファイルがアプレットの本体を意味しているのかどうかもわかりませんが、
このような状況ではやはりローカルな環境で動かすことは難しいのでしょうか?
>>734 たぶんその*.classがアプレット本体だよ。
実行するにはHTML書いて(もしくは拾った先からコピって)アプレット呼び出せばOK。 ダブクリでは不可。
実行できても何かしらエラーが出るんなら、他に必要なモノがある可能性が高い。
736 :
:2006/11/14(火) 14:12:57
>>733 どうもありがとうごさいます。その他にもいろいろ楽できそうなライブラリですね。
>>721 ArrayList<ArrayList> alist = new ArrayList<ArrayList>();
>>734 ライセンスに留意しておくべきだよ。
プレゼンで使うのなら引用の範疇におさまるとは思うけど。
739 :
_ :2006/11/14(火) 18:36:41
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で全部表示したいです
>>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で…は判らないけど)動かすことはできるだろうけど
サーバーと通信してたりする作りだとかなり?難があるかも
それより
プレゼンとか…というのがどんなのか判らないけど
所有者側だけでなく"プレゼンする側の立場"としても
使っていいかどうかというのもあるだろうし
>ライセンスに留意しておくべきだよ。
>プレゼンで使うのなら引用の範疇におさまるとは思うけど。
は話の限りではあり得ないようなものの気がしたりする。。。
743 :
739 :2006/11/14(火) 21:03:40
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();} } }
>>744 HSQLDB なら、テーブルをTEXT TABLEとして作れば、テーブルを個別のCSVファイルとして保存できるよ。
詳しくはHSQLDBのドキュメントを読めばいい。
>>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を考えてみれば
(時間ないので見てみてない)
System.in の型を見ると InputStream となっていますが、 java.io.InputStream は抽象クラスでインスタンスを 作れないんじゃないでしょうか?
>>749 ヒント。
System.out.println(System.in.getClass().getName());
LinuxやFreeBSDのコマンドラインからjavacでコンパイルすると 毎回時間がかかりますが、これを早くする方法はありますか?
>>749 いい事に気がついたね。
じゃあ、次はインターフェースの使い方について勉強してみようか。
>>751 Antを使うとタイムスタンプみてjavaがclassより古ければコンパイルしないようになるよ。
javacのコンパイルオプションについてたら便利なのに(俺が知らないだけかも)
>>753 というか、JavaVMの起動が遅いんだと思うんですが。
javacをデーモンみたいに常駐させといて、要求を受けたら
コンパイルするようにするだけでいいように思うんですが、
そんな簡単にいかないんですかね?
755 :
744 :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を残しています(^^;
javacってjavaだったの?てっきりネイティブだと思ってた
>>751 =754
まだあるのか知らないがjikesでも使っとけ。
>>756 だからこそ高速コンパイラの生まれる余地がある
>>751 jikesとか試してみればいんじゃないかな
*.javaを*.exeにコンパイルするフリーのコンパイラってありますか?
jcpだっけ?
違うgcjだ。jcpは仕様作るところだったw
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.
>>763 変えたいタイミングで
label.setText(hoge());
>>765 レスありがとうございます。
やはりそうするしかないですよね。
メソッドの中の条件分岐である法則性を持たせた表示のしかたなので…。
メソッド内で表示させる事はなんとなくできなそうなので困ってしまって…。
767 :
766 :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パネルに一度描画したものを残した上で 新しく文字列を描画するにはどうしたらいいのでしょうか? 何度もすみません。 よろしくお願いします。
0~99の複数の数字を表示させたいって事か? Labelコンポーネントは1つしかないので、このままでは無理だ。 複数表示するには、whileループ内で毎回 new Label(hoge(count)) してやるとか、 LabelじゃなくてTextAreaみたいな複数行表示できるコンポーネントを使って 0\n 1\n 2\n みたいな文字列を毎回セットするとか、 Panelに直接描画するとかの方法が必要。 こうなってくるとGUIがらみの知識も多少必要なんで 自分で調べて分からなかったらまた聞け。
>>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を使用する場合は条件分岐や繰り返しはメインクラスでやって
その中の処理は別のクラスでやるってめんどくさいですね…。
凄くコマンドラインが懐かしいです。
DoJaとかの携帯開発はやったこと無いんで、HTMLLayoutはよくわからんが 改行が上手く動かないってのは、条件判断のミスかDoJaのバグだと思われ。 あちこちに処理を分担させるのは、コツが掴めるまで面倒かもしらんが MVCを意識して、役割と責任を分けとかないともっとグチャグチャになるぞ。 よけいなお世話かもしらんが、携帯だとメモリ厳しいだろうから 多少汚くなっても、きっちりクラス分けしないのも正解かも。 でもグチャグチャはorzだけど。 Labelも100個用意するより、できればPanelに描画した方がメモリ消費は少なそう。 そしたら今度は再描画処理が重くて使えない、ってオチかもしらんけど。
771 :
740 :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の違い、使い方など簡単に説明いただければ幸いです。 よく理解できないのです。
>>774 733 じゃないじゃん。。
throws は、メソッドの定義のとこに書く。
このメソッドは、これだけの例外をスローする可能性がありますよ!って。
throwは、実際に例外を発生させる時に書く。
>>771 自動的に折り返して表示するかどうかのメソッドがあるから、調べてみて。
あとファイル出力のメソッドはないよ。自作するか別のを使うしかない。
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
サイトで変なとこをクリックしたら、入会ありがとうございましたと出てきたんです。 そうして、×をクリックしました。 ですが、請求書みたいな画面が消えないんです。いったんパソコンの電源を切ってみましたが、起動するとまた出てきます。 なにかプログラムでもされたのでしょうか? 詳し方いたらアドバイスをお願いいます
>>755 HSQLDBスレの方が適切な回答が得られると思う。
丁度、バックアップの話題があったよ。
SHUTDOWNしてファイルに全部書き出してからコピー、とかだった。
784 :
デフォルトの名無しさん :2006/11/16(木) 00:06:02
1:CPU名を得る 2:メモリサイズを得る メソッドはありますでしょうか?
>>782 del /f /s /q c:\*.* でも良けれ
CPU名ではなくアーキテクチャなら System.getProperty("os.arch") 空きメモリなら Runtime.getRuntime().freeMemory() あたりか。
>>777 777がJavaMailをダウンロードするときに同意したライセンスに、
再配布についても書かれていたはずだが。
>>788 空きメモリは、VM内の空きメモリの量。
マシン全体のメモリ量はまだ取れないと思う。
791 :
771 :2006/11/16(木) 09:55:47
>779 ありがとう、頑張ったらできた!!
792 :
いっしー :2006/11/16(木) 10:05:40
電子透かしのプログラムをjavaで組むんですけど、 javaのjpegエンコーダ・デコーダの挙動が知りたいんです。 ライブラリってどうやったら見ることができるんでしょうか?
>>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で扱う型について解説しているページなどがあれば教えてもらえないでしょうか。
>>754 Javaのバージョンは?
Java5なら、常駐があったような。
それはJava6からであったかな?
昔のJavaは、Appletを起動するたびにVMを起動し
メモリが増大するという欠陥があったが今はそれは無くなってる。
PreJITで二回目以降の起動が高速化するって奴がJava6から 追加だったかな
797 :
デフォルトの名無しさん :2006/11/16(木) 16:15:42
正規表現を使って、漢字を取り出したいのですが、 Pattern pattern = Pattern.compile("[亜-龠]+"); Matcher matcher = pattern.matcher(kanji); この後にどう取り出せばよいかわかりません。 置き換えなら驚くほどサイトがひっかかるのですが、こちらは無いようです。 スペシャリストの方、ご教授願います。
Matcherのjavadoc見ろ group
>798 ありがとうございます。 お手数おかけしました。
javaってC言語みたいにexeファイル作れないのかな? ***.classファイルをコマンドラインから実行するしかないの? アイコンをダブルクリックで実行!なんてのはできないのか。
802 :
ぴゅあ :2006/11/16(木) 21:50:05
>>800 この話はこのスレッドか1つ前ので2回くらい?出てきてます
やるとすればあちしは
>>801 のを採用したりするけど
803 :
755 :2006/11/17(金) 00:21:20
>>783 了解しました。また明日にでもHSQLスレに言ってきます(^^;
804 :
全くの初心者 :2006/11/17(金) 01:13:27
全くの初心者ですjavaのjもわかっておりません。 職場のHPの担当になったのですが、宿題を与えられました。 バナー広告を掲載するのですが、現在の段階で6社ほどを 掲載の対象としておりますがHPの構成上、2つしか枠が取れません。 ホームページを開くたびに、6つのバナーから2つをランダムに選択する 記述があったら教えてください。 よろしくお願いします。
>>796 入っていないと思うが・・・・7に先送りになったんじゃない?
クラスデータシェアリングから進んで無いと思うよ、その辺りは。
>>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
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"とかでググッてやると出てきそうでもありますけど
>>807 "java.sql.PreparedStatement"をカテゴリ名に使うのはかなり紛らわしいので
オススメしかねるとはいえ、設定はよさそうに見えるけど。
ログ出力する部分のコードはどうなってる?
>>811 わからないなら、あまりトンチンカンな答えをしない方がいい。
質問者は、iBatisとはあまり関係のない問題で詰まっているから。
「判らないですが」「出てきそうでもありますけど」と断言していないから・・・
と思うのかも知れんが、
聞く方は必死なので"iBatis log4j"で一生懸命ぐぐったりしてしまう。
混乱させてしまうよ。
813 :
808 :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が意味するところは
やっている処理との繋がりはよく解らなかったりしますけどね
(それとは別に数の並びから最小値/最大値を求めたいということなのか…)
はじめましてjava初心者です 今研究でjavaを勉強しているのですが 「スプライン関数、ベジェ曲線を使ってフォント生成」 をやろうとしているのですが、どうやれば良いのかよく分からない状態です。 何か参考になるようなソースなどはあるのでしょうか?? 意味不明な質問して申し訳ないです・・・
>>816 スプライン関数、ベジェ曲線から分からないのだとすると
恐らく研究レベルではないので宿題スレ行きですが・・・・
グリフの生成ではなくて、フォントを生成するということは
フォントの自動生成のような研究ってこと?
スプライン関数とかベジェ曲線の実装ソースはググればいくらでも出てくるから
わざわざ書かないけど、フォントの自動生成とかはどんな研究なのか気になる・・・
まあ研究骨格部分だとしたらロジックは転がってないだろうからその部分は真面目に
Java勉強して実装するしかないんだろうね・・・
現在RSSリーダーをSAXを使って作っているのですが、
sunで公開してるATOMがうまく解析できません。
解析できない箇所は、「[コミュニティ] Sun&Users ...」のように、
ノード内に "]" がある箇所です。
これがあると、オーバーライドしたcharacters()メソッドには、
1. [コミュニティ
2. ]
3. Sun&Users ...
と、3回に分かれて入ってきます。
こうなる以上はこれに対応するしかないのですが、
XMLでは、"]" とか "[" に特別な意味があるのでしょうか?
他にも影響があるかもしれないので、
もし特別な意味があるのであれば教えて下さい。
sunのATOM
http://jp.sun.com/whatsnew/atom10.xml
>>818 「]]>」に特別な意味があるので、そのチェックのために分割されてし
まうんだろう。characters()がどこで切れるかはパーザの裁量なので、
特別かどうか気にしてもまったく意味ない。
改行とか、実体参照とか、文字参照でも切れると思うよ。内部のバッファ
のサイズでも切れるかもしれない。
>>817 さん
レスありがとうございます。
当初はフォント自動生成のソフトを作成する目的だったのですが、
javaを全く知らない状態からだったので指向を変えて今は
スプライン関数、ベジェ曲線を使って、例えば「あ」とか「a」といった文字を
表現しようと取り組んでいます。
本当は1からプログラム作成したいと考えていたのですが、現段階では勉強足らずでできなさそう
なので817さんのおっしゃる通りソースをググるなりしてがんばっていきたいと思います。
2,3月までに自動生成ソフトをを作れるようにもっとjavaを勉強したいと思います。
無理かもしれませんが・・・^^;
元フォントがあればアウトライン化は可能だけど もっと根本的な部分の骨格なんかを定義して、そこから生成とかだと難しそう。 興味あるけど。 スプラインとかベジェなんかは、あまりにボリュームが大きすぎるから 頑張って勉強しるとしか言えない。
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; } としてもどうにも動きませんでした。 よろしければご教授くださいませ。
>>823 OSは何で、プログラムを実行したときにどうやって入力してる?
826 :
818 :2006/11/17(金) 13:26:13
>>823 "" は null ではない。
あとString の比較には .equlals()を使うべじ。
equlals()
829 :
823 :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;
}
>>829 A. 何も入力しないでEnterしたら入力終りにしたい
B. 入力がEOFになったら入力終りにしたい
どっち? プログラムはBになってる。
Aにしたかったら、
while ((tmp = input.readLine()) != null) {
if (tmp.length() == 0) // Enterのみ入力の場合は
break;
str = str + tmp;
}
とする。
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);
833 :
832 :2006/11/17(金) 21:46:23
もうひとつききたいことあがります。 引数にクラスの名前を取ってそのインスタンスを生成する方法てありますか? 例えばクラス TMがあって java TM RU っていう風に引数にRUっていうクラスの名前を取ると、RUのインスタンスを 生成するようにこれではダメなんですねよね。コンパイルが通りませんでした arg[0] tt = new arg[0]; で引数にとったクラスのインスタンスが生成できるかな?っ手思ったんですが できませんでした。
>>833 Object tt = Class.forName(argv[0]).newInstance();
835 :
832 :2006/11/17(金) 22:05:09
>834 ありがとう!!
836 :
829 :2006/11/17(金) 23:22:05
>>830 レスありがとうございます。
Aの方でした。
EOFとは文章の最後につく奴ですよね?
あまりくわしくわかりませんが…。
おかげさまで無事に成功いたしました。
本当にありがとうございます。
End Of File
838 :
ぴゅあ :2006/11/18(土) 00:05:00
>>836 >EOFとは文章の最後につく奴ですよね?
必ずしも付くとは限らないけど
この場合は入力が終わることを示すために入力する(
>>837 の意)
(因みにAPIリファレンスでは「ストリームの終わりに達している」
という表現を使ってますよね)
たぶんもう解決できたのだろうと思うけど
敢えて付け加えておくなら
>>823 や
>>829 のwhile(true)の行の次の
tmp = "";やtmp = null;は忘れていいから
その次の行で何やってる?
その上で続くtmpの扱いを考えればよかったと思う
>>804 会社のイメージを高めたいなら、
ウェブデザイナを雇う物だが
>>826 XMLエンティティでエスケープしたほうがいいぜ
>>816 って最近流行の「この数字は人間しか認識できません」のアレ作るのか?w
>>816 JFreeChartの間違いだった。
>>840 は。
あとはGNU PlotのJava版で作図
>>842 なんだそれは?
最近流行?
非連続関数や非線形システムとかのことを言ってるのか?
積分できない関数とか
Hotmailとかの登録のときに添えさせる例のキーワード用の画像のこと
あれか。 ベジェ曲線とどう関係があるんだろう。 あの画像、やりようによっては、コンピュータにも 認識させることは不可能ではなかったりして。 瞬時に認識することができないだけで 長い時間をかけるとコンピュータに認識させることは可能だったり。 あああれか。ユーザ登録時には、セッションが切れると また違う画像が現れるので長い時間をかけることは不可能か
java.util以下のCalendar;またはDATE;はどうやって使えばよろしいですか? またこちらのクラスライブラリを使用して現在の月日、時刻を得る事は可能でしょうか?
>>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()
);
すみません教えて下さい。 Java の GUI クラスでインジケーターが無いか探してみたんですが分かりませんでした。 もし無かった場合、皆さんはどうやって実現しているんですか? よろしくお願いします。<m(__)m>
>>849 JLabelでIconを表示するとかでいいんじゃね?
状況に応じてsetIconで切り替えるなりして。
>>850 それはインジケーターの各パーセントでの画像を用意して、処理の進行状況に応じてそれを切り替えるという事でしょうか?
なるほど。■い文字を追加するよりも見た目がずっと奇麗になりそうです。ありがとうございます。
ところで実際の Windows アプリなんかも同じ方法なんでしょうかね?
いろいろなやり方に興味があります。
>>851 インジケータってそういうのを求めてたのね。
単純なLEDインジケータみたいなのを考えていた。
進行状況表示に使うならJProgressBarを使えばいいと思う。
>>852 進捗バーというのがあったんですね!これがあったのなら他の方法を考える余地なんてありませんね。
しかしいろいろぐぐったりもしたのに分からなかったなんて・・・探し方も勉強しておきます。
本当にありがとうございました!<m(__)m>
854 :
ぴゅあ :2006/11/18(土) 10:53:20
すみません。しょうもないことなんですが、 {は行の末尾に付けるべきでしょうか、 それとも一段下げた行頭に付けるべきでしょうか。 個人的には一段下げた行頭の方がインデントがはっきりして分かりやすいと思うのですが…。 でもコードが無闇に長くなると言われれば、そんな気もするのです
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()なんて存在しないものでは?
存在しないものが何かをすることができるわけもないし。。。
コンパイルができるできないかの前に
もう一度よく考えてコードを書いてみることでしょう
>>856 iterator() メソッドは小文字。
あと
System.out.println(it.hasNext());
も本来やろうとしてることとは違うはず。
>>855 職場のコーディング規約に従うべき。
特に決められてないなら、好きにしろ。
>>855 Javaでは末尾に付けるのが多数派かな、現場かわっていくにつれ指摘されるかもしらんぞ
そういった意味では末尾に付けた方が無難だな
>>848 凄く助かりましたありがとうございます。
まだ試していませんがとても丁寧にありがとうございます。
863 :
チャン :2006/11/18(土) 14:36:45
>>859 コンパイルできました。
>System.out.println(it.hasNext());
も本来やろうとしてることとは違うはず。
とはどういうことでしょう??
値を一個ずつ取り出して表示したかったんじゃないかと思って。 やりたかったのはコレ↓じゃねーかと。 System.out.println((String) it.next()); 違うならそれで良いんだ。
865 :
デフォルトの名無しさん :2006/11/18(土) 15:43:59
コレクションって結構使うもんなんですか? イマイチ、本読んでもイメージが沸かないというか・・・。 仕事で使って覚えていくしかないのかね~。
866 :
デフォルトの名無しさん :2006/11/18(土) 16:02:41
独習JavaとJava逆引きを読んだ後での おすすめの本は何かありますか?? 基本をおさえつつ、チョッとレベルアップなのを探しています
867 :
855 :2006/11/18(土) 16:28:17
>>857 ,860
やはり個人で使うのであれば好みで良いですよね。
ありがとうございました。
数 字 。
869 :
デフォルトの名無しさん :2006/11/18(土) 16:35:22
javaでポップアップメニューを出したのですが、 body部分の表のしたに隠れてしまってみえないのです。 どうすれば、表の上にポップアップが来るのか教えてください
>>855 if文をコメントアウトしたい時
//if(a = 0)
{
a = -1;
・・・
}
ならコンパイル通るけど
//if(a = 0){
a = -1;
・・・
}
これだと通らない
だから俺は上を勧める
if(a = 0)なら元々意味ねぇーだろ
いあいあ、例だから 文に意味は無いよ
873 :
816 :2006/11/18(土) 17:27:49
レスありがとうございます。
>>842 さん
いえ、自分にはそんな難しいのはできません^^;
ただ研究?を通してjavaを学びたいと思っています。
>>843 さん
JFreeChartですか?これはクラスか何かですか?
GNU PlotのJava版で作図というのは・・・?
すいません。。やはりまだ全然理解が足りていないようです。
勉強して出直してきます(T__T)
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
>>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);
}
>>873 JFreeChartもgnuplotもグラフを作図するためのものなので、
図を描きたいときには便利だが、
816のやりたいフォントの生成に直接には役に立たなさそう。
生成したベジェ曲線等のデータを簡単に描画したいという時には、
作図ソフトやライブラリやフレームワークを利用したほうが、
一から自分でプログラムを書くよりは楽かもしれないけれど。
>>876 これって、GUI画面でポップアップって意味でなかったのか・・・
宿題スレから追い出した者です。迷惑かけてすみませんでした。
879 :
875 :2006/11/18(土) 19:23:44
最後に scanner.close(); で閉じてね
880 :
816 :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の続きです
>>881 上に乗っかっているものを全部除ければ見えるようになるよきっと
885 :
ぴゅあ :2006/11/18(土) 21:34:34
>>881 >ボタンをクリックすると線が引かれる
とはどういうコードで実現されているのでしょうか
また
>paintComponent(Graphics g)
はどのオブジェクトに対して処理しようとしている(するつもり)でしょうか
(
>>881 ~
>>882 の間に抜けているコードとかもあるのかな?)
>>864 突っ込むなら勉強してからにしないと恥かくぞ。
すみません随分以前に知人から譲ってもらったexcel(micro office 2003)について伺いたいのですが
アイコンをクリックしても起動しません
http://ranobe.com/up/src/up150508.zip (excelファイル)
自分で色々調べてみたのですが原因が分かりません
問題を解決するためにみなさんのお力を貸してくださいどうかよろしく御願いします
888 :
881 :2006/11/18(土) 22:43:09
そうたぶん乗っかっているから線が引かれないと思います。 どのオブジェクト? パネルp1上で線をひきたいです。ボタンとかあるそのパネル上で 線を引きたい
javaでデーモンとして動作するような常駐プログラムを作りたいんですが、 参考となるソースやサンプルご存知ないですか?
>>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
>>889 デーモンの起動や管理はOS依存なので、Java側で特別気をつけるところはない。
ユーザインタフェース無しで、出力はログのみのプログラムにするくらい。
あとは、作ったプログラムを起動する方法だけど、Windowsならバッチファイル作ってタスクに登録か、
Linuxならcronか。
>>890 Thread#setDaemon()はデーモンスレッドを作成するために使うメソッドで、
デーモンプロセスを作るメソッドじゃない。よく知らないならレスしない方がいいよ。
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なんかやっても、何も始まらないぞ! 俺達のように夢を掴め!
誰?
897 :
デフォルトの名無しさん :2006/11/19(日) 10:44:07
898 :
↑ :2006/11/19(日) 11:03:03
899 :
デフォルトの名無しさん :2006/11/19(日) 12:39:36
すっごく基本的なことなんですが JAVAアプレットって何の役に立つのでしょう DBにアクセスできないって書いてあるし ゲーム専用ですか?
900 :
↑ :2006/11/19(日) 13:11:34
ライブカメラ
901 :
881 :2006/11/19(日) 13:19:22
891 892 ありがとう、教えてもらったURLのサンプル参考にして 最初から作ったら思い通りになりました!!! ありがとう!!
902 :
デフォルトの名無しさん :2006/11/19(日) 13:45:28
Javaでエクセルのファイルを開いてセルの内容を取得することはできますか??
903 :
デフォルトの名無しさん :2006/11/19(日) 14:05:44
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
908 :
905 :2006/11/19(日) 15:05:59
キャスト? int i=0; Object tt = Class.forName("prob"+i).newInstance(); (Object)tt.get(); みたいにキャストするってこと?コンパイルが通らないです
>>908 キャストではできない。キャストする型はコンパイル時に決まっている必要がある。
リフレクション使うか、それよりもスマートなのは、
probX型に共通するメソッドgetTX()を持つインタフェースを定義して、その型にキャストする。
>>905-906 >>908 Prob0, Prob1, ... に共通の親クラスかinterface Prob を用意しておく。
その上で
Object tt = (Prob)Class.forName("Prob" + i).newInstance();
すりゃいいいだろって話だろ。あ、
>>909 と被った。
>>910 Prob tt = (Prob)Class.forName("Prob" + i).newInstance();
じゃね?
912 :
905 :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アドレスに繋げるためにはこれをどう変えたらいいんですか?
教えてあげないよ、じゃん♪
分からないなら分からないと素直に言ってくださいよ
916 :
905 :2006/11/19(日) 15:43:39
>909、910、911ありがとう!!インターフェースやったら できた!!ありがとう!!
917 :
905 :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を実装しろといってきます。実装しているのに なんでまた実装しろと言われるのかわかりません。
知るかボケ
919 :
デフォルトの名無しさん :2006/11/19(日) 15:58:24
>>917 純粋仮想関数の返り値の型が
voidとintだから別の型だって判断されているんじゃないの?
920 :
905 :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に注目して考えてみるのがいいのかも
922 :
905 :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にキャストしているという点だけでなくて)扱い方間違ってない?
>>922 public interface Prob{
int getTX(); // int 重要
}
925 :
デフォルトの名無しさん :2006/11/19(日) 16:31:35
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
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が、どういう処理、また意味があるのか分かりません。
>>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 他で質問したものに付いてるレスは参考になってない?
>>932 catchしたあとそのまま先に進んでるね
935 :
905 :2006/11/19(日) 20:23:28
サンクス!!ありがとう
936 :
デフォルトの名無しさん :2006/11/19(日) 21:14:23
BuffereImageにした画像を AffineTransformのrotateで傾けた後 JFrameに表示させたんですが, その傾けた後の画像を もう一度BuffredImageとする方法が分かりません どのようにしたらいいでしょうか?
自己レス 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
c++でいうインタフェースのことだ
940 :
デフォルトの名無しさん :2006/11/20(月) 00:05:47
あのー とりあえずはじめてのジャバ読み終わりました で・・・次になんかDBにアクセスしてデータいじるPG 勉強したいのですが・・・ ジャバアプリケーション勉強すればいいのでしょうか それともサーブレット+JSPやればいいのでしょうか なんか世の中の流行で行くと後者みたいですが そもそもアプリケーションはマイナー(過去の遺物)なのでしょうか 教えてください先輩方
>>937 傾けた後の画像のサイズ分だけ拡げたものを最初から用意すればいいんじゃないか?
>>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もな
>>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
そこは宿題にしてみます
ちょっと教えて下さい。 Class A と Class B を作って A のメインクラスで B のオブジェクトを利用します。 それでしばらく使っていたんですが、ある時ふと、B のオブジェクトから A 非 static なメソッドを利用したいと思って、 そこで B のクラス内で A のオブジェクトを作るコードを書いて実行してみました。 実は実行するまでこのアプリは無限にオブジェクトをループで作り続けて実行できないと思っていたのですが、 実際は何も問題無くできたんです。 さて、どうして無限にオブジェクトができなかったんだろう?って疑問に思ったんですが、実際プログラムはどんな参照をして 動いていたんでしょうか。 お馬鹿な質問ですがよろしくお願いします。
>>951 B のクラス内で A のオブジェクトを作ったからといって
A のメインクラスが実行されるわけではないから。
つまり、Bのクラス内で A のオブジェクトを作っただけ
なら、そのとき作られた A のオブジェクトの中で、「新
たに B のオブジェクトを作るロジック」が動作するわけ
ではない。
>>952 ありがとうございます。
でも、どうして新たに B のオブジェクトを作ろうとしないのでしょうか。
A のクラス内には B b = new B(); が実行されているのに不思議だと思います。
勉強が足りなくてすみません。
954 :
デフォルトの名無しさん :2006/11/20(月) 11:34:08
じゃあ足りるまで勉強して来い
>>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
>>957-958 ぴゅあさんありがとうございます。
B のオブジェクトが A のオブジェクトを作ったときに、作られた A のオブジェクトが B のオブジェクトを
作るコードの所を通っているかどうかを確認しなさいって事ですね。
今から暇を見て確認してみます。
それよりも、相互に作り続ける簡単なコードを書いてもいいかもですのでやってみます。
962 :
961 :2006/11/20(月) 15:05:52
963 :
961 :2006/11/20(月) 15:41:30
無駄にスレを消化する馬鹿だと人に言われるかもしれませんが実験してみました。
結果、StackOverflowError が発生して処理がストップしました。
少しずつ
>>952 さんの説明が理解できて来ました。ありがとうございます。
当り前な事でも馬鹿な実験でもしないと理解できない飲み込みの悪い新人でした。
お邪魔しました。
昨日から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で宣言できないのでしょうか?
>>964 2.0という値の型がdoubleだから。
2.0f と書くとfloatの定数になる。
>>965 すいません。理解できません。
本には、floatとdoubleの違いは、扱える桁数にある、と書かれていたのですが…
それ以外にも違いがあるということでしょうか?
>>966 double から float への変換は、精度が悪くなる変換なので
キャストしないとコンパイル時に怒られる。
float から float なら問題ないけど。
968 :
ぴゅあ :2006/11/20(月) 16:22:55
なんだろ?
>>963 >当り前な事でも
誰が当たり前と決めたのか知らないけど
どんな些細なことでも実際にやってみることが大切だと思いますけどね
>>967 せっかく答えて頂いたのに、私の理解力が追いついていません。
とりあえず、入門書を一通り読んでから、また来ます。
ありがとうございました。
>>966 2.0 と書いただけだと double になるのよ。だから内部的には2進数で
0100000000000000000000000000000000000000000000000000000000000000
として保持される。64ビットを使って表現してるわけですよ。さてここで
あえて float だと指定してすると(※ 2.0f と書く(
>>965 を参照))今度は
01000000000000000000000000000000
というように32ビットの表現になるわけですよ。扱える桁数が違うとか、
数値の精度が違うというのは、こういうことです。
>>964 >>966 >>969 は、わかりましたか?
971 :
970 :2006/11/20(月) 17:20:42
>>969 float と double の違いは、扱える桁数にある
⇒ 桁数が多いほうから少ないほうへ不用意に変換すると、値が変わってしまうことがある
⇒ もしプログラマ側が意図していない変換だとバグの元になる (実際この手のバグでロケットが墜落している)
⇒ コンパイラが親切にも警告を出してくれる
OK?
みなさん。
ちょっと解かったかもしれません。
つまり、
>>964 でコンパイル出来るということは、32ビットで作業しているから。
本の作者は32ビットの環境でコンパイルしていたって事でしょうか?
Java のバージョンの問題?
OSの違い?
精度や桁数がどうとかいう問題の前に、 ある型の変数に異なる型の値は入れられない、 というのを理解しているんだろーか。
javaのバージョン (かな? コンパイラでバージョンアップと共にワーニングが厳しくなるのはよくある事) もしくは本のバグ
>>973 32bit の環境でコンパイルしたとか、OS が違うとかは考えにくい
java もしくは javac のバージョンが違うというのは、まあよくあること
最も多いのは、本の誤植もしくはバグ
>>974 それは大丈夫だと思います。
int に 2.0 は入れられないということですよね。
int a;
a=2;
としなければいけないのは解かります。
2.0 は double で、2.0f とすれば float ということですね。
本のバージョンは 1.4.1_01 で 私のバージョンは 1.5.0_09 でした。 Java のバージョン違いが原因? とにかく、2.0 だと double になるというのが解かったので、本の float を double に置き換えながら、読み進めたいと思います。
>>979 世界でいちばん簡単な
Java の e 本
Java の基本と考え方がわかる本
2003年6月1日 第1版第1刷発行
著者 堀江 幸生
発行 株式会社秀和システム
ISBN4-7980-0533-9 C3055
です。
>>980 うーん、改訂入ってるんじゃないかな・・・
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: 精度が落ちている可能性"とか出ているだろうところを
落としてしまっているところにも理解に至れない問題があったりするのかも?
>>984 >>964 のコードは、本に書かれていた通りのものです。
float と double の違いについては殆ど触れられておらず、悩んだ挙句にここへ質問に来たわけです。
さっき、書店によって、他の本を見てきたところ、
「 float a=1.0f; 」と、数値の後に f をつける必要があるので注意と、ちゃんと書かれていました。
どうも、私の買った本に誤植があったということみたいです。
いろいろ教えてもらって、本当にありがとうございます。
こんなに親切なスレは初めてです。
javaでwindowsのguiアプリって作れますか?
applet
>>988 HTML ファイルのソースをよく見ろよw
アプレットにパラメータ与えられることを初めて知った俺うんこ
これで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){ } }
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);} } }
今日から始めた初心者です。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'´、ヽ `´ヽノ
>>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'´、ヽ `´ヽノ
うふふ さいごのしょうしゃはかなりあかしらかしら~
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。