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

1デフォルトの名無しさん
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
 【初心者】Java質問・相談スレッド119【歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1220388885/
次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
2デフォルトの名無しさん:2008/10/10(金) 10:56:15
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
ttp://pc11.2ch.net/test/read.cgi/tech/1204155623/l50
■ SWT は --
Java 高速GUI SWT 3
ttp://pc11.2ch.net/test/read.cgi/tech/1164877399/l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part18
ttp://pc11.2ch.net/test/read.cgi/tech/1214192372/l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 8
ttp://pc11.2ch.net/test/read.cgi/tech/1206017034/l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 65 ★★
ttp://pc11.2ch.net/test/read.cgi/tech/1212085079/l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/index.html
■ J2SE 5.0 (1.5.0)
ttp://java.sun.com/j2se/1.5.0/ja/
■ Java SE 6
ttp://java.sun.com/javase/ja/6/

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
ttp://www.java.com/ja/
3デフォルトの名無しさん:2008/10/10(金) 17:15:42
ttp://www.trendflexsecurity.jp/security_solutions/housecall_free_scan.php#
でウイルススキャンを開始しようとすると

致命的エラー
「同じプロセスで実行中のjava仮想マシンによってエラーが発生」
と出て先に進みません

原因はなんでしょうか?
よろしくお願いします
4デフォルトの名無しさん:2008/10/10(金) 17:29:28
数字とカンマのcsvをBufferedWriter.write(String)で書き込んでいって、
RandomAccessFileで読み取りモードで開き、seek(0)して、readChar()しても、読み取り値が?になってしまいます。
どうしたらいいのでしょうか?
5デフォルトの名無しさん:2008/10/10(金) 17:51:53
プログラムの中で整数nを用いた物を書いてあって、そのnをjavaコマンドラインで指定することは可能ですか?
nを指定して出来た結果をファイルに保存したいのですが全くわかりません。
どのように書けばよいのでしょうか?
6デフォルトの名無しさん:2008/10/10(金) 18:10:20
mainメソッドの引数。
7デフォルトの名無しさん:2008/10/10(金) 18:38:01
前スレ >>955
私もつい最近それで困っていた。
今でも原因は不明だけど、(image.getType()がBufferedImage.TYPE_BYTE_GRAYの時に起きる)
RasterにgetPixelすれば正常な色が取得できると思う。

BufferedImage image = ImageIO.read(bmpFile);
Raster raster = image.getData();
int[] color = new int[4];

raster.getPixel(x,y,color);
(byte)color[0];で正常な色。
8デフォルトの名無しさん:2008/10/10(金) 22:49:53
前スレ955です。

>>7
おお、助かります。
TYPE_BYTE_GRAY の時だけ処理を変えることで対応してみます。
ありがとうございました。
9デフォルトの名無しさん:2008/10/11(土) 00:00:45
Windowsでiアプリ開発をおこないたいと考え、NetBeans6.0.1とdoja5.1をインストールしました。
簡単なプログラムでテストしようとすると、次のようなエラーが出ます(一部)。

Error loading class Files\iDKDoja5.1\lib\classes.zip;C:\Program
Error loading class Files\iDKDoja5.1\lib\doja_classes.zip

dojaのインスコ先をもとにNetBeansが自動生成するdoja.propertiesでのパスの設定は以下(一部)
doja.home=C\:\\Program Files\\iDKDoja5.1
doja.classpath=${doja.home}/lib/classes.zip;${doja.home}/lib/doja_classes.zip

要するにWindowsのパスに含まれる空白文字(Program Files)が正しく解釈されない様子。
c:/iDLDoja5.1にインストールしなおしたところ、うまくいきました。

パス中の空白文字って他のケースでも問題になるんじゃないかと思うのですが、
プロパティファイルで空白文字をエスケープするなど、一般に回避方法はあるでしょうか?
10デフォルトの名無しさん:2008/10/11(土) 00:12:28
Javaでデスクトップフォルダを取得するライブラリはありますか?
ホームディレクトリから辿っていく方法だと確実性はありませんし、
主要OS分をサポートしたライブラリを探しています。
11デフォルトの名無しさん:2008/10/11(土) 00:19:07
FileSystemView.getFileSystemView().getHomeDirectory()
12デフォルトの名無しさん:2008/10/11(土) 00:27:18
>>11
レス、ありがとうございます。
user.homeとgetHomeDirectoryは返す値が違っていたのですね。
13デフォルトの名無しさん:2008/10/11(土) 03:12:23
経験半年ぐらいのレベルってどれぐらいの知識で
どういうことをするんですか?
14デフォルトの名無しさん:2008/10/11(土) 08:28:07
>>13
レベル10くらいでアリアハン脱出するくらい
15デフォルトの名無しさん:2008/10/11(土) 09:01:36
レーベの町でレベル32ぐらいまで上げた記憶がある。
16デフォルトの名無しさん:2008/10/11(土) 10:04:53
phpで作ったアプリなら鯖とめなくてもファイルコピーで更新できるけど
Javaサーブレットだととめないといけないの?
なんかあれだよね
17デフォルトの名無しさん:2008/10/11(土) 11:30:03
半年の知識:
使ってるライブラリの仕様はよく分からんが、
用意されているクラスを使って、とりあえず業務ロジックは書ける。
しかしコード品質が悪く、レビュー者を内心いらつかせる。

Effective Javaやデザパタ本を読ませたくなる頃かな。
18デフォルトの名無しさん:2008/10/11(土) 11:34:56
>>16
正しくは止めなきゃいけないものもあれば、止めなくてもいいものもある。
使ってるフレームワークにもよるが、
基本的にページクラス/テンプレートは止めなくていい。

MVCの中を動き回るようなクラスなら、
むしろ止めてくれないとバグを残すので困る
デバッガで見えてる値がいつの頃の値が見誤るからね。
19デフォルトの名無しさん:2008/10/11(土) 12:13:05
デザインパターン使ったことないな
何か良いことあるの?
20デフォルトの名無しさん:2008/10/11(土) 12:27:14
デザパタのいいとこ。
・ソースコードの読み方がある程度画一的になり、他人が見たとき悩まない(パターンによる恩恵)
・クラスの役割が明確になり、概念や制約、実装を分けて管理できる(鉄板による恩恵)
・上記の恩恵のため、設計に時間を掛けられない時に悲惨なミスをせずに済む(リスク制御の恩恵)
21デフォルトの名無しさん:2008/10/11(土) 12:29:04
おお、サンクス
22デフォルトの名無しさん:2008/10/11(土) 17:40:52
「例外をスローするときのメッセージやコメント文は英語で書いてくれ」と指示されたのですが英語が苦手過ぎます…
そこで英語のテンプレみたいなのがそろっているサイトなどを知りたいのですがご存知ないでしょうか?

throw new FooException("I can NOT speak English !");
23デフォルトの名無しさん:2008/10/11(土) 17:50:22
名詞+(not/cannot)+動詞
もしくは 形容詞+名詞
file not exist
file cannot open
bad filename
例外メッセージなんかこれだけでいいんじゃね?
24デフォルトの名無しさん:2008/10/11(土) 18:40:16
例外メッセージなんて直訳英語で十分通じる。
25デフォルトの名無しさん:2008/10/11(土) 19:49:38
>>4に答えられる人っていないの?
26デフォルトの名無しさん:2008/10/11(土) 20:39:04
>>26
いるよ。
ヒントは2バイト。下位のバイトが最初ね。
27デフォルトの名無しさん:2008/10/11(土) 20:43:39
>>25
RandomAccessFile#readChar() は UTF-16BE で読み込む。

BufferedWriter の基礎となる Writer の出力エンコーディングが何か知らんが
それが UTF-16BE でなければ化けて当然。
28デフォルトの名無しさん:2008/10/11(土) 23:08:26
%%
Name
Address
Phone
%%
Name
Address
Phone
%%
Name
Address
Phone

のように、特定の文字列 (ここでは%%) のみの文字列で区切れているデータファイルをプログラムから読み込んで処理したいのですが、
Buffered
29デフォルトの名無しさん:2008/10/11(土) 23:10:53
アプレットで複数個の描画をしたいのですがうまくいきません。
g1とg2に分けるには
public void paint(Graphics g1,g2)
としたらいけないのでしょうか。
30デフォルトの名無しさん:2008/10/11(土) 23:11:57
すいません。質問の途中で送ってしまいました。

うまく全体を読み込んで各データを別個にするのに何かうまい方法はありますか?
今は、とにかくreadLineで全部読み込んでから、分けてるのですがどうも効率悪いような気がして…。

Perlの、$/を書き換えるみたいに、入力レコードのセパレータを、\nから%%にすることが出来たらいいのですが。
Javaならではのやり方みたいのがあったら教えてください。
31デフォルトの名無しさん:2008/10/11(土) 23:31:01
>>30
その例を見る限り4行ずつ読んでいけば良いように見えるけど。
32デフォルトの名無しさん:2008/10/11(土) 23:42:15
java.util.regex.Pattern

java.util.regex.Matcher
使って正規表現で取れば?
コードはすっきりするかも決して速いとはいえないけど。
3325:2008/10/12(日) 00:04:27
>>26 >>27
ファイルは、メモ帳やエクセルで普通に開ける、.csvのテキストファイルなんですよ。
なんで、Shift_JISだと思うんですけど、

File csvFile = new File(aaaa.csv);
BufferedWriter bw =
new BufferedWriter(new FileWriter(csvFile, false));

bw.write("0,1,2,3,4");

としてかきこんだファイルなんですけど、どうやって読み取ったらいいですかね?


34デフォルトの名無しさん:2008/10/12(日) 00:30:12
>>32
そういうことはソースを見て言ってるんでしょうね?正規表現は速いですよ。
35デフォルトの名無しさん:2008/10/12(日) 01:00:09
Java と、“正規表現が得意”なスクリプト Perl、
どっちが早いんだろうかw
36デフォルトの名無しさん:2008/10/12(日) 01:42:37
Javaの正規表現は最適化までしてくれるわけじゃないよ。

\\d*をcompileするより、Character.isDigitを回した方が5倍速い。
Matcherの生成コストをベンチマークの対象から外しても
Character.isDigitを回した方が3倍速い。
37デフォルトの名無しさん:2008/10/12(日) 01:48:59
おまえの言う3倍とか5倍は具体的に何秒速くなるんだ?
何か言いたいなら、まずは実測してから言えよw
38デフォルトの名無しさん:2008/10/12(日) 01:52:40
perlのこと知らないんだけど、perlは正規表現の最適化をしてくれるの?
39デフォルトの名無しさん:2008/10/12(日) 01:55:22
>>37
ベンチマークってのはマシンスペックを書かない場合は比率で表現するもんだ。
40デフォルトの名無しさん:2008/10/12(日) 01:56:02
>>36
isDigit()で済むようなメソッドなら、なにも\\d*とかregexなど使わんな。
おまえ、何倍速いとか寝言みたいな旧世代なこといってるけど、そもそも正規表現ってのをイマイチ勘違いしてないか?
それと速さ気にするような鼻糞野郎なら、\\d*でいいんだし、isDigti()なんかより '0' <= ch <= '9' の不等式をつかうだろ。

おまえはプロでも職人でもない糞ガキ以下だなww
というか突っ込みどころ多すぎでワロタw
41デフォルトの名無しさん:2008/10/12(日) 01:58:36
頭が悪すぎ。最適化してるかしてないかの話で何を言ってるんだ。
42デフォルトの名無しさん:2008/10/12(日) 01:58:49
みのもんだ
43デフォルトの名無しさん:2008/10/12(日) 02:06:14
てか>>40はreadingもwritingも出来てないな。
44デフォルトの名無しさん:2008/10/12(日) 02:19:13
isDegit() なんてので比較して、さらに「3倍」「5倍」なんていわれても何の役にもたたんな。

やるなら
マシンスペック、JVMバージョン、起動オプション
検索対象の文字列、検索文字列(数種類)、ソースコード
とか出してやってくれよ。

でも面倒だから誰もやらない罠
45デフォルトの名無しさん:2008/10/12(日) 02:22:34
>>38
しまくり
46デフォルトの名無しさん:2008/10/12(日) 02:22:51
正規表現の遅さを気にしてるのはむしろお前の方だろ。
47デフォルトの名無しさん:2008/10/12(日) 02:26:48
私は・・・・みのもんだに「5倍」!さらに倍!!
48デフォルトの名無しさん:2008/10/12(日) 02:30:57
>>44-46
日曜のこんな夜なのに、おまえらそんなに鼻の穴開いてよっぽどヒマなんだなww
おれは残業。。。「倍」さらに「倍」!ドン!!
49デフォルトの名無しさん:2008/10/12(日) 02:30:59
速度的に問題が出ていないのなら、そこからさらに弄る必要はないかと思う
まあ、やるとすればReaderの自作か
速くはなりそうだが、十分に効果が出るかは自信がない
50デフォルトの名無しさん:2008/10/12(日) 02:35:27
鼻糞野郎は早くオナニーしろってwこったなww
51デフォルトの名無しさん:2008/10/12(日) 03:03:28
>>29
複数個の描画とかg1とg2に分けるってのがよくわからんけど、それはできない。
複数のキャラクタにアニメさせたいならキャラ(や小道具など)の全てに
Graphicsを引数に持つ共通のメソッド(interfaceを使っとこう)を持たせて、
ループ文使ってキャラクタ自身に描画させるといいよ。
52デフォルトの名無しさん:2008/10/12(日) 03:12:55
>>45
しまりまくってんですねw
53猫2:2008/10/12(日) 03:53:53
さあこれから運ゲーだな
54デフォルトの名無しさん:2008/10/12(日) 03:54:38
誤爆すまん
55デフォルトの名無しさん:2008/10/12(日) 04:50:54
Javaってはっきりいってつかえねーなwww

これほどPCに有用性のない言語が今までにあったか?これからもないだろう。
56デフォルトの名無しさん:2008/10/12(日) 05:50:53
「PCに有用性がある」って何だよw
57デフォルトの名無しさん:2008/10/12(日) 07:17:22
>>33
BufferedReader で読めば良いんじゃ?
58デフォルトの名無しさん:2008/10/12(日) 10:46:24
木構造をイメージしてプログラム書いてます。
ノードクラスには、
ノード型の子ノードを定義してます。
条件によって親に対する子ノードの数を1個増やしたいのですが。

最終的な親に対する子の数は不定として、子を増やすことは可能ですかね??

デフォルトでは2つの子ノードを持ってます
59デフォルトの名無しさん:2008/10/12(日) 10:48:02
JSFで画面間でデータをやり取りするのにSessionBeanにプロパティーを
設定して行っていますが、プロパティーの数が多くなりすぎるとぐちゃ
ぐちゃになって判りづらいのと設定からアクセスまでの流れがめんどい
ので何とかならないでしょうか。普通にクラスのメソッドを呼び出すように、
型 変数 = 画面名.メソッド名(型 変数)
みたいに出来れば楽なんですけど。
60デフォルトの名無しさん:2008/10/12(日) 11:35:45
>>58
どんなコード書いてんだか知らんが、例えばファイルシステムがどうなってんのか考えてみ?
61デフォルトの名無しさん:2008/10/12(日) 13:57:49
なぁにが、考えてみ?だ
62デフォルトの名無しさん:2008/10/12(日) 14:00:12
考えても?
63デフォルトの名無しさん:2008/10/12(日) 14:01:02
プログラム板の奴って時折ファビョるから困る
64デフォルトの名無しさん:2008/10/12(日) 14:08:25
>>57
RandomAccessFileで一部の読み書きをしたいんです・・・・
65デフォルトの名無しさん:2008/10/12(日) 14:12:55
>>61
またまた糞食べちゃったんですかw
66デフォルトの名無しさん:2008/10/12(日) 14:20:33
>>64
RandomAccessFileにこだわる意味がよく分からないんだけど、
そのファイルってそんなにサイズがでかいの?メモリに読んじゃえよ。
例えば1000レス行った2chスレを読み込んでも1MB行かないと思うぞ。
67デフォルトの名無しさん:2008/10/12(日) 16:00:35
>>64
あくまでもRandomAccessFile#getChar()にこだわるならUTF-16BEで読み書きすればいい。
68デフォルトの名無しさん:2008/10/12(日) 16:46:25
>>58お願いします
69デフォルトの名無しさん:2008/10/12(日) 17:01:25
private List<Node> children = new ArrayList<Node>(2);
これで要素数0、初期容量2の可変長リストが出来る。
要素数が少ないならLinkedListより実行時間もメモリも安い。
70デフォルトの名無しさん:2008/10/12(日) 17:58:37
JDKはやっぱりJava SE 6 Update 10 Betaが良いのかい?
OSがWin98で主にアプリケーションソフトを作る場合
71デフォルトの名無しさん:2008/10/12(日) 18:11:22
Win98用のJRE5は見たことあるが、JDKってあったかな・・・
72デフォルトの名無しさん:2008/10/12(日) 18:33:29
JTextPaneで自分の環境を弄らずに独自のフォントを扱おうと思っています。
Font.createFontで独自フォントを生成してJLabelなどに表示することはできます。

しかし、ファミリ名から独自のフォントを呼べず、
StyleConstants.setFontFamily(SimpleAttributeSet, ファミリ名);
で設定できないため、JTextPaneに独自フォントで追加できません。
Fontクラスを使って文字を追加できればいいのですが良い方法はないでしょうか?
下記のような方法でテキストをJTextPaneに追加しています。

sas = new SimpleAttributeSet();
StyleConstants.setFontFamily(sas, "MS Pゴシック");
Document doc = JTextPane.getDocument();
doc.insertString(doc.getLength(), "test", sas);
73デフォルトの名無しさん:2008/10/12(日) 19:11:30
GraphicsEnvironment#registFont(Font)じゃあかんの?
ぐぐって3ページ内に出てくるような質問だぜ。
74デフォルトの名無しさん:2008/10/12(日) 19:59:22
ありがとうございます、ファミリ名に追加できて解決しました。
違うところを見て回っててGraphicsEnvironmentを見逃してました。
75デフォルトの名無しさん:2008/10/12(日) 20:34:55
public static void main(String[] args) {
Scanner stdIn = new Scanner (System.in);

int a, b, c;
while (true) {
try {
System.out.println("三つの整数の最大値を求めます。");
System.out.print("aの値:");
a = stdIn.nextInt();
System.out.print("bの値:");
b = stdIn.nextInt();
System.out.print("cの値:");
c = stdIn.nextInt();
break;
} catch (InputMismatchException e) {
System.out.println("整数値を入力してください。");
}
}

int max = a;
if (b > max) max = b;
if (c > max) max = c;

System.out.println("最大値は" + max + "です。");
}

例外絡みが原因みたいなんですけど、どこがおかしいのでしょうか?
76デフォルトの名無しさん:2008/10/12(日) 20:42:29
あなたの日本語がおかしい。
77デフォルトの名無しさん:2008/10/12(日) 20:47:01
エクリプスで、} catch (InputMismatchException e) { の行に
×マークがついてるんですがどう直せばいいのでしょうか?
78デフォルトの名無しさん:2008/10/12(日) 20:57:02
自分が使いやすいように専用のペイントみたいなものを作りたいと思っているのですが、
javaで可能でしょうか?

また、可能でしたら何から始めればよろしいでしょうか?
79デフォルトの名無しさん:2008/10/12(日) 21:05:27
>>58教えて下さい。
80デフォルトの名無しさん:2008/10/12(日) 23:20:25
>>79
         ____/ ̄ ̄  
          / │ ̄\__     ゴゴゴ・・・
            /  



  
        ..     、      ,_    
        ̄\_/ ̄ ̄\/ ̄     ゴゴゴゴゴゴ・・・
    ___/ ̄へ√⌒l⌒´ ̄ ̄\_ 
    ´        /   \ 



      _   ./ ̄ ̄ ̄\    / 
    __ `ソ/ ─  ─  \/ ̄/  
      \/゚ (●)。 (●)  \/ rへ,ノ    断る!!!
 __>-へ| i     (__人__)    |ノ  :.\_ 
      .:/从へ、.゚` ⌒´o.ノ从rーヘ_ 
    _::ノ    :ノ`⌒Y⌒´::  \ 
          .::┘   :│   ゚ 
81デフォルトの名無しさん:2008/10/12(日) 23:22:07
82デフォルトの名無しさん:2008/10/12(日) 23:39:33
>>75,77
エラーメッセージ読めよ
83デフォルトの名無しさん:2008/10/12(日) 23:41:35
>>78
買った方が安いし時間の節約になりますよ。
84デフォルトの名無しさん:2008/10/12(日) 23:52:53
Javaについてまったくの初心者(C言語は多少やったことがある)が
挑戦するのにいい参考書があったら教えてほしいです
85デフォルトの名無しさん:2008/10/13(月) 00:25:45
>>71
JDK5のいくつかだったか以降はXPSP2未満だとインスコ時に警告出るよ。
XPSP1にインスコしようとしてはまった事がある。
sunのページにはそういうこと一切書かれてないが。
86デフォルトの名無しさん:2008/10/13(月) 14:04:10
JDK5インスコしたらJavaディレクトリの中には
jdk1.5.0.16
jre1.5.0.08
jre1.5.0.16
の3つのディレクトリができてるけどjre1.5.0.08は削除しても良いのかな?
87デフォルトの名無しさん:2008/10/13(月) 14:15:24
それは前からあったものだと思われ
古いバージョンの消さないから
削除してよいよ
88デフォルトの名無しさん:2008/10/13(月) 14:30:24
消しても良いよね
俺、不安で最近まで取っておいた
89デフォルトの名無しさん:2008/10/13(月) 14:50:20
jre1.5.0のマイナーバージョンだからほとんど同じだけど、jre1.2とjre1.5 jre1.6 とかよく混在させているよ。

昔のjdk1.1.8とかなくなると、その環境で引き受けたクライアントもいるから開発するのにかなり困るし。
javacのオプション使ってもいいけど。
90デフォルトの名無しさん:2008/10/13(月) 15:09:19
jarファイルをgetClass().getResourceAsStream()で呼んでも
拡張子が独自のものだと読めないんでしょうか?
91デフォルトの名無しさん:2008/10/13(月) 15:09:49
修正
jarファイル内のファイルをgetClass().getResourceAsStream()で呼んでも
拡張子が独自のものだと読めないんでしょうか?
92デフォルトの名無しさん:2008/10/13(月) 15:48:23
読めないの意味が分からん。戻り値はInputStreemだろ
93デフォルトの名無しさん:2008/10/13(月) 19:37:13
JavaのJFrameについて質問です.

Jungというネットワーク図を描画するライブラリと,JFrameを使って可視化ツールを
作っています.

JFrameを継承したJungSampleというコードを使用して,その中でaddメソッドを使用して
JungのコンポーネントをJFrameに登録して,JFrameに図を描画しています.
http://www.techscore.com/tech/Others/Jung/02.html
こののサンプルコードをそのままコピペしました.

やりたいのは,JFrameに描かれたすべての描画をいったん全部消して,また新しい図を
描画したいのですが,これはどうすればよいのでしょうか?

removeメソッドなどを使ってみましたが,うまくいきません.
どなたか教えてください.
94デフォルトの名無しさん:2008/10/13(月) 20:48:46
>>93
ttp://jung.sourceforge.net/doc/manual.html#remove
Graph#removeVertex(Vertex)を呼べ、と書いてある。
全削除なら、すべてのVertexを一つ一つ指定する必要があるけど、
ttp://jung.sourceforge.net/doc/api/edu/uci/ics/jung/graph/impl/AbstractSparseGraph.html#getVertices()
これでVertexのSetが取得できるので、問題はない。
techscoreのサンプルと同じにするのなら、
UndirectedSparseGraphにはremoveVertices(Set)があるから
graph.removeVertices(graph.getVertices());
でいけるんじゃね?
95デフォルトの名無しさん:2008/10/13(月) 20:56:54
>>94
マニュアル嫁って話ですね...すみませんありがとうございます.
96デフォルトの名無しさん:2008/10/13(月) 23:33:22
JLabel label = new JLabel("test") {
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
super.paintComponent(g2d);
}
};

小さい文字にアンチエイリアスをかけたいのですが、とあるところに落ちていたこのソースが機能しません。
大きな文字の場合、VALUE_TEXT_ANTIALIAS_OFFをしてもアンチエイリアスがかかるため、
方法そのものがおかしいのかなと思っているんですが、どうなのでしょうか。
どこかでSystem.setProperty("awt.useSystemAAFontSettings", "on");をすると小さい文字にもアンチエイリアスがかかりますが、一つのコンポーネントにのみかけたいのです。

また、JTextPaneを使いアンチエイリアスのかかった文字とそうでない文字を混同して表示させたいのですが、良い方法はありますか?
もしJTextPaneで問題があるなら他のコンポーネントでも構いません。
97デフォルトの名無しさん:2008/10/14(火) 00:33:36
アノテーションに@Overrideがあるのに@Implementsが無いのはどうして?
98デフォルトの名無しさん:2008/10/14(火) 00:36:18
>>97
実装してないとちゃんとエラーになるから。
Overrideの場合は間違ってもエラーにならず気が付きにくい。
99デフォルトの名無しさん:2008/10/14(火) 12:09:48
1000行あるファイル読込を高速に行うためにFileChannelを使おうと思っているのですが、このファイルを一行ずつ処理する方法はありますか?
BufferedReaderを使った方が簡単なんですけど遅くてなんとも
100デフォルトの名無しさん:2008/10/14(火) 13:12:17
読み込みながら処理するなら高速に読み込む意味がないんではないかい
全部を一気にメモリに読み込んでから処理すればいいじゃん
1行のサイズが1GBありますとかじゃないんでしょ?
101デフォルトの名無しさん:2008/10/14(火) 13:21:29
何かのプログラムをコンパイルしようとしても
オーバーライドしませんってのが出てエラーになっちゃうんですが
どうすればいいですか?

102デフォルトの名無しさん:2008/10/14(火) 13:24:14
ちなみに以下のプログラムでなんですが
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ExpButton2 extends JFrame{


public Container container = null;
public JToggleButton b1,b2;
public Icon icon1 = new ImageIcon("pin1.gif");
private Font font = new Font("serif",Font.ITALIC + Font.BOLD,36);

public ExpButton2(){
super("ExpButton_2");
container = this.getContentPane();
container.setLayout(null);
container.setBackground(Color.gray);
container.setForeground(Color.red);

b1 = new JToggleButton("ButtonA",icon1);
b1.setVerticalTextPosition(SwingConstants.BOTTOM);
b1.setHorizontalTextPosition(SwingConstants.CENTER);
b1.setSize(80,60);
b1.setLocation(40,30);
b1.setVisible(true);
b1.setOpaque(false);
b1.setBorderPainted(true);
b1.addActionListener(lsn);
container.add(b1);
103デフォルトの名無しさん:2008/10/14(火) 13:27:59
b2 = new JToggleButton("ButtonB",icon1);
b2.setVerticalTextPosition(SwingConstants.BOTTOM);
b2.setHorizontalTextPosition(SwingConstants.CENTER);
b2.setSize(80,60);
b2.setLocation(120,30);
b2.setVisible(true);
b2.setOpaque(false);
b2.setBorderPainted(true);
b2.addActionListener(lsn);
container.add(b2);

addWindowListener(new WindowEvevtHandler());
setVisible(true);
}

static ActionListener lsn = new ActionListener(){
public void actionPerfomed(ActionEvent e){
String pushedButton = e.getActionCommand();
System.out.println(pushedButton);

//if(pushedButton.equals("make mean 1")) method1();
//else if(pushedButton.equals("make mean 2")) method2();
//else if(pushedButton.equals("ReadFile")) method3();
//else if(pushedButton.equals("SaveToFile")) method4();
}
};
104デフォルトの名無しさん:2008/10/14(火) 13:29:54
class WindowEvevtHandler extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}



public void paint(Graphics g){
super.paint(g);
g.setColor(Color.blue);
g.setFont(font);
g.drawString("message",40,160);
}

public static void main(String args[]){
new ExpButton2();
}
}
105デフォルトの名無しさん:2008/10/14(火) 13:38:52
>>100
読込完了->処理なんで少しは早くなるのではないかと思って
使ってるのが化石PCなのが最大の原因な気がしなくもないですけど


そして自己解決

StringBuffer buf=null;
FileChannel fis = new FileInputStream(ファイル名).getChannel();
ByteBuffer buffer = ByteBuffer.allocate((int)fis.size());
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
for (int i=0;i<buffer.capacity();i++){
if((char)bytes[i]=='\n'){
String str=buf.toString();
//
//ここに処理が入る
//
}
buf.append((char)bytes[i]);
}
でよさそうですね
お手数おかけしました
106デフォルトの名無しさん:2008/10/14(火) 13:43:41
>>105
素直に BufferedReader 使った方が速いんじゃ?
107デフォルトの名無しさん:2008/10/14(火) 13:46:40
>>101-104
× actionPerfomed
○ actionPerformed
108デフォルトの名無しさん:2008/10/14(火) 14:01:52
BufferedReaderのバッファサイズを大きめにとれば解決しような予感
109デフォルトの名無しさん:2008/10/14(火) 16:43:35
プログラムを作ってみたいのですが
やっぱりJAVAがいいんでしょうか。
C言語等と比較して何で作ったら良いか迷っています。
110デフォルトの名無しさん:2008/10/14(火) 16:48:00
>>109
C#がいいよ
111デフォルトの名無しさん:2008/10/14(火) 17:19:00
Javaの質問スレで聞いたら、Javaとしか答えは返ってこないよ。

どんなプログラムを作りたいかで適切な言語は変わってくる。
状況によって複数使い分けるのがいまどきのってやつさね。
112デフォルトの名無しさん:2008/10/14(火) 19:03:47
>>109
周りにすぐ質問できる人がいる言語にしとけ
いちいちここに書かれても面倒だからな
113デフォルトの名無しさん:2008/10/14(火) 19:08:14
>>105
それで早いのか?
114デフォルトの名無しさん:2008/10/14(火) 19:16:32
>>106
>>113
少しは早くなりました
あと>>105だと駄目駄目でした
というかググれば出てきました
115デフォルトの名無しさん:2008/10/14(火) 19:17:11
SwingのjTableのヘッダーにjPanel(jComboBox,jLabelを配置)
を埋め込んだのですがコンボがうまいこと動作しません
誰か実績ある人おりませんですか。
116デフォルトの名無しさん:2008/10/15(水) 03:35:55
未来のないSwingなんかで四苦八苦するのは時間の無駄
117デフォルトの名無しさん:2008/10/15(水) 04:17:15
うんち
118デフォルトの名無しさん:2008/10/15(水) 04:23:43
質問です
この、ソースコードで理解できない部分がありますので
助言。お願いいたします。
class Sample7_3
{
public static void main(String args[])
{
int test[] = new int[5];

test[0] = 80;
test[1] = 60;
test[2] = 22;
test[3] = 50;
test[4] = 75;

for(int i = 0; i<5; i++){
System.out.println((i + 1) + "番目の人の点数は" + test[i] + "です。");
}
}
}
これを、実行すると"test[i]"が、80や60など点数に変わるのか理解できません。





119デフォルトの名無しさん:2008/10/15(水) 06:37:08
>>118
javaの入門書見てそれでもわからんかったらもう一度来い
120デフォルトの名無しさん:2008/10/15(水) 06:53:50
釣りにしてはひどいな
121デフォルトの名無しさん:2008/10/15(水) 19:05:07
フォームを利用してDBへのデータ入力をしたり、DBから引っ張ってきたデータで
簡単な統計や、表の作成ができるものを作りたいと思っているのですが、
ローカルで動くものを作ろうとするとJavaの場合どの辺りを勉強するのがいいですか?

ざっと調べてみて、現在JDBC(+MsSQL)とAWTクラスを利用することを考えていますが、
方向性としてもこんなもんでしょうか
122121:2008/10/15(水) 21:17:30
すみません、一応PHPなら経験があるので
もしPHPのようにHTML吐いてブラウザベースでやる方法が
別にあるなら教えていただきたいですm(;_ _)m
123デフォルトの名無しさん:2008/10/15(水) 22:29:53
JavaのSwingのキーイベントに関して2点質問があります。

(1)JFrameの上にJTextAreaとJButtonがあります。
  JTextAreaにフォーカスがある時にTABキーを押下すると
  テキストエリア内にTABが入力されます。
  これをTABが押下されたらJButtonにフォーカスを遷移させるには
  どうすればよいでしょうか?

(2)質問(1)に関連して、JButtonにフォーカスがある場合、
  Enterキーを押下したら特定の動作をさせるには
  どうすればよいでしょうか?

よろしくお願いいたします。
124123:2008/10/16(木) 08:09:33
出かける前に、昨晩解決したので書いときます。

(1)はJTextAreaおよびJButtonにキーリスナーを登録し、キーイベント(keyPressed)を拾って
仮想キーコードがTABだった場合にトラバーサルを次に進めるようにしました。

(2)も同様にキーイベント(keyPressed)を拾って、仮想キーコードが
ENTERの場合にJButtonがフォーカスオーナーであれば
特定動作をさせるようにしました。

以上。
125デフォルトの名無しさん:2008/10/16(木) 10:47:17
>>124
直接KeyEventを拾うリスナを新たに書くよりも、折り返してるのでちょっと見づらいけど、

JTextArea area;
JButton button;

area.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
Collections.singleton(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)));
area.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
Collections.singleton(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK)));

InputMap map = button.getInputMap();
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
map.get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0)));
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true),
map.get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true)));

みたいに既存の機構を利用したほうが統一感があるかも。
JTextAreaの方はここでは簡単のために元々のCTRL+TABやSHIFT+CTRL+TABを上書きしてるけど、
元のキーも活かしたいなら新たにSetを作って元のと新しいのと両方をaddすればいいと思う。
getFocusTraversalKeysが返すSetは変更不可なので。
JButtonの方は元々SPACEでアクションを起こすようになっているので、
押された時と離された時の両方をSPACEに関連付けられた名前に合わせる。
こちらは追加なのでSPACEでもアクションを起こす。
126デフォルトの名無しさん:2008/10/16(木) 18:21:12
質問させてください

javaのプログラムで整数を引数として与えて、その整数をアスキーコードとして持つ文字を
戻り値として得られるようなメソッドはあるのでしょうか?
127デフォルトの名無しさん:2008/10/16(木) 18:48:31
charでキャストでいいんでね?
128デフォルトの名無しさん:2008/10/16(木) 18:49:38
>>126
int i = 65;
char c = (char) i;
System.out.println(c);
129デフォルトの名無しさん:2008/10/16(木) 18:54:40
>>127 >>128
できました!
さっきまで自分では>>128さんのソースの2行目の部分をStringにしてたからできなかったんです
助かりました!ありがとうございました!
130デフォルトの名無しさん:2008/10/16(木) 22:12:20
質問です。

class Aクラス名<Bクラス名>{ … }

みたいなクラスの宣言を見たのですが、
"<"+">"で囲まれている部分は、どんな意味があるのですか?
教えてください。
131デフォルトの名無しさん:2008/10/16(木) 22:21:29
クラステンプレートでぐぐれ
132デフォルトの名無しさん:2008/10/16(木) 22:49:21
ここjavaスレだよな・・・
133デフォルトの名無しさん:2008/10/16(木) 23:01:05
デバッグで何か便利なものがあったら教えてください
Eclipse、J2SE、500行~5000行程度、非マルチスレッド、非GUIプログラムで処理速度、メモリ使用量改善と予想外の出力結果が出てくる時のデバッグ想定してます。
自分で調べた限りだと
ソースで流れを追う
println、assertを入れまくる
toStringを実装する
EclipseでbreakPoint/一時停止して変数の値、関数の呼び出し状況を見る、
hprofで呼び出し回数の多い関数を調べる

134デフォルトの名無しさん:2008/10/16(木) 23:03:29
Genericsかジェネリックスで調べると良いよ
自分の認識だとObject型へのキャスト、Object型からのキャストを減らすもの
ここのキャストはintをdoubleに変換するやつじゃなくてね
135デフォルトの名無しさん:2008/10/16(木) 23:10:20
>>131>>134
ありが㌧
136131:2008/10/16(木) 23:39:57
>>132
そうだった・・・すまそorz
137デフォルトの名無しさん:2008/10/17(金) 10:16:37
>>133
plintln最強
138デフォルトの名無しさん:2008/10/17(金) 10:55:33
>>137
java用のlintってfindbugsみたいなのとか?
139デフォルトの名無しさん:2008/10/17(金) 11:01:26
タイポにいちいちレスしてんじゃねーよ
140デフォルトの名無しさん:2008/10/17(金) 11:08:40
つまらねえツッコミにいちいちレスしてんじゃねーよ蟲蟲
141デフォルトの名無しさん:2008/10/17(金) 18:39:00
java勉強しようと思うんだけどコンパイラはどれがいいんですかね?
初歩的な質問ですいません
OSはvista(笑)です
142デフォルトの名無しさん:2008/10/17(金) 18:42:47
>>141
gcj(笑)
143デフォルトの名無しさん:2008/10/17(金) 19:40:53
上達したいです
上達するにはどのようなことをすればいいんですか?
オススメ参考書などあれば教えてください。
144デフォルトの名無しさん:2008/10/17(金) 23:29:11
>>143
このあたりで実際にプログラム作ってみるのがいいんじゃないかな。
★★ Java の宿題ここで答えます Part 66 ★★
http://pc11.2ch.net/test/read.cgi/tech/1221652206/101-200
145デフォルトの名無しさん:2008/10/17(金) 23:35:56
まずは創るJavaを一冊読めばいいよ。
あと俺はきしだタソじゃないよ。
146デフォルトの名無しさん:2008/10/18(土) 01:09:41
public class Sample {


public static void main(String[] args) {

int i;
for (i = 0; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
System.out.println("finish!!");



}

}

どうして、これを実行するると
0から実行されるのではなく、1から実行されるのでしょうか?
普通は、0からはじまるのですよね・・・?
147デフォルトの名無しさん:2008/10/18(土) 01:13:56
>>146
ファイルにリダイレクトしても、0はない?
148146:2008/10/18(土) 01:14:18
自己解決すた
149デフォルトの名無しさん:2008/10/18(土) 01:43:31
import java.awt.*; import java.awt.event.*;
import javax.swing.*; import javax.swing.text.*;
public class JDialogTest extends JDialog implements ActionListener{
public static void main(String[] args){
for(int i = 0; i < 100; i++){
System.out.println(i); new JDialogTest(null, "hoge", "hogehoge");}
}
public JDialogTest(Frame owner, String title, String message){
super(owner, title, true); setTitle(title);
addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent evt) {dispose();}});
Container c = getContentPane(); c.setLayout(new BorderLayout());
DefaultStyledDocument document = new DefaultStyledDocument();
SimpleAttributeSet attribute = new SimpleAttributeSet();
try{
// この行の有り無しで変化がみられます。。。
document.insertString(document.getLength(), message + "\r\n", attribute);
} catch (Exception e){e.printStackTrace();};
JTextPane tp1 = new JTextPane(); tp1.setDocument(document);
JScrollPane jsp = new JScrollPane(tp1); jsp.setPreferredSize(new Dimension(520, 320));
c.add(jsp, BorderLayout.CENTER);
JButton bOK = new JButton("OK");
getRootPane().setDefaultButton(bOK);
bOK.addActionListener(this);
c.add(bOK, BorderLayout.SOUTH);
pack();
Toolkit tk = Toolkit.getDefaultToolkit();
setLocation((tk.getScreenSize().width - getWidth()) / 2, (tk.getScreenSize().height - getHeight()) / 2);
setAlwaysOnTop(true); bOK.requestFocus(); setVisible(true);
}
public void actionPerformed(ActionEvent ae){this.setVisible(false);}
}
150149:2008/10/18(土) 01:45:27
質問です。 >>149 のプログラムは、
同じモーダルダイアログをループで表示させていくプログラムですが、

// この行の有り無しで変化がみられます。。。
document.insertString(document.getLength(), message + "\r\n", attribute);

この行があると、数回目で表示されなくなり停止します。
何が悪いんでしょうか??

ちなみに、上の部分をコメントアウトすると、正常に動きます。
151デフォルトの名無しさん:2008/10/18(土) 11:23:34
アプリレットを作ってるんですが
TextFeildとBottonの位置の指定の仕方がわかりません

初歩的な質問ですがよろしくお願いします
152デフォルトの名無しさん:2008/10/18(土) 12:04:11
jdkのダウンロードページが繋がらないんだけど、何かあったのかな?
153デフォルトの名無しさん:2008/10/18(土) 12:13:21
update10が正式リリースされて集中するアクセスを捌ききれないとか
リリース内容に何か問題があって黙って直している最中とか
154デフォルトの名無しさん:2008/10/18(土) 12:32:57
>>151
レイアウトマネージャで検索
155デフォルトの名無しさん:2008/10/18(土) 14:54:37
JDKつながんねー
156デフォルトの名無しさん:2008/10/18(土) 16:09:27
実行中のJavaで書いたアプリケーション(MyApp)を別のプログラム(MyMonitor)から操作するにはどうしたらいいでしょうか?
今考えてるのはMyAppにTomcatなどのWebサーバ機能を持たせて、MyMonitorからHTTP通信などで連携する事を考えてるのですが・・・

ちなみにMyMonitorはjavaでかかれるとは限りません
目的はMyAppからSwingで書いたGUIを分離することです
157デフォルトの名無しさん:2008/10/18(土) 16:18:40
>>156
ソケット通信
158デフォルトの名無しさん:2008/10/18(土) 16:43:57
スレッドがどこからも参照されなくなったことを
自身のスレッドが検知したいのですがどうしたらいいのでしょうか?
159デフォルトの名無しさん:2008/10/18(土) 17:05:39
スレッドの参照とかいってるけど、それはただのオブジェクトの参照ではなくて?
ワーカースレッドの空きを言ってるなら、キューが空ならスレッドも仕事してないってわかるでしょ。
160デフォルトの名無しさん:2008/10/18(土) 18:48:49
>>159
例えば下のように変数aは途中でnullを代入してますが、
この時点でスレッドはどこからも参照されなくなりました。
参照されなくなったスレッド自身が、自分誰からも参照されなくなった!と判断したいのです。
 Thread a = new Thread( new MyRunnable() );
 a.start();
 a = null;

GCじゅありませんが、誰からも参照されなくなったらというのを判断するのは出来ないのでしょうか?
161デフォルトの名無しさん:2008/10/18(土) 19:37:33
>>96が未だ解決しないのですが同じような事やった方はいませんか?
162デフォルトの名無しさん:2008/10/18(土) 19:41:48
>>96 は、Graphics2D#drawString をやったときに表示される文字に
アンチエイリアスがかかるだけと思われ
テキストの設定は別
163デフォルトの名無しさん:2008/10/18(土) 21:25:23
>>160
スレッドが走ってる間は常に参照が保持され続けている
Thread.currentThread() でそれが返ってくるし、スレッドグループにも保持されている
スレッドが停止しない限り、誰からも参照されなくはならない
164デフォルトの名無しさん:2008/10/18(土) 21:28:34
コンポーネントの文字にAAかけるのはawt.useSystemAAFontSettingsかJDK6以降ならデフォでかかってる。
165デフォルトの名無しさん:2008/10/18(土) 23:12:53
Java入門するのにオススメの本は何ですか?
教えてください。

他にHSPとRubyを触っています。(こちらも実用レベルではないです)
言語初心者ではないという情報だけ。
166デフォルトの名無しさん:2008/10/18(土) 23:36:53
まずは創るJavaを一冊読めばいいよ。
あと俺はきしだタソじゃないよ。
167デフォルトの名無しさん:2008/10/19(日) 00:29:49
ありがとうございます。

あと、携帯アプリを作りたいと考えているのですが、
携帯アプリでJavaを入門するより、普通の入門書から入った方がいいですかね?
168デフォルトの名無しさん:2008/10/19(日) 03:05:02
>>166
もうそれいいから
169デフォルトの名無しさん:2008/10/19(日) 07:39:19
どなたか>>149-150わかる人いませんか?
170デフォルトの名無しさん:2008/10/19(日) 09:04:55
>>169
documentとattributeをJDialogTestのインスタンス生成する度に作っているからじゃない?
この二つをprivate staticでそれぞれ一個だけ作ってやって、setVisible(true)のあとで
document.remove(0,message.length()+2); とかやってみれば?
171デフォルトの名無しさん:2008/10/19(日) 13:44:26
昨日からGUIの作成について勉強してます。
eclipseを使用しており、Swingを用いて単純な電卓を作成したのですが、
それをeclipseから独立したアプリケーションにするにはどうしたらいいんでしょうか?
初心者なんで低レベルな質問で申し訳ないです。
172デフォルトの名無しさん:2008/10/19(日) 14:10:28
Eclipseは最近触ってないから合ってるか分からんが、
ようはJARに出来れば良いんだから、
プロジェクトを右クリックしてメニュー探して見ればいい。
173デフォルトの名無しさん:2008/10/19(日) 14:23:34
>>168
え、、、>>166って嘘なんですか?。。。
174デフォルトの名無しさん:2008/10/19(日) 16:05:02
>>171
ファイルメニューorプロジェクト右クリック>エクスポート>Java>JARファイル
175デフォルトの名無しさん:2008/10/19(日) 16:41:46
>>172 >>174
解決しました!ありがとうございます!
176デフォルトの名無しさん:2008/10/19(日) 16:54:10
eclipseスレに誘導しろよ
177デフォルトの名無しさん:2008/10/19(日) 18:28:42
ttp://www.wikiroom.com/java/index.php?FrontPage
WikiRoom?からWikiHouse?に移動します。問題がある場合は 10/21 までに support[at]wikiroom.com までメールをください --- WikiRoom

だって
しかし今年になってwikiの更新頻度が極端に落ちたね
春に自分が更新した後夏の間ちょいとサボってて秋に久しぶりに見たら
その間ここは2スレぐらい進んでたのに1件しか更新されてなかった
178デフォルトの名無しさん:2008/10/19(日) 18:34:56
JFrameのウィンドウをsetVisible(true)にした時、
ウィンドウを画面の一番手前に持ってくるには
どうすればいいでしょうか?
179デフォルトの名無しさん:2008/10/19(日) 18:44:51
>>152,>>153,>>155
まだJDK6のダウンロードできないね
でも英語の方のダウンロードページからは今普通に落とせた
日本語ページからの接続をサーバがうまく処理できてないみたいだ
180デフォルトの名無しさん:2008/10/19(日) 21:02:31
JTableについて質問です。
http://www.javadrive.jp/tutorial/jtable/index14.html
このページに画像をセルに表示する方法が書かれていますが、
画像をセルではなく、一行全体に表示するようなことは可能でしょうか。
目的は、一行全体に画像を表示することで、
「ここから下には○○系のデータが並んでいますよ」
ということをユーザーに分らしたいのです。
要はテーブルの任意の行に見出しを作りたいのです。
画像が不可能である場合は、テキストの描画でも構いません。
TableCellRendererは、行ではなくセルを対象にしているので、
この場合には使えないと思っています。
181デフォルトの名無しさん:2008/10/19(日) 21:26:08
>>180
モデルはどうしてるの?
その行の各セルに、「この行は見出し行ですよ」って示すようなデータ入れるの?
182デフォルトの名無しさん:2008/10/19(日) 22:03:10
うは。BasicTableUIのpaintCell書き換えて手軽にやろうと思ったけどprivateなんだね。
ソースこぴって、モデルから取得したデータが行見出しデータなら自前の見出しレンダラへ描画を委譲。
これでできるっちゃできるよ。
183デフォルトの名無しさん:2008/10/19(日) 22:07:47
>>181
回答ありがとうございます。
見出しとする行に入れる数字の値は問いません。
その数字はセルに設定するつもりがないからです。
要は下のようなテーブルを

1 2 3
4 5 6
7 8 9

次のように表示したいのです。

1 2 3
4 5 6
--2007年-- (←のような見出しを追加したい)
7 8 9

イメージとしては、row == 2のときに見出しを描画するコードを記述
するものなのですが、このような事は可能でしょうか。

>>182
回答ありがとうございます。
調査します。
184デフォルトの名無しさん:2008/10/20(月) 02:05:23
>>182
BasicTableUIのpaintの処理をコピーし、
super.paintでデフォルトの描画をしてから、
Graphicsを使って任意の行を描画するようにしました。
助言なしでは実装できなかったと思います。
本当にありがとうございました。
185デフォルトの名無しさん:2008/10/20(月) 04:11:24
スレチかもしれないけどお勧めの本とかないですか?
当方、全くの初心者です。JAVAじゃないけどVBで
いくつかソフトを作ったぐらいであとは何もやってません。
186デフォルトの名無しさん:2008/10/20(月) 11:09:28
>>184
終了してるが、その場合は無理に全部1つのJTableに入れずに、
各年毎のJTableと見出しのJLabelをBoxに入れるのがいいような気がする。
187デフォルトの名無しさん:2008/10/20(月) 14:58:29
RMIで呼び出された側で呼び出し側のIPを知る方法はありますか?
188デフォルトの名無しさん:2008/10/20(月) 15:23:25
バイナリファイルの読み書きで、byte型変数・配列で読み書きしたらうまくいかなくて、
たぶん符号ビットのせいだろうと思ってint型の下位16ビットだけを使うようにしたら上手くいったんだけど、
もしかしてそんな面倒しなくてもchar型でやればOKだったりする?
あとbyte型だとうまくいかなったのは符号ビットのせいって考えはあってる?
189デフォルトの名無しさん:2008/10/20(月) 15:24:31
あ、16ビットじゃなくて8ビットか。
190デフォルトの名無しさん:2008/10/20(月) 16:17:57
for文の範囲指定の値は、↓の用に代入してもOKですか?
int i = 10;
for(int n = -i; n >= i; n++){
}
191デフォルトの名無しさん:2008/10/20(月) 16:24:10
IE7.0とFirefox2.0とFirefox3.0でJavaが動かない場合の解決法

理由:IE7.0に入れられたWindows Live系のアドオンがJAVAと競合している。

Internet Explorer 7のメニューから[ツール] → [アドオンの管理] →[アドオンの有効化または無効化]を開く
・現在 Internet Explorerで読み込まれているアドオン
・Internet Explorerで使用されたアドオン
・許可なしで実行されるアドオン
・ダウンロードされたActivwXコントロール(32ビット)
を全部見て調べる

○Sign-in Helper(Windows Live Messengerインストールで入れられる)
→無効にする

○Windows Live Toolber helper(Windows Live Toolbarインストールで入れられる)
→無効にする
192デフォルトの名無しさん:2008/10/20(月) 16:29:08
>>190
なにがOKなんだ
それじゃループ回らないだろ
193デフォルトの名無しさん:2008/10/20(月) 16:30:51
>>187
そんなもん気にしなくていいようにRMI使ってるんじゃないのか
194デフォルトの名無しさん:2008/10/20(月) 16:35:11
>>188-189
どういうコードでどうなると思っていてどうなったから「うまくいかない」となったという説明とコードを書け
195デフォルトの名無しさん:2008/10/20(月) 21:32:14
>>187
java.rmi.server.RemoteServer.getClientHost() を使え。
前スレでもあったな、この質問。
196デフォルトの名無しさん:2008/10/21(火) 01:12:20
火狐で一応Java動いてるがかなり動作が怪しい
ブラウザで更新ボタン押すと高確率でクラッシュする
IE7なんて使ってないし、コンパネでネットワーク設定→直接接続もやってるのに
197デフォルトの名無しさん:2008/10/21(火) 06:00:02
Eclipseが落ちていたので立てておいた

Eclipse統合M26【Java/C/PHP/Ruby/Python/Perl】
http://pc11.2ch.net/test/read.cgi/tech/1224536200/
198デフォルトの名無しさん:2008/10/21(火) 12:01:54
全て0か1かで構成されている2進数表記された文字列(例: number1 number2・・・numberN)
をコマンドラインから入力する。その文字列を数値に変換し、合計を計算し、2進数表記の文字列に変換するプログラムを作成しろ。
ただし次の機能は使ってはいけない

1 文字列の加算
3 Integerクラスなどのラッパークラス
4 DecimalFormatなどの書式変換クラス
2 System.outまたはSystem.errのprint系メソッドで、Stringの値を受け取るもの以外

という風なJavaプログラムの課題を出されているのですけれど
文字列を数値に変換する方法が分かりません。教えていただけないでしょうか?
199デフォルトの名無しさん:2008/10/21(火) 12:11:30
>>198
文字列から文字を1つずつ取り出す
・・・ char c = s.charAt(i) 等

各桁ごとに文字を数値に変換する
・・・ if (c == '0') x = 0;
else if (c == '1') x = 1;
else throw new IAE(); 等

各桁の数値を足し合わせる
・・・ n = n * 2 + x; 等
200デフォルトの名無しさん:2008/10/21(火) 14:25:08
>>199
ありがとうございます。
一文字ずつ取り出すのですか、思いつきませんでした。
201デフォルトの名無しさん:2008/10/21(火) 15:07:33
javaのウインドウの色を取得したいのですが、
SystemColor.windowは白を返すようです。
SystemColor.controlは色が違いますし...。
環境windowsです。
202デフォルトの名無しさん:2008/10/21(火) 15:31:13
ウィンドウの色とは?
ウィンドウのどのへんの色?
203デフォルトの名無しさん:2008/10/21(火) 15:44:54
失礼しました。
ボタンやラベルなどを張り付ける領域です。
204デフォルトの名無しさん:2008/10/21(火) 16:04:24
frame.getBackground()
UIManager.getColor("control")
205デフォルトの名無しさん:2008/10/21(火) 16:31:35
サンクスです。
206デフォルトの名無しさん:2008/10/22(水) 00:51:27
IPv6
http://ipv6.2ch.net/ipv6/

なんか凄い板を見つけた。
IPv6でないと書き込めないってよ
しかも、IDの桁数が倍
207デフォルトの名無しさん:2008/10/22(水) 01:43:54
IPv4や文字コード問題など当初仕様決めた人は
失敗した~人生の汚点だぁって死ぬまで後悔するんだろうか。
208デフォルトの名無しさん:2008/10/22(水) 06:09:51
当時はそれが最高だと思ったんだからしょうがない。
過去も未来も変わらないのは傘とワイパーとカブくらいだろう。
209デフォルトの名無しさん:2008/10/22(水) 09:20:39
新発明「ワイパーつきの傘」
210デフォルトの名無しさん:2008/10/22(水) 12:54:39
コンパイルしようとしても不正な文字ですというのが出てコンパイル
出来ません
どうすれば良いですか?
211デフォルトの名無しさん:2008/10/22(水) 12:55:33
ちなみに以下のプログラムです

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

public class ExpList1 extends JFrame{
public JList list0,list1;
public JScrollPane scrollPane;
public JLabel lb1;
public Container container = null;
private Font font = new Font("serif",Font.ITALIC + Font.BOLD,36);
private Font font2 = new Font("serif",Font.BOLD,18);

public ExpList1(){
super("ExpList1");
setSize(300,320);

container = this.getContentPane();
container.setLayout(null);
container.setBackground(Color.gray);
container.setForeground(Color.red);
ListeSelectionListener lsl = new ListListener();

list0 = new JList();
list0.setSize(180,60);
list0.setLocation(40,70);
list0.setFont(font2);
list0.setForeground(Color.bule);
container.add(list0);
212デフォルトの名無しさん:2008/10/22(水) 12:56:56
String[] sdata = {"aa","bb"};
    list0.setListData(sdata);
list0.setSelectedIndex(1);

String[] name = {"aiba","iba","uba","eba","oba","kaba","kiba","kuma"};
list1 = new JList(name);
list1.setSelectedIndex(0);
list1.setSelectionForeground(Color.red);
list1.setSelectionBackground(Color.orange);
scrollPane = new JScrollPane(list1);
scrollPane.setSize(180,160);
scrollPane.setLocation(40,80);
scrollPane.setVisible(true);
container.add(scrollPane);
list1.addListSelectionListener(ls1);

lb1 = new JLabel();
lb1.setSize(180,60);
lb1.setLocation(40,250);
lb1.setForeground(Color.red);
lb1.setFont(font);
lb1.setVisible(true);
container.add(lb1);

addWindowListener(new WindowEvevtHandler());
setVisible(true);
}
213デフォルトの名無しさん:2008/10/22(水) 12:59:16
class ListListener implements ListSelectionListener{
public void valueChanged(ListSelectionEvent e){
lb1.setText((String)list1.getSelectedValue());
}
}

class WindowEvevtHandler extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}


public static void main(String args[]){
new ExpList1();
}
}
214デフォルトの名無しさん:2008/10/22(水) 13:01:20
>>210
全角空白を取り除く
215デフォルトの名無しさん:2008/10/22(水) 13:26:07
下記のプログラムについて質問です
コンパイルしようとすると<identifier>がありませんと]がありませんというエラーが出ます
int[] s = new int[3];
s[0] = 0;
s[1] = 1;
s[2] = 2;
の部分を
int[] s ={1,2,3};
に変えればエラーが無くなるのですがこれはなぜでしょうか?
また、上のように後で別々に代入するにはどのようにすればいいのでしょうか?

class tes{
int[] s = new int[3];
s[0] = 0;
s[1] = 1;
s[2] = 2;

public void show(){
for(int i = 0;i < s.length;i++){
System.out.println(s[i]);
}
}

public static void main(String[] args){
tes l = new tes();
l.show();
}
}
216デフォルトの名無しさん:2008/10/22(水) 13:28:13
>>215
クラスの中に直接
s[0] = 0;
のような実行コード (文) を書くことはできません
文はメソッドの中にしか書けません
別々に書きたいならコンストラクタでやればよろしい
217デフォルトの名無しさん:2008/10/22(水) 14:05:15
>>216
ありがとうございますコンストラクタで解決しました

いかにもjavaの基礎をすっ飛ばして勉強した間違いだったなこれ
218デフォルトの名無しさん:2008/10/22(水) 22:03:07
ど素人なんで質問3連発させてください。

①JAVAではC見たいに引数や戻り値をconstに出来ないのでしょうか?
public byte[] getAddress() { return m_address; }
この場合、m_addressを変更されたくない場合はコピー作って返すしかないんですか?

②文字列の全てのスペースを消す楽な方法ないでしょうか。trim()は前後しかやってくれないので。

③配列をenumeration型にしてforで回したいのですが、変換する楽な方法は無いですか?
219デフォルトの名無しさん:2008/10/22(水) 22:03:26
poiでマイクロソフト以外のファイルを扱うことはできるでしょうか?

いろいろ調べた結果よく明確にわかる資料がありませんでした。
220デフォルトの名無しさん:2008/10/22(水) 22:13:01
>>218
1 無理。
JDK7で @ReadOnly みたいなアノテーション付けられるようになるらしいけど、
それまでは防衛的コピー返すか、Immutableなオブジェクト返すかの二択。

2. "文 字 列".replaceAll("\\s", "")
3. Collections.enumeration(Arrays.asList(array))
221デフォルトの名無しさん:2008/10/22(水) 22:21:14
>>210
エスパー風に答えるなら
-encodingを使うこと
222デフォルトの名無しさん:2008/10/22(水) 22:24:02
>>218
配列は普通に for でまわせるだろ?
何で型変換が必要なんだ?
223デフォルトの名無しさん:2008/10/22(水) 22:25:49
>>220
早いレス、有難うございます。
①C++からJAVAに移ったんでconst出来ないのに違和感がありまして。
やっぱり基本無理なんですね。

②タブや全角スペースなど空白全般となると面倒そうですね。基本地道に取り除くしかなさそうと…

③コレクションに格納しないと、やっぱり無理ですか。
無駄なコピーは避けたかったのですが。
でも、イチイチenumeration継承させたクラス作るくらいならそっちの方が楽そう。

どうもありがとう御座いました★
224デフォルトの名無しさん:2008/10/22(水) 22:29:25
>>222
ループをenumeration用と配列用で分けたくなかったので。
enumerationがメインのループでして、
補助的に配列も突っ込む予定でenumerationに出来たら楽だなぁと考えた訳です。
225デフォルトの名無しさん:2008/10/22(水) 22:44:05
>>224
1.5以降なら拡張 for 構文があるから配列と Iterator でほとんど一緒。
226デフォルトの名無しさん:2008/10/22(水) 22:59:37
>>225
enumeration⇔Iterator変換はありますかね?
メインで取得する型enumerationなもので。ループもenumerationベースになっております。
227デフォルトの名無しさん:2008/10/22(水) 23:08:50
>>226
Enumeration 型って Iterator 型の間違いだと思ったけどマジなのか。
新しく実装する場合は Iterator にしろって公式ドキュメントにあるから
Enumeration を Iterator に置き換えたほうが良いと思う。

もう Enumeration で動いてどうしようもないなら
Jakarta の IteratorUtils.asEnumeration を使うとか。
228デフォルトの名無しさん:2008/10/22(水) 23:11:18
すまん。今は Apache Commons だったな。
229デフォルトの名無しさん:2008/10/22(水) 23:16:13
>>227
新しいライブラリ追加するほどディープなループじゃないんで、
簡単な方法が無いならそこの中だけ関数として切り出します。
230デフォルトの名無しさん:2008/10/22(水) 23:18:12
ある数"present"のnビット目を反転させた数"next"を得るには
int next = present^(1<<n);

という方法があることを習ったのですが、
ある数のnビット目が0であるか1であるかを知るためにはどのような方法があるのでしょうか?
231デフォルトの名無しさん:2008/10/22(水) 23:22:25
>>230
nビット目が1で他が0であるビット列との論理積をとってそれが0かそうじゃないか
232デフォルトの名無しさん:2008/10/22(水) 23:31:32
なるほど!!
ちょっとビックリというか感動しました、ありがとうございます!!
233デフォルトの名無しさん:2008/10/22(水) 23:48:18
>>226
機能は同等なんだからラップクラス作ればおk
234デフォルトの名無しさん:2008/10/23(木) 00:10:06
>>233
そこまで手間を掛けるか、ループ二重持ちかなんだけど、
ラップクラスつくほどの物ではないんで
235デフォルトの名無しさん:2008/10/23(木) 00:33:19
>>234
手間かかるか?
機能一緒だからメソッド委譲するだけだと思うが。
236デフォルトの名無しさん:2008/10/23(木) 01:02:46
>>231
presentのasdf[n]ビット目が0であるならnextが加算され、
1であるならばnextが減算されるコードを書きたかったのですが

if ((present && (1<<asdf[n])) == 0){
next = next + 1;
} else {
next = next - 1;
}

と書いたところ
"&&はintで未定義です"とエラーが出ました
どう書けばいいのでしょうか?
237デフォルトの名無しさん:2008/10/23(木) 01:27:39
>>236
それはboolの方だ。
&は1つで。
238デフォルトの名無しさん:2008/10/23(木) 01:45:36
>>235
4行程度のものにクラス作るのは…
別にループ作っても8行プラスα程度のものなんで。
239デフォルトの名無しさん:2008/10/23(木) 02:04:18
>>237
なるほど!
勉強になります
240デフォルトの名無しさん:2008/10/23(木) 02:21:29
javaのstring bufferを今勉強していて課題を出されてわからないところがあるんですが
仮にs1に「abcdefg」と入力して「abc」まで取り出し、その取り出した「abc」の後ろに
「WWW」を連結させて「abcWWW」としたいのですがどのようなメソッドを指定すればいい
か分りません。説明下手ですがお願いします。
241デフォルトの名無しさん:2008/10/23(木) 03:14:11
つ javadoc
242デフォルトの名無しさん:2008/10/23(木) 03:39:35
http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/StringBuffer.html
http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html
自分ならstringbuffer使わずにstringで押し通すかな
Stringのsubstringと+=で
243デフォルトの名無しさん:2008/10/23(木) 03:39:35
条件によって選択できる項目が替わるselectOneMenuと、リンクがあって、
リンクをクリックしたときに、そのときselectOneMenuで選択できる全ての
項目を取得したいのですが、具体的にどうすれば良いかご教授願います。
244デフォルトの名無しさん:2008/10/23(木) 06:03:32
呼び出されたメソッド自信が自分のメソッド名、引数の型、戻り値の型を知る方法はないですかね?

Foo hoge(Bar bar){
 //ここで"hoge"とFooの型とBarの型を知りたい
}
245デフォルトの名無しさん:2008/10/23(木) 08:07:32
>>244
逆に聞きたいんだが、それは何に使うんだ?
246デフォルトの名無しさん:2008/10/23(木) 10:07:39
>>239
確かに && は bool 専用だが、 & との使い分けも楽しいヨ。
247デフォルトの名無しさん:2008/10/23(木) 10:39:18
248デフォルトの名無しさん:2008/10/23(木) 13:49:03
SWINGのハックの本を読んでるですけど、サンプルプログラムが地味でつまんないんです。
なにかわくわくするようなサンプルありません?
SWINGでこんなことできちゃうの、みたいな。
249デフォルトの名無しさん:2008/10/23(木) 16:58:04
そこまで他力本願か
250デフォルトの名無しさん:2008/10/23(木) 17:12:10
テキストフィールドに電話番号を入力させ、
正規表現を用いて正しく入力されたか判断したいのですが、

"\\d[-\\d+]*\\d"

では、ハイフンが2回連続したときもマッチしてしまいます。
どこがおかしいのでしょうか
251デフォルトの名無しさん:2008/10/23(木) 17:16:03
"\\d+(-\\d+)*"
252デフォルトの名無しさん:2008/10/23(木) 17:26:09
>>251
丸括弧が使えたのですね。
正規表現についてなかなか詳しいサイトが見つからず四苦八苦していたところでした。
ありがとうございます。
253デフォルトの名無しさん:2008/10/23(木) 17:56:20
>>249
僕は学習方法の質問はしますが
難問の質問はしないですよ。
自力で解いてきましたから。

予備校などに行く目的は、「効率のよい学習をするため」です。
それと同じです。
かけるべき時間とかけなくてよい時間の峻別が大事なのです。

メモしていいですよ。

メモしましたか?

復唱してください。
254デフォルトの名無しさん:2008/10/23(木) 21:10:34
スレッドを使って周期的に処理を実行させたいんだけど、どうすればいいか分かりません…
周期的にやるだけならタイマー使えばいいんですが、遅延が生じないようにしたいんです
上手く伝えられるか分かりませんが、20~30msぐらいの間隔である処理を実行するようにしたいんです
色々調べたりしてみましたが、私には理解できず…皆さんどうか力をお貸し下さいorz
255デフォルトの名無しさん:2008/10/23(木) 21:23:13
っ ScheduledThreadPoolExecutor
256デフォルトの名無しさん:2008/10/23(木) 21:27:03
Javaじゃ無理じゃね
Timerの他にはScheduledThreadPoolExecutorとか、
あとSwingに何かあったような気がするが、
どれもリアルタイム性は保証されていなかったと思う
257デフォルトの名無しさん:2008/10/23(木) 21:41:48
ものすごーく、基本的なことを聞きます。

別にJavaに限ったことでは無いのですが、関数の型宣言でなぜVoid型というのが
あるのでしょうか?

値を返さないないのに敢えてVoidを宣言するのは、自由参加の行事の場にわざわざ
やってきて、「私は参加しません」と言うのと同じようで無駄な気がするのですが・・・
258デフォルトの名無しさん:2008/10/23(木) 21:41:57
ぇー
リアルタイム性が必要なのか?
デスクトップOSにそんなものを期待するのが間違いだろう
ドライバでも書くのならともかく・・・
259デフォルトの名無しさん:2008/10/23(木) 21:45:41
>>257
Javaでは、戻り値の型を書かないと、コンストラクタと区別が付かないからです
class Foo {
public Foo(){} // これはコンストラクタ
public void Foo(){} // これは値を返さないメソッド
}
260デフォルトの名無しさん:2008/10/23(木) 21:47:38
>>255
調べてみm…早くも挫折しそうだ…
>>256
やっぱムリですかねぇ…
Swingにもタイマーっぽい何かがあったんですが、やはりリアルタイム精度は保障されてなかったです…
>>258
リアルタイム性というか、一定間隔で処理を実行したいだけなんです
具体的にやる内容書くと、一定間隔(数10ms)で文字列の出力を行いたいんです
間隔が短いと一つ前の段階のファイル出力が終わる前に次の文字出力要求が来てしまうとどうなるのか確認したくて…
上手く伝えられた自信がありませんorz
261デフォルトの名無しさん:2008/10/23(木) 21:49:28
変数のとりえる値の範囲を越える場合の対処法はありますかね?
値の最大値より大きい数を扱いたい場合です
262デフォルトの名無しさん:2008/10/23(木) 21:52:40
Javaは静的型付けだから無理。
大きい数を使いたいなら、考えられる大きい数字を格納できる変数を使うべき。
263デフォルトの名無しさん:2008/10/23(木) 21:56:31
>>259
さんきゅう
264デフォルトの名無しさん:2008/10/23(木) 21:59:18
>>262
出来る言語もあるということですか
265デフォルトの名無しさん:2008/10/23(木) 22:01:02
>>260
こんな感じ

Runnable task = new Runnable(){ public void run() {
//ここに実行したいことを書く
}};
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(task, 0, 数10, TimeUnit.MILLISECONDS);
・・・
executor.shutdown();

終わる前に次の時間が来たら、前のが終わってから実行される
266デフォルトの名無しさん:2008/10/23(木) 22:04:25
>>261
BigInteger や BigDecimal を使う
267デフォルトの名無しさん:2008/10/23(木) 22:12:35
>>265
おお…わざわざ本当にありがとうございます…!

やはり終わる前に次の時間が来たら待機しちゃいますよね…
というかそれが分かったことが最高の結果です…ホントにありがとう!
268デフォルトの名無しさん:2008/10/23(木) 22:17:44
>>264
というより、値の大きさに制限が無い(メモリのある限り)
という言語はいくつもある
269デフォルトの名無しさん:2008/10/23(木) 22:22:20
イベントの質問なんですが、
「ボタンをクリックしたら別のクラスを起動」
としたいのですが、どうすればいいのでしょうか?
270デフォルトの名無しさん:2008/10/23(木) 22:28:16
>>267
並列実行したいってんなら方法はあるけど、
並列数が際限なく増えていってCPUもメモリも食い潰すだけかと・・・
271デフォルトの名無しさん:2008/10/23(木) 22:31:24
>>270
並列実行…ではないです、多分。正直良くわからんです…
アバウトな説明ですが
・"output.txt"というファイルに文字列を一行ずつ書き込む
という処理を数10ms間隔で行いたいのです。
その際に、文字列の長さによっては4行目に書き込んでる最中に5行目の内容を書けと命令が来たらどうなるか試してみたかったんです
分かり辛い説明ですいませんorz
272デフォルトの名無しさん:2008/10/23(木) 22:41:19
>>271
どうなるかわからないようなプログラムは書かない
どうしたいのか、というのがまずあって、それを実現するためにプログラムを書く
その例の場合なら
・4行目に書き込むのが終わるのを待ってから5行目を書き込んで欲しいのか
・4行目と5行目の内容がでたらめに混ざって欲しいのか
・4行目と5行目の書き込みを同時に行いつつも混ざらないようにしたいのか
・俺の想像の及ばないような別の何かか
いくつか選択肢があると思うが、どういう動作をしてほしいのかわからない状態なら、まずそれを整理するべき
273デフォルトの名無しさん:2008/10/23(木) 22:50:07
>>272
俺としては
・4行目と5行目がでたらめに混ざるのか
・それか俺のあずかり知らぬ謎のエラーが発生するのか
・普通に4行目,5行目と出力される
の何らかの状態が発生するか確認したいんです。
が、その状態を発生させようにも一定間隔で処理が実行させられず…orz
274デフォルトの名無しさん:2008/10/23(木) 22:51:57
JAVAで画面に点を打つとき一番計算量が少ない方法はなんですか?
275デフォルトの名無しさん:2008/10/23(木) 22:56:57
>>273
わざと並列実行させて挙動を観察して楽しみたいってことなら、
こんな感じで一定時間ごとにスレッド作ってみたらどう

Runnable task = new Runnable(){ public void run() {
//実行する内容
}};
for(;;){
Thread.sleep(10);
new Thread(task).start();
}
276デフォルトの名無しさん:2008/10/23(木) 22:59:28
>>274
点を何個打ちたいかによる
1個打ちたいだけならfillRectでいいかと
100万個打つなら、BufferedImageでごにょごにょ・・・
277デフォルトの名無しさん:2008/10/23(木) 23:00:45
BufferedImageについて詳しくお願いします。
278デフォルトの名無しさん:2008/10/23(木) 23:01:35
>>275
おお…ありがたや…試してみます!
279デフォルトの名無しさん:2008/10/23(木) 23:10:59
>>277
BufferedImage DataBufferInt drawImage でぐぐってください
280デフォルトの名無しさん:2008/10/23(木) 23:51:37
リアルタイム性云々以前にAPIでサポートされてるナノタイムですらOSが対応してなかったら保証されてないからな。
ソラリスたんとかはいいけどwinは大丈夫なのか?
281デフォルトの名無しさん:2008/10/24(金) 03:28:29
マルチスレッドで標準出力はflash不要とか思ってて原因しらべるの苦労したなぁ
うちの環境では\n書けばflashされたが、明示しなきゃだめなんだね
282デフォルトの名無しさん:2008/10/24(金) 18:36:18
JTextField field = new JTextField();
field.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
try {
Thread.sleep(5000);
System.out.println("pressed");
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
});

としているのですが、フィールドに数文字を高速でタイプしたときに、
Pressedが一回だけ表示されるようにするにはどうすればいいのでしょうか。
KeyAdapterが複数立ち上がるときに、新しいのが古いのを棄却するようにしたいのですが。
よろしくお願いします。
283デフォルトの名無しさん:2008/10/24(金) 19:10:04
>>282
それぞれ独立したイベント(KeyEvent)を、
一つのまとまりとして扱うための仕組み(何らかのオブジェクト)を用意する。

Bufferみたいなもん。あとはタイマー機能やら出力機能やら付けてあげれば。
284デフォルトの名無しさん:2008/10/24(金) 19:58:37
>>283
うまくいきました!
ありがとうございました。
285デフォルトの名無しさん:2008/10/24(金) 20:18:49
最近eclipseを使ってjavaを始めました。

int i = Integer.parseInt(args[0]);
を使って、コンソール?から数値を入力したいのですが
コンソールに何も入力することができません。
どうすれば入力できるようになるでしょうか?
286デフォルトの名無しさん:2008/10/24(金) 20:25:15
コンソール入力は System.in を使う
287デフォルトの名無しさん:2008/10/24(金) 20:52:40
eclipse3.3を使っています

クラスやメソッドにカーソルを合わせて[Shift]+[F2]を押すと
webブラウザでドキュメントを開くのですが
これをeclipseで観覧することは可能でしょうか?

他の方法でも何かeclipse自体でドキュメントを開く方法があれば教えてください。
288285:2008/10/24(金) 21:19:17
>>286
できました。
ありがとうございました!
289デフォルトの名無しさん:2008/10/25(土) 00:20:30
>>274
System.out.print(".");

OK?
290デフォルトの名無しさん:2008/10/25(土) 02:43:43
Hey!! Good evening Japanese Adult Video Artists!!

Do you film good Porno Video? Yes? So, good !
I look forward to watch your Hentai Video !
If Filming your porno video is finished, please teach me!!
Good-Bye!!!
291デフォルトの名無しさん:2008/10/25(土) 12:04:41
例外スルーはこんな方法しかないですか?
try
{
  port = Integer.parseInt(s);
}
catch(NumberFormatException e)
{
}
292デフォルトの名無しさん:2008/10/25(土) 12:46:12
無理やり関数化する。

port = Integer.tryParseInt(s, -1);

static int tryParseInt(string s, int returnValueIfFailed) {
 try {
  return Integer.parseInt(s);
 }
 catch {
  return returnValueIfFailed;
 }
}
293デフォルトの名無しさん:2008/10/25(土) 12:56:04
>>292
面倒だけど今そうやってます。
294デフォルトの名無しさん:2008/10/25(土) 13:23:54
>>293
なんで面倒なの?一回作ったらそれで終わりじゃん。
295デフォルトの名無しさん:2008/10/25(土) 13:26:40
C#のTryGetValueに比べて効率が悪いから、
Sun JDKのparseIntを元に改良したいんだけど、これってライセンス的にNG?
GPL classpath exceptionで公開されてるコードを落として来る方がいいのかな。
296デフォルトの名無しさん:2008/10/25(土) 13:30:45
>>295
openjdkからパクってくればGPLだけど。
297デフォルトの名無しさん:2008/10/25(土) 14:44:38
Win32のGetLastError方式でparseIntを実装してみたが、例外処理はさすがに重いね。
以下のベンチでInteger.parseIntは547ms、ラストエラー方式(ThreadLocal使用)は125msだった。
まあ実運用ではこんな性能誤差だけど、コードはちょっとすっきり。
試す場合はJDKのコードを各自で改変してくらさい。

    public static void main(String[] args) {
        String[] input = {
            "1234", "1234", "1234", "123a",
            "1234", "1234", "1234", "123a",
            "1234", "1234", "1234", "123a",
            "1234", "1234", "1234", "123a"
        };
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            int jlen = input.length;
            for (int j = 0; j < jlen; j++) {
// try {
// Integer.parseInt(input[j]);
// } catch (NumberFormatException ex) {
// }
                parseInt(input[j]);
                isInvalidByLastFormat();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }
    public static boolean isInvalidByLastFormat() {
        FormatResult result = tlformatFormat.get();
        return result.invalid;
    }
298デフォルトの名無しさん:2008/10/25(土) 16:02:33
質問です

コマンドラインに数値を入力する際
x = Integer.parseInt(args[0]);
を使っているのですが、何も入力されなかったとき、もう一度入力させるためにはどうしたらいいでしょうか?

上の式をdo~while(args[0]==null)
でかこって試してみたのですが、だめでした。

299デフォルトの名無しさん:2008/10/25(土) 16:13:27
少なくともコマンドライン引数を再入力させることはできん。
コマンドライン引数がそのプログラムの使用に合わないなら、
エラーを返してプログラムを止めてしまうのが通例。

まあユーザとパスワードぐらいなら、中で再入力機能を作るだろうけど。
Scanner in = new Scanner(System.in);とか使えばいい。
300デフォルトの名無しさん:2008/10/25(土) 16:19:06
>>298
args.lengthが0の時はコマンドライン引数を与える必要があるとの使い方を示して終了させる。
if (args.length == 0) {
使い方の表示;
return;
}
これをmainの最初に行う。
コマンドライン引数をコマンドライン引数として与えられるのは起動する時だけ。
もし、コマンドライン引数が無いときにその旨を表示して引数としてではなく
代わりの何かを標準入力からargs[0]に代入したいのなら、
if (args.length == 0) {
args = new String[1];
引数が無かったので何か入れてねと表示;
args[0] = new Scanner(System.in).nextLine();
}
x = Integer.parseInt(args[0]);
みたいなことをmainの頭でやる。argsをここ以外で使わないのなら、
新たなargsを作らずに直接入力をxに変換してもいいけど。
301298:2008/10/25(土) 16:28:31
>>299,300
なるほど~
コマンドライン引数は、はじめに与えることしかできないのですね
Scanner~に関してはまだ習ってないので
ここでは
if (args.length == 0)
を使い、プログラムを止めてしまう方向でやってみたいと思います。
とても参考になりました。ありがとうございました。
302デフォルトの名無しさん:2008/10/25(土) 20:38:46
クラスメソッドの中でthisキーワードを使えないは理解できるんですが、superまで使えない仕様は何か理由があるのでしょうか?
クラスメソッドであろうとインスタンスメソッドであろうと同じように親クラスを特定できるはずです。
303デフォルトの名無しさん:2008/10/25(土) 20:50:38
>>302
そんな事いったらクラスメソッドであろうとインスタンスメソッドであろうと
同じように自分のクラスを特定できるはずだから、
this が使えないのも super が使えないのと同じ理由で納得できないと思うんだが。
304デフォルトの名無しさん:2008/10/25(土) 20:53:14
superにもインスタンス参照が含まれるからでしょ。
protectedなら親クラス指定してアクセス出来なかったっけ?
305デフォルトの名無しさん:2008/10/25(土) 21:03:18
うぁぁあぁあああ~~~~~!!!!
何で関数が渡せないんだ?
何で関数が返せないんだ?
306302:2008/10/25(土) 21:08:14
>>303
thisはクラスではなく自分のインスタンスに対して処理してたはずです。
>>304
親クラスにアクセス可能であればsuperが使えるということですか?
307デフォルトの名無しさん:2008/10/25(土) 21:09:42
まず、あなたはsuperの存在をsuper勘違いしている。
308デフォルトの名無しさん:2008/10/25(土) 21:35:10
サーブレットについて質問です。
ServletContextスコープのgetAttributeNames()を実行して、
while(Enumerationオブジェクト.hasMoreElements()){
String key = (String)Enumerationオブジェクト.nextElement();
Object val = ServletContextオブジェクト.getAttribute(key);
}
という風に次々とServletContextスコープにsetAttribute()した物を取り出そうとしたのですが、
key = "WELCOME_File"という謎な初期パラメータが入っており上手くいきません。
解決法っぽいことをご存じの方ご教授下さい。
309308:2008/10/25(土) 21:40:53
失礼 環境は
os:xp
tomcat:6.1
です。
310デフォルトの名無しさん:2008/10/25(土) 22:50:59
>>302
まず、T の上位クラスが S であると仮定する。クラスTにおいて
T.super.name および、super.name は (S)this.name であるように処理される。
コンパイル時に名前解決が出来ない場合、エラーとなる。

まー、thisから逃れられない仕様になっています、と。
311デフォルトの名無しさん:2008/10/25(土) 23:51:55
import java.io.*;

public class Sample2_7 {

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

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

int test[] = new int[5];
System.out.println(test.length + "人の点数を入力して下さい");

for(int i=0; i<test.length; i++){
String str = br.readLine();
test[i] = Integer.parseInt(str);
}

for(int s=0; s<test.length-1; s++){
for(int t=s+1; t<test.length; t++){
if(test[t] > test[s]){
int tmp = test[t];
test[t] = test[s];
test[s] = tmp;
}
}
}

for(int j=0; j<test.length; j++){
System.out.println((j+1) + "番目の人の点数は" + test[j] + "です");
}
}
}
312311:2008/10/25(土) 23:53:06
上記のソースの、ソート部分が理解できませんので、解説お願い致します。

for(int s=0; s<test.length-1; s++){
for(int t=s+1; t<test.length; t++){
if(test[t] > test[s]){
int tmp = test[t];
test[t] = test[s];
test[s] = tmp;


です。
313デフォルトの名無しさん:2008/10/25(土) 23:53:17
>>305
つScala
314デフォルトの名無しさん:2008/10/25(土) 23:59:14
>>312
バブルソート
315311:2008/10/25(土) 23:59:19
事故解決しますた
316311:2008/10/26(日) 00:01:55
すみません、やはり未解決で
"test.length-1;"は、縦方向の最後が不要だからでしょうか?
317311:2008/10/26(日) 00:06:16
すみません・・・日本語が変でした
"test.length-1;"の、"-1"は縦方向の最後が不要だからでしょうか?

あと、"test.length-1;"を"test.length; "こうしても
実行結果が同じになりますが、"-1"にする必要がないと?
318デフォルトの名無しさん:2008/10/26(日) 00:11:20
最後の s = test.length - 1 のとき、
内側の for(int t=s+1; t<test.length; t++) が何回繰り返されるか考えてみるといいんじゃない
319311:2008/10/26(日) 00:43:53
レス、ありがとうございます
バブルソートでぐぐったりしましたが、理解できません
特に
int tmp = test[t];
test[t] = test[s];
test[s] = tmp;
これらです・・・・
320302:2008/10/26(日) 03:00:43
>>310
なるほど・・・内部でthisを呼んでたわけですね。
すっきりしました。ありがとうございました。
321デフォルトの名無しさん:2008/10/26(日) 13:39:04
スレッドって具体的にどういう時に使うんですか?
ある程度大きなプログラムになるとパフォーマンス向上のためにほとんどのメソッドがスレッドになったりするんですか?
322デフォルトの名無しさん:2008/10/26(日) 13:49:35
処理開始ボタンを押すと「応答無し」になるプログラムあるだろ。
そういうふうになら無いようにするには、処理をするスレッドと
ボタンが押されたかどうか判定するスレッド分けておく。
キャンセルボタンで処理を中断できるようにするには、マルチスレッドが必要。
323デフォルトの名無しさん:2008/10/26(日) 16:14:10
Swingでユーザースレッドでやってはまるんですね。わかります。
324デフォルトの名無しさん:2008/10/26(日) 16:17:44
すいません「href」ってなんて読むんですか?
325デフォルトの名無しさん:2008/10/26(日) 16:24:18
Hypertext REFerence?えいちれふ
326デフォルトの名無しさん:2008/10/26(日) 16:24:33
フレッフ
327デフォルトの名無しさん:2008/10/26(日) 16:25:15
>>305
何をしたいかは分からないけど
リフレクションについて調べれば
なんかのヒントになるかも知らん
328デフォルトの名無しさん:2008/10/26(日) 16:31:41
エクリプスでjdk1.6.0_07\docs\ja\api\index.htmlを開こうとしたら
「解凍されたファイルであることを確認してください」
って出て開けません><
解凍はされてると思うんですがこれはどうやったら開けるの?
329>>324:2008/10/26(日) 16:52:17
>>325
>>326
ありがとうございました<(_)>
330デフォルトの名無しさん:2008/10/26(日) 18:26:23
物凄い初歩な質問させて下さい。
C++でいう
void set(int& x)
{
 x = 10;
}
をJAVAではどうすればいいのでしょうか。
331デフォルトの名無しさん:2008/10/26(日) 18:30:53
void set(int[] x) {
x[0] = 10;
}
332デフォルトの名無しさん:2008/10/26(日) 18:32:07
>>331
配列にしないと駄目なんですか?!
うーん…
333デフォルトの名無しさん:2008/10/26(日) 18:33:13
Javaに参照渡しはないから
334デフォルトの名無しさん:2008/10/26(日) 19:17:14
>>332
別に配列以外でもいいけど。

Javaでは参照渡しがない上に、標準ライブラリで参照渡しの代わりに使う
標準的な型ってのが用意されてない。だから人によって配列使ったり
AtomicInteger 使ったり、MutableInteger 自作したり、メソッド構造変えたりしてる。
335デフォルトの名無しさん:2008/10/26(日) 19:27:56
>>332-334
Integerとしてarraycopy使ったら何とかなるかなとか試行錯誤しましたが、駄目でした。
配列とかAtomicIntegerとか引数の形を複雑にするのがなんか気分的に嫌なので、
単純な方法が無いなら諦めます。
どうも有難うございました。
336デフォルトの名無しさん:2008/10/26(日) 19:51:45
ていうか

void set(int& x)
{
 x = 10;
}

javaでこれを使う設計ってない(orやらない)。
out引数とか別にいらないでしょ。
337デフォルトの名無しさん:2008/10/26(日) 20:00:30
なんでデータ取得するのに、メソッド名が setなんだよ。
そういう意味不明なところから察するに、たぶんやらなくていいことやろうとしてる。
338デフォルトの名無しさん:2008/10/26(日) 20:01:25
C/C++からなるべくベタっとコードを移植したいという要件も少なからずあるだろうから
設計レベルでやらないから、と門前払いするのはどうかと
339デフォルトの名無しさん:2008/10/26(日) 20:02:35
その可能性は低い。
340デフォルトの名無しさん:2008/10/26(日) 20:03:23
int set()
{
return 10;
}
でいいじゃん。
341デフォルトの名無しさん:2008/10/26(日) 22:28:42
解決した事に対してしつこいんだって
342デフォルトの名無しさん:2008/10/26(日) 23:08:30
\を\\でPrintしたら¥になるんですがどうすれば\のまま出力してくれますか?
343デフォルトの名無しさん:2008/10/26(日) 23:22:40
System.out.printlnの話なら
Javaのソース側から無理
Fontの問題だからbashやコマンドプロンプトの設定で変える

344デフォルトの名無しさん:2008/10/26(日) 23:37:19
>>342
Windowなら、chcp 437すればバックスラッシュに。
元に戻すにはchcp 932で。
345デフォルトの名無しさん:2008/10/26(日) 23:41:51
>>343-344
ありがとうございます
346デフォルトの名無しさん:2008/10/26(日) 23:47:52
>>343
OFile.Printlnの場合もおなじですか?
347デフォルトの名無しさん:2008/10/27(月) 04:05:32
>>346
OFile.printlnって何か分からないけど、outputstreamとかjava.io.Writerの派生クラスとかつかっても指定できるのはunicodeから変換する文字コードを指定できるだけでFontは指定できない
ファイルに出力した場合はメモ帳等利用するプログラムののフォント設定による。
もしバックスラッシュを表示させるなら、
メモ帳、コマンドプロンプトFont設定を変える
word、pdf等のFont情報を指定できるファイルの構造になるよう出力する
画像に変えるとかとか
if('¥'=='\')//ともに本来は半角
みたいなコードは書けないはず。(文字ごとに別のフォントを設定できるWord等は除く)
無理やりコピペとかでもってくるとどっちかに変るはず(Eclipseとかのフォント設定による)
てか、バックスラッシュと円記号の区別はDPE業界じゃないかぎり必要ないと思う
348デフォルトの名無しさん:2008/10/27(月) 11:48:22
LinuxでJavaのプロセス数がどんどん上がって下がらないです。

Tomcatを使って1つのアプリケーションを動かしていて、
他にはJava使っていないので、そのアプリケーションが原因だと思いますが、
その中のどの部分がどう悪さしているのか?が判らない状態です。

どう調査すればいいのか、検討が付かないので、調査方法などのアドバイスをしてほしいです。
お願いいたします。
349デフォルトの名無しさん:2008/10/27(月) 12:34:25
Linuxでは、Javaのスレッドがそのままプロセスとして見えるだけです。
常識です。
350デフォルトの名無しさん:2008/10/27(月) 12:40:55
テキストエディタを作ってるのですけど
右クリックでポップアップメニューを表示させたいのです
しかしJTextPaneにaddMouseLisnerは登録できないようなのですが
どうすれば良いのでしょうか?
351デフォルトの名無しさん:2008/10/27(月) 13:03:35
JComponent#setPopupMenu(JPopupMenu) すれば
LaF依存の操作でポップアップ表示してくれる。
352デフォルトの名無しさん:2008/10/27(月) 13:04:05
× JComponent#setPopupMenu(JPopupMenu)
○ JComponent#setComponentPopupMenu(JPopupMenu)
353デフォルトの名無しさん:2008/10/27(月) 13:27:43
おお、なんだかできそうですね!
ありがとうございます、やってみます
354デフォルトの名無しさん:2008/10/27(月) 15:09:22
適当なスレが見あたらなかったので、ここで質問させてください。

Tomcat5.5のJNDIのスコープに関しての質問です。

Tomcatのcontext.xmlに<Resource>タグでJNDIリソースを
書き、
Webアプリ内で、それを参照しています。

このとき、webアプリ1とwebアプリ2のそれぞれのcontext.xmlで、同一の名前を設定しています。
(Resourceタグのname属性を同じに)

その後、name属性以外の情報を変更し、アプリを配備した場合、
それぞれのアプリで設定したcontext.xmlでの内容が反映されるでしょうか?

以前はうまくいっていたと思うのですが、今やってみようとすると
うまく動かないので悩んでいます。

よろしくお願いします。
355デフォルトの名無しさん:2008/10/27(月) 15:37:56
以下のソースの違いが、わかりません
結果が同じになりますが、どちらでもいいのでしょうか?

356355:2008/10/27(月) 15:38:50
import java.io.*;

public class Sample2_1 {

public static void main(String[] args) throws IOException{
System.out.println("テストの受験者数を入力して下さい");

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

String str = br.readLine(); //配列要素の数を入力させる
int num = Integer.parseInt(str); //必要な数だけ配列要素を準備

int test[];
test = new int[num]; //num分を用意(例:5個[0][1][2][3][4]←配列要素)

System.out.println("人数分、入力して下さい");

for(int i=0; i<num; i++){ //numの分繰り返す
str = br.readLine(); //キーボードから必要な数だけ点数を入力させる
int tmp = Integer.parseInt(str); //←ここに注目
test[i] = tmp; //配列要素に点数を格納する例:5個[0]=1 [1]=2 [2]=3 [3]=4 [4]=5←配列要素 4まで?
}
System.out.println("出力します");

for(int i=0; i<num; i++){ //
System.out.println((i+1) + "番目の人の点数は" + test[i] + "です");
//1回目[0]=10、2回目[1]=20、3回目[2]=30、4回目[3]=40、5回目[4]=50を繰り返していく(出力)?
}
}
}
357355:2008/10/27(月) 15:39:59
import java.io.*;

public class Sample2_1 {

public static void main(String[] args) throws IOException{
System.out.println("テストの受験者数を入力して下さい");

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

String str = br.readLine(); //配列要素の数を入力させる
int num = Integer.parseInt(str); //必要な数だけ配列要素を準備

int test[];
test = new int[num]; //num分を用意(例:5個[0][1][2][3][4]←配列要素)

System.out.println("人数分、入力して下さい");

for(int i=0; i<num; i++){ //numの分繰り返す
str = br.readLine(); //キーボードから必要な数だけ点数を入力させる
test[i] = Integer.parseInt(str); //←ここに注目

}
System.out.println("出力します");

for(int i=0; i<num; i++){ //
System.out.println((i+1) + "番目の人の点数は" + test[i] + "です");
//1回目[0]=10、2回目[1]=20、3回目[2]=30、4回目[3]=40、5回目[4]=50を繰り返していく(出力)?
}
}
}
358355:2008/10/27(月) 15:41:02
"←ここに注目の部分です"
359デフォルトの名無しさん:2008/10/27(月) 16:19:03
どちらでもいいよ
360355:2008/10/27(月) 18:03:50
レス、ありがとうございます。

どうしてなのでしょうか?直接代入するか否かの違いですかね?
361デフォルトの名無しさん:2008/10/27(月) 18:22:57
そう。そんだけ。
362デフォルトの名無しさん:2008/10/27(月) 19:49:00
インターフェースのメソッド宣言の前に、「@クラス名」と書かれているのはどういう意味でしょうか?

public interface Test{
@SomeClass
public int getNum():
}

みたいな感じです
363デフォルトの名無しさん:2008/10/27(月) 19:58:55
アノテーション
364デフォルトの名無しさん:2008/10/27(月) 20:01:56
>>363
ありがと。ググったらわかりそうだ。java 5からの機能なのか・・
365デフォルトの名無しさん:2008/10/27(月) 22:41:22
>>362
今使ってる参考書を捨てなくてもいいけどjdk5の新機能は軽く見ておいた方がいいかと ジェネリックスとか
366355:2008/10/27(月) 23:16:12
再度、質問で申し訳ありませんが、
どうして、この最後の

for(int i=0; i<num; i++){ //
System.out.println((i+1) + "番目の人の点数は" + test[i] + "です");

for(int j=0; j<num; j++){ //
System.out.println((j+1) + "番目の人の点数は" + test[j] + "です");

iでなくjとiを変えてもいいのでしょうか?こも、同じ結果になります。

367デフォルトの名無しさん:2008/10/27(月) 23:36:26
質問です
try{}catch{}でデータベースから項目を読み込み、System.out.printlnで出力させることはできました
このデータベースの項目をapplet上に表示させるのがどうしても出来ないのですが何か手段はありますか?
368デフォルトの名無しさん:2008/10/27(月) 23:38:45
エラーなく動きゃあ問題ねえだろてやんでー
369355:2008/10/27(月) 23:48:55
>>368
どうしてか、とても気になりまして・・・
ずっと悩んでいます
370デフォルトの名無しさん:2008/10/28(火) 00:07:43
>>366
ローカル変数名変えてるだけ
371355:2008/10/28(火) 00:53:26
>>369
レス、サンクスです。
ローカル変数名を変えると、値は違ってくるのではないでしょうか?
では、参考書などでは解りやすくする為に変数名だけを変えていると?
372デフォルトの名無しさん:2008/10/28(火) 00:53:51
Javaを勉強しようとしています。
JavaのSDKをダウンロードしようとしたところ、J2SE1.4.1は終了とのことですが。。
なにからはじめたらよいのでしょうか?
新しいSDKは古いSDKとまったく違うのであれば、新しいほうからはじめたいと思います
(たぶん機能追加だと思いますが。)
どのSDKからはじめるべきですか?

373デフォルトの名無しさん:2008/10/28(火) 01:07:45
新しいのから始めたければ新しいのから始めたらいいじゃない。
374デフォルトの名無しさん:2008/10/28(火) 01:37:15
>>371
>ローカル変数名を変えると、値は違ってくるのではないでしょうか?
なにが疑問なのかよくわからん。
代入した時test[i]なのに取り出す時はtest[i]で無くてもいいのかって質問?
とりあえず、test[j]だとどういう値になると思っているのか書いてみて。

>参考書などでは解りやすくする為に変数名だけを変えていると?
どういう意図があって変数名を変えているのかなんて事、その参考書書いた奴にしかわからんと思うよ。
375デフォルトの名無しさん:2008/10/28(火) 01:37:55
>>371
箱に付けてるラベルを貼り替えてるだけで、中身が変わるわけじゃないから。
リンゴの入ってる箱に「リンゴ」ってラベルを付けて「あの『リンゴ』の箱取ってきて」って言う場合と、
リンゴの入ってる箱に「ミカン」ってラベルを付けて「あの『ミカン』の箱取ってきて」って言う場合で、
動作に何か違いはあるか?
376355:2008/10/28(火) 03:40:42
>>374
>>とりあえず、test[j]だとどういう値になると思っているのか書いてみて。
エラーを、起こすとおもっていました。

>>どういう意図があって変数名を変えているのかなんて事、その参考書書いた奴にしかわからんと思うよ。
にかんしても、>>357->>357
int tmp = Integer.parseInt(str); //←ここに注目
test[i] = tmp;

test[i] = Integer.parseInt(str); //←ここに注目
も、作者の考え次第って事ですね

>>375
はぁ~、そういう事でしたか

377355:2008/10/28(火) 03:41:34
>>356->>357 ですた、訂正・・・
378355:2008/10/28(火) 03:49:17
>>375
中身は同じリンゴには、変わりありませんね
動作もラベルが違うだけで、動作自体同じです
379デフォルトの名無しさん:2008/10/28(火) 10:00:20
コンパイルして実行すると文字化けしてしまうのはなぜでしょう。
380デフォルトの名無しさん:2008/10/28(火) 10:02:56
>379
keyword> javac encoding
381デフォルトの名無しさん:2008/10/28(火) 11:15:12
ArrayListクラスとListインターフェイスに付いて
質問させてください。

ArrayListクラスを使ったサンプルを見る度に、
次のような記述をよく見かけます。

 List ls = new ArrayList();

基本情報技術者の試験問題に於いては、ArrayListクラスを生成する際、
頻繁にListインターフェイスが用いられています(上記の様な生成記述)。

『 ArrayList als = new ArrayList(); 』で良い気がするのですが、
Listインターフェイスを用いる事で、どの様な恩恵が受けられるのでしょうか?

ご存知の方、ご教授ください。よろしくお願いします。
382デフォルトの名無しさん:2008/10/28(火) 11:32:35
>>381
Listを用いる際に頻繁にArrayListのインスタンスを使用しているだけ
と考えると悩まずに済む、かも?
383デフォルトの名無しさん:2008/10/28(火) 11:35:08
>>381
後々何かの事情で LinkedList や CopyOnWriteArrayList や Vector に変えたくなっても
共通の List インタフェイスを使っていれば new の部分だけ変えれば済む
384デフォルトの名無しさん:2008/10/28(火) 12:05:43
Flashでよくある読み込み進捗プログレスバーみたいなものを
アプレットで画像を読み込む時にやりたいのですが可能ですか?
385デフォルトの名無しさん:2008/10/28(火) 12:18:29
可能です
386デフォルトの名無しさん:2008/10/28(火) 12:30:05
>>381
使いたいのはあくまでListであって、ArrayList型を使いたいわけではないから。
387デフォルトの名無しさん:2008/10/28(火) 19:09:47
>>381
Polymorphism の典型的なパターン
わからんかったらgoogleに聞きなさい
388デフォルトの名無しさん:2008/10/28(火) 19:25:10
JOptionPane.showConfirmDialog()のOKボタンは何ピクセルですか?
389381:2008/10/28(火) 19:27:57
>>382 >>383 >>386 >>387
遅レスになりました。ご教授ありがとうございます。

リスト構造の機能を提供してくれるクラスが多数用意されており、
それらがListインターフェイスを実装している。

何らかの事情により、現在使用しているリスト構造クラスから
別のリスト構造クラスへと乗り換える必要が発生しそうな可能性を持つ
プログラムを開発する時に、そのリスト構造クラスのインスタンスを
Listインターフェイスで初めから管理しておけば、乗り換えが発生した時の
移行が容易になるから。

と言う事ですね。今まで良く分からなかったインターフェイスの存在意義
ですが、少し見えてきた気がします。ありがとうございました。
390デフォルトの名無しさん:2008/10/28(火) 19:31:06
>>389
このポリモーフィズムはリストに限らず、いろんなんで使うから頭入れといたほうがいいよ。
デザインパターンとか、そのうちやるだろうけど。
391デフォルトの名無しさん:2008/10/28(火) 19:44:44
>>384ですが、具体的にどうやればいいんでしょうか?
調べた限りだとメディアトラッカーは目的に即してないようですし
通常の非同期読み込みでもデータを受信している間は反応が無いようです
知りたいのは、画像が今全体の何%読み込まれているかという情報です
392デフォルトの名無しさん:2008/10/28(火) 19:53:43
SWING JProgressBarで検索してみたらヒントあると思うよ!
393デフォルトの名無しさん:2008/10/28(火) 20:08:47
>>389
詳細に関する情報を積極的に削除することで、
開発者が一度に管理しなければならない情報を減らすため。
この例で、ポリモーフィズム云々は言いすぎじゃまいか
394デフォルトの名無しさん:2008/10/28(火) 20:38:38
遊びにきてね!
Javaゲーム作成総合スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1225185820/
395デフォルトの名無しさん:2008/10/28(火) 20:49:23
ポリモーフィズム関係ないなら
ArrayList als = new ArrayList();で良い気がする
396デフォルトの名無しさん:2008/10/29(水) 00:22:54
ポリモーフィズム関係あると
ArrayList als = new ArrayList(); じゃダメな理由が良くわからん。
397デフォルトの名無しさん:2008/10/29(水) 01:05:08
1234にnumberFormatでカンマをつけると、1,234というようになりますが、
1,234から元の1234という数字を取得することはできるでしょうか。
よろしくお願いします。
398デフォルトの名無しさん:2008/10/29(水) 01:14:13
質問です。

JFreeChartに関してなんですが、
ChartPanelをJFrameにaddして表示したときに、

ウィンドウサイズを変更するとチャート上の文字や線も
そのサイズに応じて太くなったり細くなったりしてしまいます。

JFrameのウィンドウサイズにかかわらずChartPanel上の文字や線の太さを
一定にしたいのですが、どうやってやるのかご存じの方いませんか?
399デフォルトの名無しさん:2008/10/29(水) 01:43:04
>>398
JFrameに一旦スクロールペインを貼って、そこに固定サイズのChartPanelを貼ればいいけど
多分そういう意味じゃないよね?
ちょこちょこっとオリジナルレンダラを作るしかないのでは
400デフォルトの名無しさん:2008/10/29(水) 01:48:05
class Car{
int num;
double gas;

void show1(){ //メソッドを定義しておく
System.out.println("車のナンバーは" + num + "です");
System.out.println("ガソリンの量は" + gas + "です");
}

void show2(){ //メソッドを定義しておく
System.out.println("第二の車のナンバーは" + num + "です");
System.out.println("第二のガソリンの量は" + gas + "です");
}
}

401デフォルトの名無しさん:2008/10/29(水) 01:49:40
public class Sample3_2 {

public static void main(String[] args) {

Car car1;
car1 = new Car();
car1.num = 1234;
car1.gas = 20.5;

Car car2;
car2 = new Car();
car2.num = 5678;
car2.gas = 21.6;

car1.show1();
car1.show1();

car2.show2();
car2.show2();
}

}

エラーを起こしてしまい、原因がわかりません
訂正お願いいたします
402デフォルトの名無しさん:2008/10/29(水) 02:59:28
フィールドにpublicつけなさい。というか参考書は選びなさい。その本はごみだ。
403デフォルトの名無しさん:2008/10/29(水) 03:57:40
>>402
ありがとうございます
404デフォルトの名無しさん:2008/10/29(水) 03:58:41
class Car{
int num;
double gas;


void show1(){ //メソッド
System.out.println("車のナンバーは" + num + "です");
System.out.println("ガソリンの量はは" + gas + "です");
}

void show2(){ //メソッドを定義しておく
System.out.println("第二の車のナンバーは" + num + "です");
System.out.println("第二のガソリンの量は" + gas + "です");
}

void showCar(){
System.out.println("これらの情報を表示します");
show1();
show2();
}

}
405デフォルトの名無しさん:2008/10/29(水) 03:59:37
class Mikaiketu3{

public static void main(String args[]){

Car car1;
car1 = new Car();

car1.num = 1234;
car1.gas = 20.5;

Car car2;
car2 = new Car();

car2.num = 5678;
car2.gas = 21.6;


car1.showCar(); //クラス外なので、特定が必要であり"caer1."が要る

}
}

406デフォルトの名無しさん:2008/10/29(水) 04:04:41
を、実行すると
C:\sou>java Mikaiketu3
これらの情報を表示します
車のナンバーは1234です
ガソリンの量はは20.5です
第二の車のナンバーは1234です
第二のガソリンの量は20.5です

結果を
C:\sou>java Mikaiketu3_2
これらの情報を表示します
車のナンバーは1234です
ガソリンの量はは20.5です
第二の車のナンバーは5678です
第二のガソリンの量は21.6です

したいのですが、どうすればいいでしょうか?

因みに、クラス外でやるのではなく
car1.showCar();
car1.show1();
car2.show2();

このクラス内でやる場合です。
void showCar(){
System.out.println("これらの情報を表示します");
show1();
show2();
}


407デフォルトの名無しさん:2008/10/29(水) 05:15:47
ちなみに>>400のコードはC++しか書けない数学者が自分の書いたC++本をjavaにベタ移植してそのまま出した屑本のサンプルな。
408デフォルトの名無しさん:2008/10/29(水) 06:14:17
ひどs
409デフォルトの名無しさん:2008/10/29(水) 06:15:08
誤 C++しか書けない数学者
正 C++すらろくに書けない数学者
410デフォルトの名無しさん:2008/10/29(水) 09:14:23
JAVAでwaveファイルの音量を調整したいのですが可能なのでしょうか?
可能であれば、調節するための関数を教えていただけないでしょうか?
411デフォルトの名無しさん:2008/10/29(水) 10:13:57
プログラムの何かを習得したくjavaを覚えたいと考えています
右も左も分からないのですが、何から始めたらいいでしょうか?
いきなり難しい本を買ってもわからないと思います
アドレスお願いします
412デフォルトの名無しさん:2008/10/29(水) 10:14:38
>>410
javax.sound.sampled あたり見てみれば?
413デフォルトの名無しさん:2008/10/29(水) 10:19:58
しまったアドバイスお願いしますですw
414デフォルトの名無しさん:2008/10/29(水) 10:35:46
>>411
プログラム初心者なら、まず「javaの絵本」
415デフォルトの名無しさん:2008/10/29(水) 11:09:02
ServletContext に set/geAgttribute でDB接続用クラスのインスタンスを入れて
シングルトンみたいにして使ってるんですがこれってよくないですか?

jsp では
<jsp:useBean id="dbProc" scope="application" class="proc.DbProcessor" />

servlet では
proc.DbProcessor dbProc = null;
synchronized (context) {
  dbProc = (proc.DbProcessor) context.getAttribute("dbProc");
  if (dbProc == null){
    dbProc = new proc.DbProcessor();
    context.setAttribute("dbProc", dbProc);
  }
}

として使ってます。
DbProcessor はきちんと同期化されていると思います。

デメリットはgetのContextへのロックくらいだと思うんですが、
参照渡ししてるだけなのでさほどオーバヘッドにはなりづらいと考えています。
416デフォルトの名無しさん:2008/10/29(水) 11:27:20
transactionはどうするつもりなんだろ
417デフォルトの名無しさん:2008/10/29(水) 12:11:32
そのDbProcessorの作りにもよるから、それだけではなんとも。
418デフォルトの名無しさん:2008/10/29(水) 12:35:53
>>414 回答ありがとうございます!
javaの絵本ですか、ググってみます
419デフォルトの名無しさん:2008/10/29(水) 12:50:06
>>416
DBのトランザクションですか?
 >>417
クラス変数を持たず、
メソッドの集まりみたいなクラスです。

また、どのような設計だとまずいでしょうか?
420デフォルトの名無しさん:2008/10/29(水) 14:42:35
あの数学者の本は言葉が難しくなってるだけでやさしいjavaとどっこいどっこいだからな。
421デフォルトの名無しさん:2008/10/29(水) 14:52:18
>>419
(クラス変数でなくても)フィールドでConnectionを持っているとまずい。
Connectionのクローズ、トランザクションのコミット/ロールバックは
どこが責任を持つのか明確でないとまずい。
422デフォルトの名無しさん:2008/10/29(水) 15:13:10
Connection はインスタンス変数の pool から取得しています。
pool はインストラクタで JNDI でコンテナから取得しています。
close commit rollback はメソッド内で完結させています。
423デフォルトの名無しさん:2008/10/29(水) 15:27:15
インストラクタ(笑)
424デフォルトの名無しさん:2008/10/29(水) 15:29:33
やべー素で間違えたwwww超ハズカシイ><
425デフォルトの名無しさん:2008/10/29(水) 15:31:01
じゃ、概ね大丈夫じゃね?
インストラクタ(笑)でDataSourceの取得に失敗すると
インスタンス化そのものに失敗するので、そのあたりの例外のハンドリングができていればね。

あとは、Servletでコネクションをどうこうするのが気持ち悪いと思わなければ、
426デフォルトの名無しさん:2008/10/29(水) 15:48:43
DataSourceの失敗したときにインストラクタ(笑)内で
RuntimeExceptionが発生するようにしてあります。

DB処理の部品をContextに持たせて使いたいときに使うって言うイメージなんですが、
普通はどうやって実装するんでしょうか?
427デフォルトの名無しさん:2008/10/29(水) 16:33:25
jtable.getColumnModel().getColumn(i).setCellEditor(new DataEnterFrame());
としようとしてDataEnterFrame extends JFrameだった場合、containerに(JFrameの親の親)windowは
addingできませんって怒られるんですけど、JTableのエディタにJFrameを指定することってできないんですか?

仕方がないのでsetCellEditor(new DataEnterPanel())//DataEnterPanel extends JPanelしたら今度は
DataEnterPanelのがJTableの該当セル1つ分の大きさまでしか表示してくれないんですが
どうすればうまくいくでしょうか?
428デフォルトの名無しさん:2008/10/29(水) 17:07:08
>>427
ボタンでも入れておいてそれ押したらダイアログ出すとかすればいいんじゃないか?
429デフォルトの名無しさん:2008/10/29(水) 18:03:23
ははぁ、ボタンですか
少し違うんですけど、結局setCellEditorで呼び出されるのは
セル上の描画だからWindow(or Frame)は呼べなくて、
エディタでsetValueAtするComponentを呼びつつreturn nullする
って方向でもいいのかな?
これでモーダルにできたらとりあえずよさそうです

そういえばdialogもwindowなのになんで怒られないんだ
最初chooserができるんだから普通にできると思ったんだけどchooserもdialogだったな
430デフォルトの名無しさん:2008/10/29(水) 20:13:03
オブジェクトを
空の配列a(動的)に加える操作ってどうやるんですか?

またそのオブジェクトでパブリックしたint型変数k(初期値0)を、
こんなイメージで操作できますか?
a[0].k=1
431デフォルトの名無しさん:2008/10/29(水) 20:15:45
class MyObject { public int k = 0; }
public class Test { public static void main(String[] args) {
MyObject[] a = new MyObject[1];
a[0] = new MyObject();
a[0].k = 1;
}}
432デフォルトの名無しさん:2008/10/29(水) 20:34:42
>>431

動的にしたいのでa配列の要素数の初期値は不定でお願いします。

また引数ありのコンストラクタMyObjectにしたいです。
433デフォルトの名無しさん:2008/10/30(木) 00:03:51
携帯電話で使えるスケジュール機能の付いたカレンダーを作るために、
書店でjavaの本を探してみたのですが、
ホームページで利用する事を目標にした本しか見つけられず困っています。
出来るだけサーバーへのアップはせずに作りたいのですが…

javaでカレンダーを作るとき
どのような本やサイトを見ると良いか、教えていただけないでしょうか。
プログラム自体全く未経験で初めて触れるので
解りやすいものだと嬉しいです。
初心者以前の質問で申し訳有りませんが、よろしくお願いします。
434デフォルトの名無しさん:2008/10/30(木) 00:51:46
swingでAlwaysOnTopなフレームウィンドウを2つ以上表示した場合、
何か問題が起きるのでしょうか?
435デフォルトの名無しさん:2008/10/30(木) 00:53:18
特にないよ
436デフォルトの名無しさん:2008/10/30(木) 00:57:39
>>435
そうなんですか?競合して描画がおかしくなったりするのかと
思ってました。
437デフォルトの名無しさん:2008/10/30(木) 01:13:56
>>436
実際におかしくなったのかい?
もしそうなら問題を起こすサンプルを
438デフォルトの名無しさん:2008/10/30(木) 04:04:03
jarファイルをjre/lib/extに置くと、
クラスパス通さなくてもロードされると思うんですが、
jre/lib/extに相当するディレクトリを変更したり、
増やしたりってできないんでしょうか。

なんでもかんでもjre/lib/extに置いていってるので、
ディレクトリの中がぐちゃぐちゃになってしまっています。
439デフォルトの名無しさん:2008/10/30(木) 04:31:06
質問なのですが
今、Javaのクラスについて学んでいて、わからない事があります

クラスのメソッドを呼び出すときに、引数渡すのと、
渡さないで呼び出すのがありますが、違いがわかりません

440デフォルトの名無しさん:2008/10/30(木) 06:27:56
actionPerformedから他のメソッドを呼び出したいんだが、アクションイベントの継承?が出来ていない。
改善策を教えてください。

public void actionPerformed(ActionEvent e){
OtherMethod();
}

public void OtherMethod(){
.
.
.
}
441デフォルトの名無しさん:2008/10/30(木) 07:38:53
>>440
actionPerformedが呼ばれないというのであれば
・ActionListenerが継承されていない
・GUI側で生成されたコンポーネントに対してリスナが登録されていない、又は異なるリスナが登録されている
・実はOtherMethod()が何もせずに処理を戻している
くらいかな?(とエスパーしてみる)
442デフォルトの名無しさん:2008/10/30(木) 08:39:39
>>441
説明不足ですいません。

public void actionPerformed(ActionEvent e){
  Button bt = (Button)e.getSource();
}
と記述すればエラーを吐かないけど、

OtherMethod内にButton~..記述した際に、どのような記述をすればいいのかが分からないのです。

>*: シンボルを見つけられません。
>シンボル: 変数 e
とエラーを吐く。

すごく根本的な事だと思うんですが、よろしくお願いします。
443デフォルトの名無しさん:2008/10/30(木) 09:37:20
>>442
引数でOtherMethodにActionEvent eなりButton btなりを渡してやればいい。
444デフォルトの名無しさん:2008/10/30(木) 10:58:26
Swingのウインドウで、タイトルバーの厚みが何ピクセルあるかを取得する方法を教えてください。
445デフォルトの名無しさん:2008/10/30(木) 10:59:14
>>432
a = Arrays.copyOf(a, a.length + 1);
a[a.length - 1] = new MyObject(1, 2, 3);
446デフォルトの名無しさん:2008/10/30(木) 10:59:31
JDKの1.3.1をダウンロードしたのですが、

could not open 'C:\Program Files\Java\jre1.6.0_07\lib\i386\jvm.cfg

と出てきます。
何故1.6.0_07が出てくるのか分からないですが、
どうすればいいのでしょうか。
よろしくお願いします。
447デフォルトの名無しさん:2008/10/30(木) 11:14:50
なんでそんなPCクラックされるバグ持ちJDKを使うのか
448デフォルトの名無しさん:2008/10/30(木) 11:54:20
>>439
メソッドの中身をみてみりゃわかるでしょ。
使わないなら引数を渡さなくていい。
使うなら渡す。

それに何の疑問が?
449デフォルトの名無しさん:2008/10/30(木) 13:19:32
>>446
・最近のメーカー製PCには自社アプリで使うためによくJRE6が元から入ってる。
・ネット中にJREが古いからインスコされた
450446:2008/10/30(木) 15:17:32
>>449
有難うございます。
外でプログラムが組みたくて五万円のPCに
図書館でCDR付きのJAVAの本を借りてダウンロードしてみたんですが、
ネカフェでは出来たのにダメでした。
451デフォルトの名無しさん:2008/10/30(木) 15:19:08
コマンドプロンプトを起動するプログラムをjavaで作りたいのですが
Process process = Runtime.getRuntime().exec("start cmd");
を実行するとIOExceptionが発生してしまいます
コマンドプロンプト上でstart cmdと入力すれば問題なく二つ目が起動するのですが・・・・・・
どういう事が考えられるでしょうか
452デフォルトの名無しさん:2008/10/30(木) 15:47:17
>>451
Runtime.getRuntime().exec(new String[]{"cmd", "/K", "start", "cmd"});
startはcmdの中にしか存在しないコマンドなので直接startを呼び出すことはできない
453デフォルトの名無しさん:2008/10/30(木) 15:51:53
スレ違いだけどstart cmdでなくstartだけでも起動するね。
つまりcmd /k startでも可。
454デフォルトの名無しさん:2008/10/30(木) 15:59:45
>>452
なるほど、できました!!
ありがとうございます
455デフォルトの名無しさん:2008/10/30(木) 17:26:16
this.getClass() とすると自分のClassインスタンスを取得できるけど、
これと同じようなことをstaticメソッド内で行うにはどうすれば?
456デフォルトの名無しさん:2008/10/30(木) 17:30:49
MyClass.class
457デフォルトの名無しさん:2008/10/30(木) 17:40:28
>>456
ありがとう。
やりたいことが「クラス名の取得」なので、
それを行うコードにクラス名が出てくるのは何か変な感じがするけど、
そういうものなのかな?
458デフォルトの名無しさん:2008/10/30(木) 19:33:19
>>457
静的に定まっているクラスのClassインスタンスを得るなら、
.classを使うのが一番簡単だし特におかしいということはない。
間違って存在しないクラスのClassインスタンスを得ようとすれば
コンパイル時にエラーを吐いてくれるし。
クラス名を何らかの理由で変更する時にMyClass.classの記述部分も変えないといけないのが面倒だが、
変更の手間を少なくする手法はいろいろある。
ただ、動的にClassインスタンスを得たいということは当然あり得るので、
ClassクラスにはforNameというスタティックメソッドがあって、
Stringでクラス名を指定して、そのClassインスタンスを得ることはできる。
459133:2008/10/30(木) 23:23:25
println以外になにかいいのないのかなぁ
関数の呼び出し回数とか、HDDのreadが遅いのかThreadSleepなのかとか気になると思うんだけど
460デフォルトの名無しさん:2008/10/31(金) 01:37:49
JBossで一つのearの中にある複数のwar間でHttpセッションの共有は出来ますでしょうか
ググるとリプリケートは出てくるんですが
461460:2008/10/31(金) 01:41:51
acegiフレームワークを採用しており、J2EEコンテナの認証機能を使わなかったばかりに
war間での認証情報が共有できず悩んでいます
462デフォルトの名無しさん:2008/10/31(金) 12:07:25
>>457
元々の目的であるクラスの名前そのものが分かっているのだから、
わざわざClassインスタンスを取得するような回り道は変な感じがするのは当然だけど、
クラスの名前が確定していなくて変更する可能性があり、
直接そのクラス名をソース中に入れると後が面倒かもと気にするような場合であれば、
public class ChangeableNameClass {
private class UnchangeableName {}
static {
System.out.println(UnchangeableName.class.getEnclosingClass().getName());
}
}
のように名前を変更することのないダミーの内部クラスを作って、
それを囲うクラスのClassインスタンスを取得するという手もある。
463デフォルトの名無しさん:2008/10/31(金) 12:16:34
ECLIPSEでトーナメント表のようなウインドーで、
a.b.cというパッケージをつくったとするとします。
そうすると
aという欄と、a.bという欄とa.b.cという欄が別々にできてしまいます。
そこで、aを選んでaの中のbを選んでbの中のcを選ぶようにはできませんか?

もう一つ質問します。eclipseでジャバアプレットを作るときに
一つのjavaファイルに使うクラスをクラスを全部書き込むようなことできますか?

本当にこまっています。よろしくおねがいします。
464デフォルトの名無しさん:2008/10/31(金) 12:27:03
トーナメント表w見方が逆wwあれは上から下でツリーと呼ぶんだ
パッケージというのはそういうもの。a.bの中にcが入ってるのではなく,a.b.cという名前のパッケージなの
>一つのjavaファイルに使うクラスをクラスを全部書き込む
全てのクラスを一つの大きなクラスの中にネストしたクラスとして書く
超頭悪いやり方だから全くお勧めしない
465デフォルトの名無しさん:2008/10/31(金) 12:34:41
ありがとうございます。
後半の質問はちょっと勘違いされたようなので、別の言い方でいうと、
別々につくったclassファイルをコンパイルすると別々のjavaファイルにならないで
一つのjavaファイルにすることは出来ますか?
ということです。
466デフォルトの名無しさん:2008/10/31(金) 12:46:35
逆だろwwwww
classファイルをコンパイルしてjavaファイルを作るのかよwwwww
classファイルをまとめたいならjar使えよp
467デフォルトの名無しさん:2008/10/31(金) 12:47:12
JDKをインストールした後に、
javaコマンドは認識されるのに
javacコマンドは認識されない。
この差は何なんですか?
いずれもjdk/bin直下のコマンドですよね。
468デフォルトの名無しさん:2008/10/31(金) 12:49:13
逆でした、jarをつかわず、一つのjavaにまとめるような機能は
eclipseにありませんか?
469デフォルトの名無しさん:2008/10/31(金) 12:51:46
>>467
たぶんその認識されているjavaコマンドはJREの方が認識されている。
もう一度パスを確認してJDKのbinディレクトリに通っているか見てみて。
javacはJDKの所にしか存在しないが、javaの方はそこ以外にも存在する場合がある。
470デフォルトの名無しさん:2008/10/31(金) 12:55:14
一つのjavaにまとめるって意味がわかんにゃい。メリットもない!
471デフォルトの名無しさん:2008/10/31(金) 12:57:37
メリット:ジャバアプレットを一つのjavaを読み込むだけで起動できる。
472467:2008/10/31(金) 12:58:59
>>469
なるほど、JREの方にもjavaコマンドがあったんですね。
確かに実行環境のコマンドであればインストール後にすぐ使えるべきですね。
環境変数など見る限りではどうやってJREのパス見てるのか分からなかったけど裏でうまくやってるのかな?
473デフォルトの名無しさん:2008/10/31(金) 13:00:06
こいつあくまでもコンパイル後にjavaファイルができると主張してやがるw
474デフォルトの名無しさん:2008/10/31(金) 13:00:56
>>472
windowsだったらwindows\system32にもjava.exeがインストールされていて、
設定にもよるが一番新しいバージョンのjreが使用される。
475デフォルトの名無しさん:2008/10/31(金) 13:07:09
>>472
OSによると思うんだけど、
例えばwindowsならpublic JREをJDKと一緒にインストールすると、
%windir%/system32にjavaコマンドがインストールされる。
普通デフォルトで%windir%/system32にはパスが通っているはずなので、
そのjavaコマンドが使われる。
複数のJDKやJREをインストールしている時はパスでの指定順序を気にしていないと、
思わぬ場所のコマンドが使用されたりするから気をつけて。
476デフォルトの名無しさん:2008/10/31(金) 13:08:44
コンパイルしたclassファイルを一つにする方法をおしえてください。
別々に作ったjavaファイルを内部クラスにして一つのjavaファイルにして
コンパイルして一つのclass ファイルにしたいです。
477デフォルトの名無しさん:2008/10/31(金) 13:11:35
unix系とごっちゃになった^^;
%windir%/system32でなく%windir%\system32だね
478467:2008/10/31(金) 13:12:37
>>474
>>475
windows/system32にjavaコマンドありました。
こんな仕組みがあったとは…とても勉強になりました。
丁寧にありがとうございました!
479デフォルトの名無しさん:2008/10/31(金) 13:14:49
>>476
内部クラスも取り囲むクラスとは別に .class 作る。
jar ではダメなん?
480デフォルトの名無しさん:2008/10/31(金) 13:18:17
そもそもコンパイルしたものをソースに戻すことなんてできるの?
481デフォルトの名無しさん:2008/10/31(金) 13:19:49
>>476
classファイルは何のファイルと思ってるんだ?100回classファイルを音読しろ
まとめたい全てのクラスをリファクタリングというか難読化して全てのクラスのフィールドとメソッドをひとつのクラスにまとめてしまえ
オブファスケータによってはそういう手法を行うものもある

>>479
>>476は使い方を知らないとかかもしれん
482デフォルトの名無しさん:2008/10/31(金) 13:22:27
>>480
クラスファイルにソースファイルの全ての情報が保持されているわけではないから完全には戻せない
483デフォルトの名無しさん:2008/10/31(金) 13:24:06
>>479
取り囲むクラスの意味がわかりません。くわしくおねがいします。
>>481
クラスファイルとは実行ファイルとおもっています。
484デフォルトの名無しさん:2008/10/31(金) 13:26:56
>>483
何をやりたいのかもう一回考えをまとめてからレスしてください。
485デフォルトの名無しさん:2008/10/31(金) 13:30:47
マトメをかきます。
やりたいこと。
javaファイルを沢山使ったアプレットを作って
ホームページに乗せたい。
そのときホームページにjarファイルは置きたくないので。
classファイル一つを置いて、HTMLファイルにはファイル名.classと書きたい。
486デフォルトの名無しさん:2008/10/31(金) 13:31:52
>>485
すべての処理をひとつのクラスで完結させる。内部クラスもenumも一切なしで。
487デフォルトの名無しさん:2008/10/31(金) 13:33:24
結局、出来ないということですね。
素直に出来ないでなっとくするのに
回りくどい言い方するのがよくないです。
これは回答側の意見なので気にしないでください。
では!!
488デフォルトの名無しさん:2008/10/31(金) 13:37:12
つまり釣りだったというわけです
489デフォルトの名無しさん:2008/10/31(金) 13:39:08
君たちは、答え方がなってないよ。
知識をひけらかすよりも、できる、できない。
これのみ言えばいいんだよ。
なぜできないか等は、それはオマケだよ。
オマケは回答者が希望したときのみ与えればヨシ!
490デフォルトの名無しさん:2008/10/31(金) 13:41:08
頭大丈夫か?
491デフォルトの名無しさん:2008/10/31(金) 13:45:13
自己診断ではアスペルガー症候群という
病気なので気にしないでください。
492デフォルトの名無しさん:2008/10/31(金) 13:51:50
無理矢理つめこみたいなら
.class ファイルを 文字列リテラルにして詰め込んどいて
extends ClassLoader して
文字列リテラル
-> String#getBytes(String) でバイト配列化
 -> ClassLoader#defineClass(byte[], int, int) でロード
とかやれば、出来ない事もない。

文字列リテラルの長さ制限と 1クラスが持てる定数の最大数の制限受けるから
限界まで詰め込もうと思ったらもっと複雑怪奇になるような気がするけど。
493デフォルトの名無しさん:2008/10/31(金) 14:01:42
>>492
>>485 だとアプレットでしょ。
extends Applet しないといけないからそれじゃ無理
494デフォルトの名無しさん:2008/10/31(金) 14:50:20
Javaのバージョンがどのように管理されているのかよく分かりません。
Java5と言う人がいたりJava1.5と言う人がいますよね。

たとえば今自分のPCにはJDK 5.0 Update 11が入っていますが、
Java5
Java5.0
Java5.11
Java1.5
Java1.5.0_11

一般的にはどの書き方を使うのでしょうか?
495デフォルトの名無しさん:2008/10/31(金) 15:04:30
496デフォルトの名無しさん:2008/10/31(金) 15:30:07
>>487
良い質問をしないと、良い答えは返ってこない。

毎日ご飯を食べる前に唱えようね。
497デフォルトの名無しさん:2008/10/31(金) 15:42:12
魔法使いは居てもエスパーは居ないんだぜ
498デフォルトの名無しさん:2008/10/31(金) 20:24:49
初級すぎて馬鹿にされるかもしれませんが、質問させてもらいます。
今Servletを学んでいるのですが

PrintWriter out = response.getWriter( );
out.println("Hello!");

というのがよく理解できません

参考書には、getWriter( )メソッドで文字列出力用のPrintWriter( )オブジェクトを取得し,
println( )メソッドで文字列を書きこんでいると書いてあります。

つまりresponse.getWriter( )は  PrintWriter out = new PrintWriter( )
をおこなっているという事ですか?
499デフォルトの名無しさん:2008/10/31(金) 20:49:37
getWriter() メソッドがインスタンスを返している。
newで作成されたインスタンスが返されているとは限らない。
内部でゴチャゴチャやっているかも。
500>>498:2008/10/31(金) 21:09:58
PrintWriter out はあくまで
PrintWriter 型の outフィールドを定義しているだけですよね?
インスタンスを生成する際には、フィールドの型にあわせないといけないから、
response.getWriter( )によって返される値は、様々な処理を経て、
PrintWriter型に合わせられているという事ですか?
501デフォルトの名無しさん:2008/10/31(金) 21:22:00
たぶんそうだと思う。
おそらく、responseインスタンスのフィールドが
反映された PrintWriterのインスタンスが返されて、
outはそれを受けているんじゃないかな。
だから、getWriteメソッドの返り値は当然、PrintWrite型だろうね。
public PrintWriter getWriter(){
ってこと。

new PrintWriter()だと
コンストラクタを使ったまっさらなインスタンスが返されるけど、
getWriter()を使うことによって、
インスタンスにたいしてなんらかの処理が施された
インスタンスが返されている可能性が高いと思います。
デザインパターンでいうところのstatic factoryパターンかもしれませんけど。
502>>498:2008/10/31(金) 21:42:53
>>501
なるほど、なんとなくですが理解できたような気がします。

どうやらgetWriter( )メソッドはなんらかの処理を施してはいるが、
我々使用者はあまり意識する事なく使ったほうがよさそうですね。

  PrintWriter out = getWriter( )

と宣言すれば

  out.println( )

で文字が出力できると、それ単体で覚えたほうがいいのかもしれませんね。

わざわざ説明ありがとうございました。
503デフォルトの名無しさん:2008/10/31(金) 21:43:00
一度のリクエストでgetOutputStreamとgetWriterは同時に呼べなかったはず。
中で何かしたいんだろうねぇ、やはり。
504デフォルトの名無しさん:2008/10/31(金) 23:53:02
質問です。
クライアントからURL(HTTP)で示されるWebサーバ上のファイルが
存在するかどうかを確認できるメソッドってあるんでしょうか?
存在確認って以下を想定しています。
1.サーバ(www.abc.abc)が存在するかどうか
2.サーバは見つけたけどファイル(http://www.google.com/abc.zip)が存在するかどうか

URLとかURLConnectionとか見たんですが見つけられませんでした。
URLConnection#connectするときに例外を取るしかないんでしょうか?
ヒントでもいいのでお願いします。

今は http://www.abc.abc/abc.zip に接続しようとして
例外:UnknownHostException が発生している状態です。
例外を発生させず、予め存在するのかどうか確認したいんです。

505デフォルトの名無しさん:2008/11/01(土) 01:58:22
Commons VFS
506デフォルトの名無しさん:2008/11/01(土) 04:01:05
親クラスのフィールド変数を子クラスで使用したい場合,
(1) フィールドをprotectedにする,
(2) フィールドはprivateにして,親クラスにprotectedなアクセッサーメソッドを作成する,
のどちらが良いのでしょうか?
507デフォルトの名無しさん:2008/11/01(土) 04:18:09
>>505
ありがとうございます。早速試してみました。
ファイルの有無は確認できるようですが、
サーバの有無は確認できないようでした。

《ソース》
public class Test01 {
    public static void main(String[] args) {
        try {
            FileSystemManager manager = VFS.getManager();
            FileObject fileObject = manager.resolveFile(args[0]);
            if (fileObject.exists()) System.out.println(fileObject.getURL() + " は存在します。");
            else                   System.out.println(fileObject.getURL() + " は存在しません。");
            fileObject.close();
        } catch (Exception e) {
            e.printStackTrace();
}}}

《結果》
1.http://www.abc.abc/
  org.apache.commons.vfs.FileSystemException: Could not connect to HTTP server on "www.abc.abc".
  Caused by: java.net.UnknownHostException: www.abc.abc

2.http://www.google.com/abc.zip
  http://www.google.com/abc.zip は存在しません。


・・・すみません。
VFSじゃなくてtryすることにします・・・
508デフォルトの名無しさん:2008/11/01(土) 10:56:10
java.util.Random クラスというのがありますが
自分で、mypackage.Randomクラスを作って、

import java.util.*;
import mypackage.*;

としてRandomを呼び出すとどうなるんですか?
509デフォルトの名無しさん:2008/11/01(土) 11:01:41
試せばいいじゃん。試せばいいじゃん。
510デフォルトの名無しさん:2008/11/01(土) 11:08:14
>>508
言語仕様に則ってれば、曖昧なのでコンパイルエラーにしかならん。
511デフォルトの名無しさん:2008/11/01(土) 11:21:38
>>509
めんどくっさー
>>510
ありがとうございます。
なるほどコンパイルエラーですか。
なんかjavaはここら辺の仕組みって汚いですよね。
自分でももっとスマートに作れそうだ。
512デフォルトの名無しさん:2008/11/01(土) 11:25:44
釣りだと分かってても釣られてしまう・・・


     ス  マ  ー  ト  (笑)

513デフォルトの名無しさん:2008/11/01(土) 12:00:59
 ───アタシの名前はアイ。心に傷を負った女子高生。モテカワスリムで恋愛体質の愛されガール♪
アタシがつるんでる友達は援助交際をやってるミキ、学校にナイショで
キャバクラで働いてるユウカ。訳あって不良グループの一員になってるアキナ。
 友達がいてもやっぱり学校はタイクツ。今日もミキとちょっとしたことで口喧嘩になった。
女のコ同士だとこんなこともあるからストレスが溜まるよね☆そんな時アタシは一人で繁華街を歩くことにしている。
がんばった自分へのご褒美ってやつ?自分らしさの演出とも言うかな!
 「あームカツク」・・。そんなことをつぶやきながらしつこいキャッチを軽くあしらう。
「カノジョー、ちょっと話聞いてくれない?」どいつもこいつも同じようなセリフしか言わない。
キャッチの男はカッコイイけどなんか薄っぺらくてキライだ。もっと等身大のアタシを見て欲しい。
 「すいません・・。」・・・またか、とセレブなアタシは思った。シカトするつもりだったけど、
チラっとキャッチの男の顔を見た。
「・・!!」
 ・・・チガウ・・・今までの男とはなにかが決定的に違う。スピリチュアルな感覚がアタシのカラダを
駆け巡った・・。「・・(カッコイイ・・!!・・これって運命・・?)」
男はホストだった。連れていかれてレイプされた。「キャーやめて!」ドラッグをきめた。
「ガッシ!ボカッ!」アタシは死んだ。スマート(笑)
514デフォルトの名無しさん:2008/11/01(土) 12:01:14
>>511
>自分でももっとスマートに作れそうだ。

どうやんのか興味あるから教えてよ
515デフォルトの名無しさん:2008/11/01(土) 12:42:30
ステータス管理をするときに、ステータス追加・変更などでプログラムの内容を
変える必要のない設計ってどうんあものなんでしょ?
516デフォルトの名無しさん:2008/11/01(土) 13:10:09
JRE 6 update 10 をいれてから、自作のアプリの動作がおかしいんです。
update 7 に戻すと想定どおりなんです。

GraphicsDevice クラスを使ってるんですけど
DirectX 10 がどうのこうのってリリースノートに書いてあるから
そのあたりに何かあるんだとは思うんですが。。

eclipse から実行する際は JRE のバージョン切り替えられるんですが、
普通に OS に関連づけられている JRE のバージョンを切り替える
(つまり、update 10 じゃなくて update 7 を使う)
にはどうすればいいんでしょうか?
517デフォルトの名無しさん:2008/11/01(土) 13:24:50
>>516
C:\Program Files\Java 以下のバイナリに直接関連付ければいいんじゃね?
518517:2008/11/01(土) 13:38:16
関連付けの話ではなかったみたいです。

自作アプリの起動は、バッチファイルから
java -Xmx***m -jar ***.jar
として起動しているので、(大きいメモリ確保が必須なので)
パスが通っている(?)java.exe が使われるみたいなんです。

コマンドラインから java で起動する JRE のバージョンを切り替える
ことができれば解決すると思うんですが、どうしたらいいでしょうか?

Windows にあまり詳しくないもので。。
519デフォルトの名無しさん:2008/11/01(土) 13:51:27
>>518
a) C:\Program Files\Java\jre1.6.0_07\bin にPATHを通す。
b) javaをフルパスで書く。"C:\Program Files\Java\jre1.6.0_07\bin\java" ...
(ファイル名/ディレクトリ名に空白がある場合はダブルクォートでくくるのを忘れないように)

どちらでも好きな方を。
520デフォルトの名無しさん:2008/11/01(土) 17:06:38
すまそ。アプレットがサーバーと通信するプログラム組もうとするとき
TCP/IP使った方がいい?RMI使った方がもっと便利??

RMIは良く知らないのでついでに勉強してみたい気もするんだけど。。

詳しい人教えて。Javaでネットワーク組むの初めてだもんだから。
521デフォルトの名無しさん:2008/11/01(土) 17:11:09
通信する内容による。
522520:2008/11/01(土) 17:14:09
いや。普通の企業データを(会計データ)サーバに送ってDBに記憶するだけなんすけど・・
523デフォルトの名無しさん:2008/11/01(土) 17:39:55
appletはセキュリティ上の制約で、それが置かれている
サーバーとしか通信できないようになっています
ですから、P2Pの通信というのはできないと思うのですが、
BitLetというファイル共有のappletが存在します
いったいどうやってP2Pを実現させているのでしょうか?
524デフォルトの名無しさん:2008/11/01(土) 17:54:54
>>523
それはデフォルトの話でしょ。
署名されてるアプレットとか、
ユーザが自分の環境の policy ファイル弄ったりすれば
アプレットでも自由に通信したりクライアントPCのファイルに触ったりできる。

普通は署名アプレットだね。実行していいか確認のダイアログでたりするけど。
金ない場合はオレオレ署名アプレット。
525デフォルトの名無しさん:2008/11/01(土) 19:40:17
tomcatについて教えてください。
http://localhost:8080/
とアクセスすると
webappsの直下にデフォルトで入っているROOTという
アプリケーションを表示しているようなのですが、
これはどこかの設定ファイルで関連付けをされているのでしょうか?

例えば、自分でwebapps/myappを作り、
http://localhost:8080/ でmyappを表示させることは可能ですか?
526デフォルトの名無しさん:2008/11/01(土) 20:12:21
つまらん事聞くんだけどさ
あるコマンドの出力を直接ソースに取り込む方法ってない?
c とかだとこんなイメージ...

=== static な配列に押し込みたいデータの中身だけ作る
$ [適当なコマンド] [元データ > inc.h

=== 出来上がった inc.h
"aaaaa", "BBBB", ....

=== C のコード
String[] xTab = {
# include "inc.h" // inc.h の内容をここにまんま展開したい
};
527デフォルトの名無しさん:2008/11/01(土) 20:44:22
>>526
javaのソースにbccのプリプロセッサ使えたりするが?
まあ適当にスクリプト書くのが一番だろう。
528デフォルトの名無しさん:2008/11/01(土) 21:21:58
void move(int x, int y)
この点を (x、 y) 座標平面上の指定された位置に移動します。
void setLocation(int x, int y)
この点を指定された位置に変更します。
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/awt/Point.html
Pointクラスのこの2つのメソッドは、どのように使い分けるべきなんでしょうか?
529デフォルトの名無しさん:2008/11/01(土) 21:27:35
そこまで読んどいて・・・

move
この点を (x、 y) 座標平面上の指定された位置に移動します。このメソッドは setLocation(int, int) と同じです。

同じです。
530デフォルトの名無しさん:2008/11/01(土) 21:32:07
>>529
アッー!どうも失礼しました
531デフォルトの名無しさん:2008/11/01(土) 22:08:29
OS:Windows で動いてる Swing を使ったアプリで
Mac の Look&Feel を使うことってできますか?
532デフォルトの名無しさん:2008/11/01(土) 23:09:16
Tomcatが起動しないんですが原因が分かりません。
正常にDL、インストール出来ていてポートも使用してない番号のはずなんですが他に原因考えられることありますか?
JDKのpathは設定したんですがTomcat入れる時も別にpathの設定って必要ですか?
初心者な質問すいませんがわかる方いたらお願いします
533デフォルトの名無しさん:2008/11/01(土) 23:57:53
Scannerクラスについて質問させてください。

ScannerクラスのnextInt関数を使って、キーボードから整数値の入力を行う
プログラムを作ろうとしています。その際に、正常な値(整数値)が入力されるまで
再入力を促す仕組みを設けたいのですが、下記プログラムでは希望する結果を得る事が
できませんでした。

 int iInput = 0;
 boolean input_ok = false;
 Scanner scan = new Scanner(System.in);

 while( ! input_ok ){

   try {
       System.out.print("整数値を入力してください -> ");
       iInput = scan.nextInt();
       input_ok = true;
   }
   catch(Exception e){
      System.out.print("入力に不備がありました。 再度");
   }
 }

このプログラムを実行し、『3.2』などの実数値を入力すると、プログラムが暴走を始めます。
原因と解決方法をご存知の方が居られましたら教えてください。よろしくお願いします。
534デフォルトの名無しさん:2008/11/02(日) 00:26:10
>>533
Scanner#nextInt
> 次のトークンを有効な int 値に変換できない場合、
> このメソッドは InputMismatchException をスローします。
> 変換に成功すると、スキャナは一致した入力の先に進みます。

失敗した文字を自分で読み飛ばさないとダメ。
535デフォルトの名無しさん:2008/11/02(日) 00:49:23
>>534
暴走の原因は、『変換されずに残っている入力』だったのですね。
プログラムを下記の様に書き換えて、その場を凌ごうかと思っていましたが、
変換に失敗した文字を読み飛ばす手段があるのですね。早速探してみます。
ありがとうございました。

 int iInput = 0;
 boolean input_ok = false;

 while( ! input_ok ){

   try {
       System.out.print("整数値を入力してください -> ");
       Scanner scan = new Scanner(System.in);
       iInput = scan.nextInt();
       input_ok = true;
   }
   catch(Exception e){
      System.out.print("入力に不備がありました。 再度");
   }
 }
536デフォルトの名無しさん:2008/11/02(日) 01:23:46
ttp://upload.wikimedia.org/wikipedia/commons/5/55/8-cell-simple.gif

このような画像を作りたいのですが
立体画像生成未経験の場合、まずどんなスキルから学ぶべきでしょうか
537デフォルトの名無しさん:2008/11/02(日) 04:17:13
画像処理、3D関連習ってない自分なら全部自前で計算するか、行列使うかJavaの3Dやらポリゴンのライブラリを探して使い方見ててきとーにやる

今あるJava知識しだいじゃね?
538デフォルトの名無しさん:2008/11/02(日) 07:51:19
>>536
これ4次元? 5次元?
描画は>>537の言うとおりでいいけど。3次元への投影が必要になる。
まぁ、3次元空間を2次元のディスプレイに投影するのと理屈は一緒だけど。

ぐぐったら正八胞体で出てきた。
539デフォルトの名無しさん:2008/11/02(日) 10:03:11
JAVAを一度も使ったことがない(処理系も持っていない)のですが、

public main()
{
String a, b, c;
a = null; b=""; c="1";

System.out.print("La=" +a.getLength()+ " Lb="+b.getLength()+" Lc="+c.getLength());
}

の出力ってどうなるんでしょうか? aがnullなので例外発生でしょうか?
どうぞよろしくお願いします。

540デフォルトの名無しさん:2008/11/02(日) 11:44:28
>>539
>aがnullなので例外発生でしょうか?
そのとおり
541539:2008/11/02(日) 12:34:56
>>540
どうもありがとうございます。
La=0 Lb=0 Lc=1
ではないのですね。
542デフォルトの名無しさん:2008/11/02(日) 12:49:09
>>539
なんでそんなことが知りたいの?
543デフォルトの名無しさん:2008/11/02(日) 13:00:29
>>542
情報関係の資格試験の勉強をしていて、ネットで
上のような問題に遭遇した次第です。
544デフォルトの名無しさん:2008/11/02(日) 14:19:51
とても合格しそうにないなw
プログラミングの勉強は実際に自分で作成して動かしてみることが基本だよ
頭の中だけで妄想しても身に付くものはほとんどない
545デフォルトの名無しさん:2008/11/02(日) 14:43:24
>>539
String に getLength なんてメソッドはないからコンパイルエラーじゃないか?
546デフォルトの名無しさん:2008/11/02(日) 16:36:45
>>544
試験に合格するだけなら紙の上での仕様を理解していれば
十分じゃないか?俺は昔CASLを一度も動かしたことがなく
ても情報処理の一種や二種に余裕で合格したぞ。
547デフォルトの名無しさん:2008/11/02(日) 16:57:19
こういう資格はとるだけなら簡単なんだよ。
実践で使い物になるかは別にして。
548デフォルトの名無しさん:2008/11/02(日) 17:24:09
質問です。長いので分けて書きます。
iアプリ開発をしているのですが、画像が読み込めません・・・
ビルドは成功するのですが、"Unknown media image format"と出て実行できません。

詳細を書きますと
(前略)
Image img_title_0;
Image img_title_1;
(中略)
public Image loadImage(String name) {
  MediaImage mImg = null;
  Image img = null;
  try {
   mImg = MediaManager.getImage("resource:///" + name + ".gif");
   mImg.use();
   img = mImg.getImage();
  }
  catch(ConnectionException ce) {
   if(mImg != null) {
    mImg.unuse();
    mImg.dispose();
   }
   throw new RuntimeException(ce.getMessage());
  }
  return img;
 }
(中略)
549>>548の続き:2008/11/02(日) 17:25:21

public void paintTitle() {
  img_title_0 = loadImage("title_0");
  img_title_1 = loadImage("title_1");

  draw(true);

  setColor(0, 0, 0);
  fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);

  drawImage(img_title_0, 0, 0);
  drawImage(img_title_1, 0, 0);

  setColor(255, 255, 255);
  if(frameCount%2 == 0) {
   // 点滅処理
   drawString("PUSH SELECT KEY !", 10, 180);
  }

  draw(false);
 }
(後略)

こんな感じです。
画像はペイントで書いたものをresフォルダにGIF形式で保存しています。

一応「"Unknown media image format" java」でググッたのですが、まともなページがなくて解決できませんでした。

初歩的な質問で申し訳ありませんが、よろしくお願いします。
長文失礼しました。
550デフォルトの名無しさん:2008/11/02(日) 17:38:41
iAppriスレに行け
551>>548:2008/11/02(日) 17:43:50
>>550
>>2にiアプリスレ載ってますね・・・
すいません見落としてました。iアプリスレ行ってきます
552デフォルトの名無しさん:2008/11/02(日) 18:01:01
>>550
App"l"ication.
553>>548:2008/11/02(日) 19:05:23
iアプリスレの方でアドバイスを頂き解決しました。
ありがとうございました
554デフォルトの名無しさん:2008/11/02(日) 20:26:02
555デフォルトの名無しさん:2008/11/02(日) 22:04:33
1つのファイルを2つの入出力オブジェクトから同時にアクセスする場合に気を付けるべきことを教えてください。
とても抽象的な質問なので、思いついたのをちょちょっと書いて頂けたら幸いです。
556デフォルトの名無しさん:2008/11/02(日) 22:09:03
>>555
同時にアクセスするな。
557デフォルトの名無しさん:2008/11/02(日) 22:28:09
//車クラス

class Car{
int num;
double gas;

void setNumGas(int n, double g){
num = n+1;
gas = g+1;

System.out.println("車のナンバーを" + num + "にガソリンの量を" + gas + "にしました");
}

int getNum(){ //int型の値を返すメソッドです
System.out.println("ナンバーを調べました");
return num; //呼び出し元に値を返します
}

double getGas(){ //double型の値を返すメソッドです
System.out.println("ガソリンの量を調べました");
return gas; //呼び出し元に値を返します
}

void show(){
System.out.println("車のナンバーは" + num + "です");
System.out.println("ガソリンの量は" + gas + "です");
}
}

558デフォルトの名無しさん:2008/11/02(日) 22:30:08
class Mikaiketu5_2{

public static void main(String args[]){
Car car1 = new Car();

car1.setNumGas(1234, 20.5);

int number = car1.getNum(); //戻り値を持つメソッドを呼び出します、戻り値を変数numberに代入します
double gasoline = car1.getGas(); //戻り値を持つメソッドを呼び出します、戻り値を変数gasolineに代入します

System.out.println("サンプルから車を調べたところ");
System.out.println("ナンバーは" + number + "ガソリンの量は" + gasoline + "でした");

car1.show();
}
}

この、ソースで
private int num;
private double gas;

とにしても、アクセスできてしまうのは何故でしょうか?
559デフォルトの名無しさん:2008/11/02(日) 22:31:47
この、ソースではアクセスできませんが・・・

class Car{
private int num;
private double gas;

void show(){
System.out.println("第二の車のナンバーは" + num + "です");
System.out.println("第二のガソリンの量は" + gas + "です");
}
}
public class Sample4_1 {

public static void main(String[] args) {
Car car1 = new Car();

car1.num = 1234;
car1.gas = 20.5;

car1.show();

}

}
560557-559:2008/11/02(日) 22:33:09
557-559です
561デフォルトの名無しさん:2008/11/02(日) 22:50:18
>>557
あー、それ、初心者の時混乱するよね。

privateって「他のクラスからアクセスできない」ってわけじゃないんだよ。
「他のクラスから”直接”アクセスできない」ってことなんだ。

Aのクラスの中のprivateなメンバは、Aのクラスのインスタンスからならアクセスできるんだよ。

Car car1 = new Car();で  クラスCarのインスタンスcar1を作ったから
car1.num(Carのインスタンスcar1の持っているnum)と書けばアクセスできるんだ。

>>558では、それをクラスMikaiketu5_2のふつーのメンバ(int numとか)に渡してる。

System.out.println(num); の中のnumは

「クラスCarのインスタンスcar1の持っているnumを、Mikaiketu5_2のふつーのnumに渡したやつ」なんだよ。

わかった?

これがわかれば>>559がアクセスできない理由もわかるよね。
562デフォルトの名無しさん:2008/11/02(日) 23:11:36
>>561
レス、ありがとうございます

う~ん、難しい・・・・もう少し考えて見ます・・・
563デフォルトの名無しさん:2008/11/02(日) 23:26:55
ん?Carクラスのフィールドをpackage-privateからprivateにしたらアクセスできたってこと?
564デフォルトの名無しさん:2008/11/02(日) 23:30:24
マウスで矩形を描くプログラムを作りたいのですが、
マウスのポインタの位置と描いた矩形の位置がズレてしまいます。
565564:2008/11/02(日) 23:31:15
public void mousePressed(MouseEvent e)//マウスを押すと呼ばれる
{
point.x = e.getX(); //押した点の座標を保存
point.y = e.getY();
}
public void mouseReleased(MouseEvent e) //マウスを放すと呼ばれる
{
int x = point.x;
int y = point.y;
width = Math.abs(e.getX() - x);
height = Math.abs(e.getY() - y);

//座標軸のマイナス方向に引いた場合
if(point.x > e.getX()) x = e.getX();
if(point.y > e.getY()) y = e.getY();

rect.add(new Rectangle(x, y, width, height));

myPanel.repaint();
}
566564:2008/11/02(日) 23:32:37
public void mouseDragged(MouseEvent e) //マウスをドラッグ中に呼ばれる
{
int x = point.x;
int y = point.y;
width = Math.abs(e.getX() - x);
height = Math.abs(e.getY() - y);

//座標軸のマイナス方向に引いた場合
if(point.x > e.getX()) x = e.getX();
if(point.y > e.getY()) y = e.getY();

frameRect = new Rectangle(x, y, width, height);

myPanel.repaint();
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for(Rectangle r: rect)
g2.fill(r);

g2.draw(frameRect);
}


何故なのでしょうか?よろしくお願いします。
567557-559:2008/11/02(日) 23:32:40
ちょっと、混乱してしまったので、整理させてください
3つ質問があります

car1.num = 1234;
car1.gas = 20.5;
これらは、
class Car{
int num;
double gas;
に、アクセスして値を代入しているんですよね?

そして 、
car1.setNumGas(1234, 20.5);
は、
void setNumGas(int n, double g){
に、アクセスして代入しているんですよね?

この、オブジェクトはC言語言うポインタに近いものなのでしょうか?
1、オブジェクトの作成(Car car1 = new Car(); )
Car変数は、オブジェクトを指し
2、それを使いメンバにアクセス
という感じに・・・・
568デフォルトの名無しさん:2008/11/02(日) 23:55:48
Car変数じゃなくてcar1変数でしょ
569557-559:2008/11/03(月) 01:15:04
>>568
ありがとうございます

概ね、>>567であっていますでしょうか?
570デフォルトの名無しさん:2008/11/03(月) 14:11:00
>>567 デバックで確認することはできないのかね?
    ほんとにずれてる程度の間違いならデバックすると一目瞭然かと
571557 556:2008/11/03(月) 16:28:26
デバッグ機能がなくて、メモ帳使っています
572デフォルトの名無しさん:2008/11/03(月) 18:06:21
>>567
曖昧記憶なと憶測での助言で申し訳ないんだけど、
Graphics2Dクラスの原点座標(0,0)は、フレームのタイトルバーと外枠を
含んだ上での最左上部になるんじゃなかったっけ。

原点座標(0, 0)をタイトルバーや外枠分ずらしてあげる為に、
Insetクラス用いて、フレームの情報持ってきて原点ずらしてあげてた記憶が…

Inset ins = frame.getInsets();
g.translate(ins.left, ins.top);

みたく。
573557-559:2008/11/03(月) 18:14:14
すみません。。。質問の仕方が変でした。

これは
"car1.num = 1234;
car1.gas = 20.5; "
クラスのメンバ
"class Car{
int num;
double gas;"
に、直接?アクセスして値を代入しているんですよね?

そして、これ
"car1.setNumGas(1234, 20.5);" は
void setNumGas(int n, double g){
に、アクセスしてから、迂回する形で(この様に)
"num = n+1;
gas = g+1; "
で、メンバの
"int num;
double gas;" に代入しているのでしょうか?

>>570
今、デバックツール探してみます。


代入しているんですよね?
574557-559:2008/11/03(月) 18:29:07
>>561
ですので、>>557->>558の場合は同じクラス内の
引数のところ
"num = n+1;
gas = g+1; "
から、代入しているから、privateでもアクセスできるのですね?

そして、>>559
外から直接なのでアクセスできないのですね?

連投、申し訳ありません
昨日から一日中考えています
575デフォルトの名無しさん:2008/11/03(月) 18:38:05
必要最小限な構成で説明します。理解の手伝いになれば良いのですが。
Carクラスのメンバ変数『int num;』を『private int num;』とすると、
numは、外部から『直接アクセスできない』変数となります。

class Car{
  private int num;
}

class Sample{
  Car c = new Car();
  c.num; // privateな情報なので直接アクセスできず、エラーになります。
}

private化したnumですが、Carクラス内部からは直接操作をする事が可能です。
これを利用して、『外部から直接アクセスできる仲介者』を用意し、
それを媒介に、privateなnumに『間接的にアクセス』する手法があります。

class Car{
  private int num;

  public void setValue(int arg){ this.num = arg; } // 引数のargを媒介に、numへと値代入。
public int getValue(){ return num;}       // 戻り値intを媒介に、numの値を返す。
}

class Sample{
  Car c = new Car();
  c.setValue(10);
  int getNum = c.getNum();
}
576575:2008/11/03(月) 18:41:45
ソースコードのミスが…。下から2行目は、

 int getNum = c.getValue();

です。
577デフォルトの名無しさん:2008/11/03(月) 18:49:36
JAVA_HOMEというものがよくわかりません
よければご講義をお願いします
578デフォルトの名無しさん:2008/11/03(月) 19:10:52
>>577
Java 開発をする際に JDK のホームディレクトリを OS が知っておくと何かと便利。
そのため環境変数にそれを指定するのだけど JDK (Java) のホームディレクトリなので
JAVA_HOME とするとわかりやすいのでそのように指定している。
579デフォルトの名無しさん:2008/11/03(月) 19:18:24
>>578
つまりひろくそういう暗黙の了解ができてるだけで
JAVA_HOMEとしなくても動くということですか?
580デフォルトの名無しさん:2008/11/03(月) 19:19:28
>>579
動く奴は動く。JAVA_HOMEだけに依存してる奴は動かない。
581デフォルトの名無しさん:2008/11/03(月) 19:24:51
>>580
Tomcatの場合はどのように利用しているのでしょうか?

実際にTomcatでプログラミング(初心者ですが)しているのですが
ソースコードをコンパイルするために、システム環境変数に設定したPathの
JDKしか用途がよくわかりません
582564:2008/11/03(月) 20:23:04
>>572
解決しました!ありがとうございました。
583デフォルトの名無しさん:2008/11/03(月) 22:00:04
質問です

gerWord( ) と getSingleWord( )

の解説をお願いします。

今手持ちの参考書の練習問題にこの二つのメソッドが使われてて
解答にそのメソッドの解説が載ってません。
Yahoo検索で調べたのですが、解説がうまくでてきませんでした。
お願いします

584デフォルトの名無しさん:2008/11/03(月) 22:26:36
100.0の場合3、10.0の場合2というような感じで
変数に格納されている数値の桁数を出したいのですが
どうすればいいでしょうか?
585デフォルトの名無しさん:2008/11/03(月) 22:36:07
>>584
プログラミングとは関係なく10ベースの対数の整数部を取ればええんちゃう?
586デフォルトの名無しさん:2008/11/03(月) 23:01:02
>>584
わざわざ小数点で書いてるけど、それは10.1の場合は3って表示にするってこと?
587デフォルトの名無しさん:2008/11/03(月) 23:10:50
>>583
それその本の中の自作関数じゃないの?
588デフォルトの名無しさん:2008/11/03(月) 23:54:50
クラス内の命令を全てstaticで使用したいときは、1つずつstaticを付けていくしかないですか?インスタンス化してメモリ領域を増やしたくないので
589デフォルトの名無しさん:2008/11/04(火) 00:52:47
>>588
全部に static つけてください。
590デフォルトの名無しさん:2008/11/04(火) 01:28:30
ムホムホ。インストーラ作ってアプリ配布したいんだけど、JVMもインストーラに入れると怒られるの?
591デフォルトの名無しさん:2008/11/04(火) 03:14:17
>>584
double value = 100.0;
int keta = (int)(Math.log(Math.abs(value)) / Math.log(10)) + 1;

で、いけると思ったけど丸めが入るので
keta = (int)value == 0 ? 0 : Integer.toString(Math.abs((int)value)).length();

としてみた・・・駄目だセンスのかけらもないorz
592デフォルトの名無しさん:2008/11/04(火) 10:08:59
右クリメニューでテキストの削除をしたくて

Del.addItemListener(new ItemSelect());

class ItemSelect implements ItemListener {
public void itemStateChanged(ItemEvent e) {
         System.out.println("動け動け動け");
TextEditor.textPane.replaceSelection(""); }
}
と書いているのですが、うまくいっていませんorz
何か根本的に間違ってますか
593デフォルトの名無しさん:2008/11/04(火) 10:13:03
>System.out.println("動け動け動け");
ここみてシンちゃん再始動ktkr!!とか思った俺。
594デフォルトの名無しさん:2008/11/04(火) 11:09:42
>>584
int num; //桁を知りたい数
int keta; //桁
for( int i=0; Math.pow(10,i) >num ; i++){ keta=i+1;}
とかどうよ
595592:2008/11/04(火) 12:06:53
事故解決しますた! シンちゃん再起動しました!
別の話なんですが、Checkboxを生成したんですけれども
プログラムの起動時はそのチェックボックスが表示されなくて
一度クリックすると普通に表示されるようになるのですが
どうしてですかねー?? チェックボックスのcheckを生成したあと
panel.add(check);しかしてないですけど
何か足りないですか・・・?
最初から表示されてほしいです!111
596595:2008/11/04(火) 12:49:48
597デフォルトの名無しさん:2008/11/04(火) 19:37:35
javaのプログラミングができる無料ソフトはありませんか?
598デフォルトの名無しさん:2008/11/04(火) 19:47:01
JDKは無料ですよ
599デフォルトの名無しさん:2008/11/04(火) 21:22:56
画面に奇数0から1000まで
表示させるコードの書き方を教えて下さい。
600デフォルトの名無しさん:2008/11/04(火) 21:25:58
0も1000も奇数ではありません
601デフォルトの名無しさん:2008/11/04(火) 21:30:29
>>600
そうですね、間違ってましたスミマセン
じゃあ1から999までの書き方を教えて下さい。
602デフォルトの名無しさん:2008/11/04(火) 21:33:58
正直な事言うと、0から1000は範囲の事言ってたんだけど
説明不足で悪かった。
603デフォルトの名無しさん:2008/11/04(火) 21:43:29
for (int i = 0; i <= 1000; i++)
if(i % 2 != 0)
System.out.println(i);

俺優しすぎかも
604デフォルトの名無しさん:2008/11/04(火) 21:48:03
>>603
ちょwサンクス!!
優しすぎだろ、惚れたよ!
マジで。
605デフォルトの名無しさん:2008/11/04(火) 21:48:37
宿題は宿題スレへ逝け。
606デフォルトの名無しさん:2008/11/04(火) 21:51:40
>>605
( ゚Д゚)ゞ リョーカイ!!
誘導してくれてサンクス
607デフォルトの名無しさん:2008/11/04(火) 22:03:07
チョクチョクすみません。
宿題スレから誘導してもらいました。
さっきの続きで
for (int i = 0; i <= 1000; i++)
if(i % 2 != 0)
System.out.println(i);
これはどの様な処理をしてるんですか?
for (int i = 0; i <= 1000; i++)
ここまでは何となく分かるんですけど、
if(i % 2 != 0)が微妙に分かりません。

コピペですみませんm(_ _)m
608デフォルトの名無しさん:2008/11/04(火) 22:10:56
なんかおもしろすぎw

%ってのは剰余の演算子で
iを2で割った余りってのがi%2ね。
だから2で割った余りが0じゃないとき、つまり奇数の時となるわけさ
ちなみにこれは「Javaで~」とかそういうレベルの話じゃないからね
609デフォルトの名無しさん:2008/11/04(火) 22:11:07
if(i % 2 != 0)は
2で割って余りが0じゃなかったらという意味
610デフォルトの名無しさん:2008/11/04(火) 22:12:56
質問です

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException{

PrintWriter out = response.getWriter();
out.println("Hello");
}
}

doGet( )メソッド内で宣言した HttpServletResponse response

このresponseを使って

PrintWriter out = response.getWriter();

とありますが
HttpServletResponseのインスタンスを生成したわけでもないのに
どうしてresponse.getWriter( );という記述ができるのですか?
仮に HttpServletResponseがクラスメソッドだとしても、
このような記述はできませんよね?
611デフォルトの名無しさん:2008/11/04(火) 22:26:28
>>610
制御の主体であるAPサーバがインスタンスを生成してお前のコードに渡してる。
612デフォルトの名無しさん:2008/11/04(火) 22:31:47
>>611
doGet( ) メソッド内で

HttpServletResponse response

とした時点で、我々の目に見えないところで
APサーバがインスタンスを生成しているとい
うことですか?
613デフォルトの名無しさん:2008/11/04(火) 22:53:27
doGet()メソッドを呼ぶのはだーれだ
614デフォルトの名無しさん:2008/11/04(火) 22:55:24
>>612
メソッド内じゃない。responseはdoGet()の引数だ。APサーバはHttpServletResponseのインスタンスを生成して、それを引数としてdoGet()を呼び出してるだけ。
615デフォルトの名無しさん:2008/11/04(火) 23:21:24
質問です

スレッドを3本つくり、それぞれ順番に1~10までカウントさせたいのですが
スレッド0が動いたところで止まってしまいます。なにがおかしいのでしょうか?

class Ex11{
public static void main(String[] args){
Count10 count =new Count10();
count.start(); //スレッド0
count.start(); //スレッド1
count.start(); //スレッド2
}
}

class Count10 extends Thread{

public synchronized void run (){
try{
for(int i=1;i<11;i++){

System.out.println(Thread.currentThread().getName()+":count="+i);

Thread.sleep(700);
}

}catch(InterruptedException e){
}
}
}
616デフォルトの名無しさん:2008/11/04(火) 23:27:58
別のThreadオブジェクト作ろうねぇ~
617615:2008/11/04(火) 23:47:17
>616
別のThreadオブジェクトを作るというのは
 
Count10 count1 =new Count10();
Count10 count2 =new Count10();
Count10 count3 =new Count10();
count1.start(); //スレッド0
count2.start(); //スレッド1
count3.start(); //スレッド2

のようにするってことなんでしょうか?
618デフォルトの名無しさん:2008/11/04(火) 23:47:50
>>617
確認する前に実行すればいいじゃない
619615:2008/11/04(火) 23:50:45
スレッド0に1~10までカウントさせたあと
待機している、スレッド1か2にカウントさせたいので
この方法だとうまくいかないのです。
620デフォルトの名無しさん:2008/11/04(火) 23:54:53
>>619
join でスレッドの終了を待機する。
621615:2008/11/05(水) 00:32:36
>>620
joinを用いて試してみたところ、うまくいきました。
ありがとうございました。
つづけて質問なんですが、ひとつのインスタンスに対して計3本のスレッドを通し
今回のような結果を得ることはできないのでしょうか?
このとき、どのスレッドから数え始めてもらっても構わないのですが。
622デフォルトの名無しさん:2008/11/05(水) 00:56:57
>>621
いまいち要求仕様がはっきりしないけど、java.lang.Runnableのこと?
3つのスレッドが必要なら3つのThreadインスタンスが必要なのは変わら
ないけどね。
623デフォルトの名無しさん:2008/11/05(水) 00:59:16
http://xy.yu.to/
始終荒れまくりの海外サーバ絵チャだ

一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww

荒らしても荒らしても線が消されてしまう
一体どうやっているのか?!
624615:2008/11/05(水) 01:13:30
>>622
始めたばっかりなので
言葉の意味とか微妙に違ってるかも分かりません。ごめんなさい><
実はsynchronizedの練習をしたかったんです。
synchronizedはインスタンスに対して鍵をかけるのですよね?
でもインスタンスがスレッドの数だけあると
synchronizedの意味がなくなっちゃうなあ、と思っていたのです。
でもなんだかスレッドインスタンス?と、実行するクラスのインスタンス?
が頭の中でごっちゃになってるような気がしてきました・・・
もう一度、考え直してみます。
遅くまでお付き合いいただいてありがとうございました!
625デフォルトの名無しさん:2008/11/05(水) 01:17:47
626デフォルトの名無しさん:2008/11/05(水) 06:45:22
strutsのforwardについての質問です。

struts-config.xmlにhogeという名前でfuga.jspに遷移する設定があるとします。

Actionの最後にmapping.findForward("hoge")しますが、
この結果得られたpathを加工する方法を教えてください。

具体的にはfuga.jspの後ろにアンカー(#moge)を追加して、遷移先の表示位置をAction内で動的に制御したいのです。
アンカーの数はデータ数で可変なので、全てのパターンをstruts-config.xmlに記述することはできません。

getPath()して加工はできるのですが、setPath()するとIlligal State Exceptionが発生して詰まっています。

どうかよろしくお願いします。
627デフォルトの名無しさん:2008/11/05(水) 07:31:08
>>614
なるほど!わかりました!

いきづまったときはまたこのスレで質問させて
いただく事があると思いますので、そのときは
よろしくお願いします。
ありがとうございました
628デフォルトの名無しさん:2008/11/05(水) 10:33:00
今ファイルからの読み込み時にはBufferedReaderを使って
ファイルに出力する時には BufferedWriterを使っているのですが
その両方の機能を持ったクラスはありますか?

例えば
 ファイル1 ファイル2      ファイル1
 abcde    12345   →    abcde
 12345    67890       12345
                  67890

といった風にファイル1を読み込んで、ファイル2と比較してファイル1に存在しないコードがあったら追加するといったプログラムがしたいんです。
わかりにくいかもしれませんが、わかる方いたらお願いします。
629デフォルトの名無しさん:2008/11/05(水) 11:55:16
java.net.URL(以下URL)のインスタンスから簡単に親ディレクトリのURLインスタンスを取得する方法があれば教えて下さい。
630デフォルトの名無しさん:2008/11/05(水) 13:02:24
URL parent = new URL(url, "..");
631デフォルトの名無しさん:2008/11/05(水) 13:40:23
コンパイルしようとしても
推奨されないAPIを使用またはオーバーライドしています
詳細については、-deprecationオプションを指定して再コンパイルしてください

ってのが出て出来ないんですけどどうしたら良いですか?
632デフォルトの名無しさん:2008/11/05(水) 13:42:30
以下のプログラムでなんですが

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

public class ExpText1 extends JFrame{

public JScrollPane scrollPane,scrollPane2;
public JLabel lb1,lb2;
public JButton b1,b2;
public TextField tf1,tf2,tf3;
public JPasswordField pwf;
public Container container = null;
private Font font = new Font("serif",Font.ITALIC + Font.BOLD,36);
private Font font2 = new Font("serif",Font.BOLD,18);

public ExpText1(){
super("ExpText1");
setSize(500,280);

container = this.getContentPane();
container.setLayout(null);
container.setBackground(Color.gray);
container.setForeground(Color.red);

633デフォルトの名無しさん:2008/11/05(水) 13:43:31
b1 = new JButton("Enter");
b1.setSize(120,35);
b1.setLocation(345,200);
b1.setVisible(true);
b1.setOpaque(false);
b1.setBorderPainted(true);
b1.addActionListener(lsn);
container.add(b1);

tf1 = new TextField("Write here and type \"return\"");
tf1.setSize(300,30);
tf1.setLocation(40,65);
tf1.setForeground(Color.red);
tf1.setFont(font2);
tf1.setVisible(true);
tf1.addActionListener(lsn);
container.add(tf1);

tf2 = new TextField();
tf2.setSize(300,30);
tf2.setLocation(40,105);
tf2.setForeground(Color.red);
tf2.setFont(font2);
tf2.setVisible(true);
container.add(tf2);

634デフォルトの名無しさん:2008/11/05(水) 13:44:08
tf3 = new TextField();
tf3.setSize(200,30);
tf3.setLocation(140,155);
tf3.setForeground(Color.red);
tf3.setFont(font2);
tf3.setVisible(true);
container.add(tf3);

pwf = new JPasswordField(6);
pwf.setSize(200,30);
pwf.setLocation(140,195);
pwf.setForeground(Color.red);
pwf.setFont(font2);
pwf.setVisible(true);
pwf.addActionListener(lsn);
container.add(pwf);
pwf.setEchoChar('@');

lb1 = new JLabel("UserID");
lb1.setFont(font2);
lb1.setSize(80,30);
lb1.setLocation(40,160);
lb1.setOpaque(false);
container.add(lb1);

lb2 = new JLabel("Password");
lb2.setFont(font2);
lb2.setSize(100,30);
lb2.setLocation(40,200);
lb2.setOpaque(false);
container.add(lb2);
635デフォルトの名無しさん:2008/11/05(水) 13:45:15
addWindowListener(new WindowEvevtHandler());
setVisible(true);
}

ActionListener lsn = new ActionListener(){
public void actionPerformed(ActionEvent e){
String pushedButton = e.getActionCommand();
if((e.getSource())instanceof JTextField){
System.out.println("JTextField was actionvated");
tf2.setText(e.getActionCommand());
}
else if(e.getSource() instanceof JButton){
System.out.println(pushedButton);
if(pushedButton.equals("Enter")) method1();
}
}
};

636デフォルトの名無しさん:2008/11/05(水) 14:00:36
>>631
それは単なる警告だからコンパイル出来てると思うけど
気になるなら指示の通り
javac -deprecation ExpText1.java
のように-deprecationオプションを指定して再コンパイルすればよい
637デフォルトの名無しさん:2008/11/05(水) 14:22:21
eclipseでjavaとC++を使いたいときは
何をダウンロードしたらいいですか?
別々にC++とjavaようのeclipseをインストールしないといけないのですか?
638デフォルトの名無しさん:2008/11/05(水) 14:30:50
お風呂にはいるときに
あなたはお尻から入りますか?
それとも耳から入りますか?
639デフォルトの名無しさん:2008/11/05(水) 15:09:26
eclipseのjavaの奴でC++で開発できるようにできますか?
640デフォルトの名無しさん:2008/11/05(水) 15:42:00
簡潔に質問します。
一つのeclipseでjavaとCを開発したいです。
CDTをjava板のやつにインストールしてもできませんでした。
641デフォルトの名無しさん:2008/11/05(水) 15:45:04
>>640
GCC無いとか?

っつかEclipseスレで聞けよ
642デフォルトの名無しさん:2008/11/05(水) 15:45:09
はっ?知力の無い奴に聞かれて答えるかよ
643デフォルトの名無しさん:2008/11/05(水) 15:46:14
eclipse質問スレではないので、質問は出来ません。
GCCはあります。CDTを認識しません。
644デフォルトの名無しさん:2008/11/05(水) 15:50:55
>>643
ここJavaスレだからEclipseの話は基本的にスレ違い。
Java開発環境としてのEclipseの話ならともかくも、CDTの話じゃねぇ
645デフォルトの名無しさん:2008/11/05(水) 15:53:06
いや、ちょっと違います。
私の作ろうとしているソフトはjavaをmainにつかいつつ
Cを使おうという趣旨なので、java上でcを使うという意味で、
このスレを選択しました。
646デフォルトの名無しさん:2008/11/05(水) 16:06:52
JAVA上でCを使えますか? と
eclipseで・・・出来ますか?は全く別の質問であることを認識しよう。
647デフォルトの名無しさん:2008/11/05(水) 16:11:55
java厨はCにコンプレックス持ってるからだめだな。
ポインターにしっとしてるからね。
648デフォルトの名無しさん:2008/11/05(水) 16:39:41
jdk-6-doc-ja.zip
って今公式から落とせますか?
649デフォルトの名無しさん:2008/11/05(水) 16:41:22
>>645
最終目的がどうであれ、質問内容はEclipse開発環境の構築なわけで。
スレ違いだよ。

あ、あとJNIも別にスレあるから、JNIの質問あるならそっちでね。
650デフォルトの名無しさん:2008/11/05(水) 20:48:43
プログラム実行中に得点を更新するたびに、得点をテキストファイルに上書きしたいのですが追記になってしまいます↓↓

実行時でもテキストファイルに上書きは出来ますか?
651デフォルトの名無しさん:2008/11/05(水) 21:11:52
>>650
Writerの生成して、それそのまま保持して書いてるんじゃないの?
一旦closeしてもっかいWriterのインスタンス生成して書き込むといいよ。
652デフォルトの名無しさん:2008/11/05(水) 21:44:50
>>650
上書きモードじゃなく追記モードでファイルオープン。
653デフォルトの名無しさん:2008/11/05(水) 21:49:13
xボタンを押さずにウィンドウをクローズするにはどのようにすれば良いのでしょうか。
654デフォルトの名無しさん:2008/11/05(水) 22:01:13
>>653
java.awt.Window#dispose()
655デフォルトの名無しさん:2008/11/05(水) 22:04:30
>>654
出来ました。
有難うございます。
656デフォルトの名無しさん:2008/11/05(水) 23:41:00
>>651クラス単位で毎回newして、得点入力しcloseしてるのですが追記されてしまうんです↓↓
657デフォルトの名無しさん:2008/11/05(水) 23:43:12
ソースさらしてみんしゃい
658デフォルトの名無しさん:2008/11/06(木) 11:54:01
>>656
特に小細工せず普通にnew→write→closeすれば上書きされると思うんだが
Writer w;
w = new FileWriter("hoge");
w.write("7点");
w.close();
w = new FileWriter("hoge");
w.write("100点");
w.close();
659デフォルトの名無しさん:2008/11/06(木) 15:19:02
JTextPaneでドキュメントの末尾の位置を取得したいのですが
getEndPosition()は使えないのですよね……?
JTextPaneではどのようにするのでしょうか?
660デフォルトの名無しさん:2008/11/06(木) 20:00:35
getDocument().getEndPosition()でいかんの?
661デフォルトの名無しさん:2008/11/06(木) 23:22:02
Windows64bit用のJRE 6 Update 10をインストールしたのですが、
javacが見つかりません。

どうやってコンパイルするのですか。
662デフォルトの名無しさん:2008/11/06(木) 23:28:36
>>661
JREにはjavac入ってない。
663デフォルトの名無しさん:2008/11/07(金) 15:49:05
ファイルへの書き込みについての質問です

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter (new BufferedWriter(new FileWriter(fileA)));
String line;
while((line = reader.readLine()) !=null){
writer.println(line);
}

reader.close();
writer.close();
 
以上のプログラムを実行し、コンソールから文章を書き込むのですが
コンソールからの入力の終了し、while文へと行くにはどうしたらよいのでしょうか?
ちなみにeclipseを使っています。
664デフォルトの名無しさん:2008/11/07(金) 17:39:53
Ctrl+Z
665デフォルトの名無しさん:2008/11/07(金) 18:08:48
>>664
できました。
ありがとうございました!
666デフォルトの名無しさん:2008/11/07(金) 21:18:41
表示について聞きます。

文字列を表示させるときはダブルクオーテーション""でくくりますよね?

でもダブルクオーテーション自体を表示させたいときはどうするんでしょうか?
667デフォルトの名無しさん:2008/11/07(金) 21:24:57
\"
668デフォルトの名無しさん:2008/11/07(金) 22:49:53
'"'
669デフォルトの名無しさん:2008/11/08(土) 01:32:57
>>666
new String(new char[]{ '\u0022' });
670デフォルトの名無しさん:2008/11/08(土) 02:31:43
納豆に卵かけご飯をのせてたべたいんですが、どうですか?
671デフォルトの名無しさん:2008/11/08(土) 05:41:55
すいません…先ほどから六時間ぐらい悩んでいたのですが限界を感じたので力添えお願いします。
形態素解析でsenを導入して普通に実行した場合は上手くいくのですが
サーブレットとしてWebで表示させようとしたときはエラーがでます。エラーは下記の通りで
java.lang.NoClassDefFoundError: net/java/sen/StringTagger
SenSample.service(SenSample.java:17)
17行目にはStringTagger tagger = StringTagger.getInstance();を記述させています。
System.setProperty("sen.home","xxx");に問題があるのかと思い、ファイルの直下にsenを置いたり色々いじくってみたのですがエラーは変わりませんでした。
心当たりのある方がいましたらお願いします。
もしかたらsen単品ではサーブレット不可だったりするんですかね?
672671:2008/11/08(土) 07:39:50
すいません自己解決しました…。
Tomcatのシステムが分かっていなかったようです。
てっきり環境変数を通せばtomcat下のlibに追加しなくて良いと思っていたのですが…違うようですね。
辞書とか色んなファイルが詰まっているものを扱うのが初めてだったんでいい勉強になりました。
673デフォルトの名無しさん:2008/11/08(土) 10:32:25
Java って C の lint comment の /*NOTREACHED*/ に相当するものは
書けないんですか?
674デフォルトの名無しさん:2008/11/08(土) 11:14:52
lintはjavaを受け付けないから書けても意味がない
675デフォルトの名無しさん:2008/11/08(土) 11:43:52
>>674
以下のようなコードで javac が文句言うのを黙らせたい
Socket sock = null しとけば問題ないのは知ってるが,
try の外で宣言して try の中で使う変数が増えると,
いちいち null を代入するのがうざい

Socket sock;
try {
sock = new Socket();
...
} catch {
...
System.exit(1);
}
anyMethod(sock ...);

アノーテーションでもなんでもいいんだが, コンパイラが黙ってくれると幸せ
676デフォルトの名無しさん:2008/11/08(土) 11:54:28
Javaに初期化されない変数など存在しない。
フィールド変数だとnull, 0, 0.0で初期化されるが、
ローカル変数だと不定のままなので叱ってくる。

それを無視したら言語仕様から外れてしまう。
677デフォルトの名無しさん:2008/11/08(土) 12:02:12
>>675
exitの後にreturn
678デフォルトの名無しさん:2008/11/08(土) 13:19:01
>>675
try{
 sock = new Socket();
 ...
 anyMethod(sock ...);
} catch {


じゃ駄目なの?
679デフォルトの名無しさん:2008/11/08(土) 14:07:23
>>678
anyMethod() が new Scoket() と同じタイプの Exception 投げたら
exit() してしまうではないか。Socket() の失敗は exit() したいけど
anyMethod() の失敗では exit() したくないって意味じゃねぇの?
680デフォルトの名無しさん:2008/11/08(土) 14:14:18
URLEncoder.encode で指定する第二引数の文字セットは、そのPC固有の(デフォルトの)文字セットじゃないとだめなんですか?

WindowsXPならcp932とか・・・
681デフォルトの名無しさん:2008/11/08(土) 14:17:34
>>677
return を書く部分に明示的に, ここには絶対に到達しないってな事が
コンパイラにも人間にも分かる形で表記できれば, 保守性も上がると
思うんだが...

System.exit() とかなら見た目一発で分かるけど, 通常は行った先から
帰って来ない, なんてのはそこ見ただけじゃわかんないでしょ?

まぁ, 無い物ねだりをしても意味がないんで諦めるしかなさげだな.
682デフォルトの名無しさん:2008/11/08(土) 14:20:54
>>675
先にデフォルトを指定するか、後で分岐する全ての場合に対して指定するかの違い
683デフォルトの名無しさん:2008/11/08(土) 14:23:02
>681
throw new RuntimeException("致命的な問題が発生しました!");
684デフォルトの名無しさん:2008/11/08(土) 14:26:59
>>680
読んでますか?
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/net/URLEncoder.html

どう見ても UTF-8 推奨と書いてありますが。
685680:2008/11/08(土) 14:38:19
>>684
どうもありがとうございます。UTF-8が推奨なんですね。ありがとうございました。
UTF-8の文字変換用テーブルがあって、それをつかって文字列をエンコードするっていうことなんですね。
ローカルPCの文字コードなど何も関係ないんですね。文字コードのエンコードの仕方とかがなんとなくわかりました。

どうもありがとうございました。文字コードは難しいですね。
686デフォルトの名無しさん:2008/11/08(土) 15:48:35
二つ質問させてください。

一つ目はJavaのif文の真偽判定についてですが、
trueの場合のみ真となり、falseの場合のみ偽となり、それ以外の値は全てコンパイルエラー
という認識で合ってるでしょうか?

もうひとつはfor文についてなのですが、
javascriptにあるようなfor ~in オブジェクト のようにinの後にオブジェクトを置いてforで回せるような構文はありますか?

自分javascriptしか分からないもので変な例えになってしまいましたが
よろしくお願いします。
687デフォルトの名無しさん:2008/11/08(土) 15:51:20
あってる
javaのifはboolean値限定

拡張for文というのを使う
for (object item : collection)
688686:2008/11/08(土) 16:50:07
>>687
拡張for文というのがあるのですね。
ありがとうございました。勉強になりました。
689デフォルトの名無しさん:2008/11/08(土) 22:39:52
基礎的な質問ですが,宜しくお願いします。
1つのソースtest.javaからなるプログラムにおいて,
class test{
public static void main(String args[]){}
}
だと正常に動作するのに,
public class test{
public static void main(String args[]){}
}
とすると動作しないのはなぜなのでしょうか。
つまり,classの前にpublicをつけるかどうかで何がかわるのでしょうか。
690デフォルトの名無しさん:2008/11/08(土) 22:44:09
>>689
その例ならどちらでも動作するはずだが、本当に動作しないのか?
691689:2008/11/08(土) 22:47:53
>>690
ごめんなさい,少し記述を間違えました。
動作しないのは,
public class Nondeterminism{
public static int i = 0;
public static void main(String args[]){}
}
です。
692デフォルトの名無しさん:2008/11/08(土) 22:56:44
何言ってるのかわからんが
TEST.javaには一つのpublicクラスが必ずありクラス名はTEST
TEST.javaの他のクラスはpublicはつけてはいけない。(インナークラスを除く)
693689:2008/11/08(土) 23:00:26
>>692
理解しました。
ありがとうございます。
694デフォルトの名無しさん:2008/11/09(日) 01:01:06
> TEST.javaには一つのpublicクラスが必ず
しもなくても構わない
もしpublicなトップレベルクラスがあるのならその数は一つでクラス名はTESTでなければならない
695デフォルトの名無しさん:2008/11/09(日) 03:19:26
すみません。初心者です。instanceof演算子の使い方を確認しようと思い、簡単なサンプルコードを書いてみたのですが、なぜかコンパイルが通りません。
エラーはSyntax error on token "(", ; expectedといっているのですが、どこがおかしいのかわかりません。

class Abs{
private int x;
private int y;
public Abs(){
x=120;
y=200;
}
public void show(){
System.out.println("x is: "+this.x);
System.out.println("y is: "+this.y);
}
}
public class Test{
public static void main(String args[]){
Test abc = new Test();
checkobj(abc);
Abs obj = new Abs();
obj.show();
void checkojb(Object xxx){
if(xxx instanceof Test){
System.out.println("this is Test");
} else {
System.out.println("this is not Test");
}
}
}
}
696デフォルトの名無しさん:2008/11/09(日) 03:34:01
>>695
obj.show(); の後ろに } をいれて最後の } を消す。
697デフォルトの名無しさん:2008/11/09(日) 03:34:25
>>695
定義されていないメソッド名を呼び出している。
メソッドは入れ子に出来ない。
698695:2008/11/09(日) 03:47:23
ありがとうございます。「;」のエラーは出なくなったのですが、今度は下記のような
エラーが出るようになりました。。何がおかしいのでしょう??度々すみません。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method checkobj(Test) is undefined for the type Test
699デフォルトの名無しさん:2008/11/09(日) 08:08:52
タイプミスがあります。

checkojb
--->
checkobj
700デフォルトの名無しさん:2008/11/09(日) 11:43:01
あと void checkobj を static void checkobj かな。
701デフォルトの名無しさん:2008/11/09(日) 13:46:21
構文ミスなんで自分でなおすこと!
702デフォルトの名無しさん:2008/11/09(日) 15:22:07
質問なんですが
自分自身(ShowFile1.java)を表示するプログラムを作成しなさい。
という宿題が出されたんですがコマンドに何を入力すればいいのか分かりません。
誰か分かる人お願いします。
703デフォルトの名無しさん:2008/11/09(日) 15:35:27
プログラムの動かし方もわからないなんて授業何聞いてたんだよ・・・
教科書か初級参考書読めばすぐ分かると思うのだが。
704702:2008/11/09(日) 15:45:02
教科書見直したありました
showfileを使うんですね、ありがとうございます
705デフォルトの名無しさん:2008/11/09(日) 15:50:42
Runtime.getRuntime().exec("notepad.exe ShowFile1.java")で提出してみてほしい
706デフォルトの名無しさん:2008/11/09(日) 16:30:57
じゃヴぁ
707デフォルトの名無しさん:2008/11/09(日) 17:35:03
serializableインタフェースを実装したクラスのインスタンスを
objectstreamクラスを使って受け渡しをしたときの問題なのですが、
送信側から一度インスタンスを送信し、そのインスタンスの内部の情報を変更し、
再び送信した場合、受信側では2つインスタンスが届くのですが、
2つ目に届いたインスタンスが1つ目のインスタンスと全く同じ情報を持ったインスタンスとして
届いてしまいます。原因は恐らく受信側が送信側から送られてきた2つ目のインスタンスを
以前届いたインスタンスと同じものであると判断してストリームから読み込んでいないものと思われるのですが、
解決方法がどうしてもわかりません。どなたかご指南お願いします。
708デフォルトの名無しさん:2008/11/09(日) 18:33:14
>>707
Serialize は少し賢いけど、ある程度は調教する必要があるので、そのあたり?
google> java serialize
709デフォルトの名無しさん:2008/11/09(日) 18:57:54
(・ω・)

BigIntegerの四則演算をint,longなどのシフト演算で自作する。

そんな課題でヽ(・∀・)ノってなってるわけだが…


どなたか教えてはくれまいか。
710デフォルトの名無しさん:2008/11/09(日) 19:25:43
>>707
つリセット
711デフォルトの名無しさん:2008/11/09(日) 19:37:31
>>709
★★ Java の宿題ここで答えます Part 66 ★★
http://pc11.2ch.net/test/read.cgi/tech/1221652206/
712デフォルトの名無しさん:2008/11/09(日) 20:46:04
フレーム上でポップアップメニューを表示させたいのですが、mouseClicked()でisPopupTrigger()が反応してくれません。
mouseReleased()では反応しているのですが・・・何故でしょうか?
713デフォルトの名無しさん:2008/11/09(日) 20:47:38
具体的には
public void mouseClicked(MouseEvent e)
{
if(e.isPopupTrigger())
{
Point p = new Point();
p.setLocation(scrollPanel.toCanvasPoint(e.getX(),e.getY()));
pop.show(scrollPanel, p.x, p.y);
}
else if(javax.swing.SwingUtilities.isRightMouseButton(e))
{
Point p = new Point();
p.setLocation(scrollPanel.toCanvasPoint(e.getX(),e.getY()));
pop.show(scrollPanel, p.x, p.y);
}

↑でelse ifの中にブレークポイントを置くとそこで止まる。
714デフォルトの名無しさん:2008/11/09(日) 20:57:38
質問です。

テキストファイルのデータを
Enterキー押すと一行出力
またEnterキー押すと次の一行出力
というようなことは出来ますか?

要するにEnterキーが押されるまで処理を停止させることは出来ますか?
715デフォルトの名無しさん:2008/11/09(日) 23:35:38
>>712
MouseEventのJavaDocより
>public boolean isPopupTrigger()
>このマウスイベントが、そのプラットフォームのポップアップメニュートリガイベントであるかどうかを返します。
>注: ポップアップメニューのトリガはシステムによって異なります。したがって、共通プラットフォームを適切に機能させるために、mousePressed および mouseReleased の両方で isPopupTrigger をチェックする必要があります。
ってことでisPopupTrigger はmousePressedかmouseReleasedでしか使えないんじゃないの?

>>714
CUIでいくならSystem.in使うとか
未検証だけど
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text = null;
while((text = br.readLine()) != null){
printNextLine();
}
716デフォルトの名無しさん:2008/11/10(月) 00:07:48
>>715
そうですか・・・有り難うございます
717デフォルトの名無しさん:2008/11/10(月) 01:06:46
アサーションって作業的に書きまくるってもんでもないんですかね?
googleソースコード検索とかでググって見ても,要所をピンポイントで使うだけのような感じです.

プライベートメソッドの引数のヌルチェックやら値域チェックやらガチガチに書いていくもんだと思いましたが・・・
718デフォルトの名無しさん:2008/11/10(月) 01:32:24
JavaからWindowsのICMを利用する方法を教えてくださいm(__)m
719デフォルトの名無しさん:2008/11/10(月) 01:41:40
List<Book>
を return しないといけないときに
List<BookImpl>を return してもダメなんですか?
変換できないって言われます。

Book : Interface
BookImpl : implements Book
720デフォルトの名無しさん:2008/11/10(月) 04:42:17
>>719
List<Book>とList<BookImpl>とは互換性のない型なのでそうなる。
もし互換性を認めてしまうとタイプセーフでなくなる。
例えば、
List<BookImpl> list = new ArrayList<BookImpl>();
List<Book> list2 = list; // 実際はここで互換性がないのでエラーになる
list2.add(new BookAnotherImpl());
みたいなことができてしまう。
list2の実体はlistであるにも関わらずBookImplでない別のBookの実装をadd可能になる。
もし、
public List<Book> getList() {
List<BookImpl> list = new ArrayList<BookImpl>();
list.add(new BookImpl());
return list;
}
のようなことがしたいのなら、
public List<Book> getList() {
List<Book> list = new ArrayList<Book>();
list.add(new BookImpl());
return list;
}
のようにList<Book>を作成してそれを返すようにする。
List<Book>にBookImplをaddすることはできるので。
721デフォルトの名無しさん:2008/11/10(月) 05:55:39
初心者です。質問です。なぜ下はコンパイルが通らないのに
public class SuperTest{
}

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

SuperTestのクラス宣言からpublicを取ると通るようになるのでしょうか?
722デフォルトの名無しさん:2008/11/10(月) 06:22:03
723721:2008/11/10(月) 06:31:18
>>722
なるほど似たような質問が。ちなみに、ファイルをSuperTestとTestで分割したところ
動作しましたが、要するに1ファイルあたりpublicは0個もしくは1個のどちらかでなくては
ならないということですね。
724721:2008/11/10(月) 06:33:23
あれ、でもよくよく考えたら
public class Test {
public static void main(String args[]){
}
}
は1ファイル内にpublicが2個ありますが。。これがインナークラスって奴ですか?
いや、mainなので別にクラスではないですよね。。??
725デフォルトの名無しさん:2008/11/10(月) 06:51:03
mainはメソッド
classというキーワードがmainには付いていないでしょ?
publicというキーワードはクラス名にだけ付くものではない
726721:2008/11/10(月) 06:56:31
了解です。理解しました。最後にもしわかったら
なぜ1ファイル内にpublicは1つまでという仕様になっているのでしょうか?
727デフォルトの名無しさん:2008/11/10(月) 07:09:50
コンパイルする時にコンパイラがソースファイルを探しやすいようにじゃないかな
ソースパスに存在するファイル名だけを見ればどこに目的のクラスのソースがあるか分かるので
さもないとコンパイラがソースファイルの中を探していかないといけなくなる
特にそうしなければならない場合以外はpublicでないクラスの場合とかでも
ソースファイル1個にはトップレベルクラス1個にしておいた方がいい
728デフォルトの名無しさん:2008/11/10(月) 07:35:48
public enumでも1ファイルにしなくてはいけなくて辛いことがある。
enumは例外にして欲しいな。
729デフォルトの名無しさん:2008/11/10(月) 07:39:17
>>728
どっかのクラスのメンバにしちまえば?
730デフォルトの名無しさん:2008/11/10(月) 09:46:07
>>720
ありがとうございます。
勉強になりました。
731デフォルトの名無しさん:2008/11/10(月) 11:23:25
strutsのタグファイルはどこに格納されているのでしょうか?
自分が勉強した限りでは
タグファイルは、WEB-INF/tags もしくは WEB-INF/lib/META-INF/tags
に配置しなければならないはずなのですが、
WEB-INF/libに入れているstrustsのファイル群の中にそれらしいものが見当たりません。
732デフォルトの名無しさん:2008/11/10(月) 14:11:37
よくわからないのですがクラス型のオブジェクトの配列を宣言、初期化するときは
どうすればよいのでしょうか?
class SuperTest{
}
public class Test{
public static void main(String args[]){
SuperTest[] abc = new SuperTest[] {abc[0], abc[1]};
}}
これはなぜコンパイルエラーになるのでしょうか?
733デフォルトの名無しさん:2008/11/10(月) 14:40:40
>>732
宣言と同時に初期化なら
SuperTest[] abc = {new SuperTest(), new SuperTest()};

宣言した後に初期化なら
SuperTest[] abc; abc = new SuperTest[]{new SuperTest(), new SuperTest()};

貼られたコードがコンパイルエラーになるのは"Definite Assignment"、
日本語訳だと「確実に代入」されてないから。
abc[0] とか abc[1] を使いたければ、
abcが「確実に代入」された後じゃないとダメ。
SuperTest[] abc = null; abc = new SuperTest[]{ abc[0], abc[1] };
とすればコンパイルエラーは出なくなる。実行時に例外食らうけど。
734デフォルトの名無しさん:2008/11/10(月) 14:42:58
>>732
SuperTest[] abc = new SuperTest[] {abc[0], abc[1]};

SuperTest[] abc = new SuperTest[2];
abc[0] = abc[0];
abc[1] = abc[1];
ということをやろうとしているのに等しいので初期化されていない配列の要素を代入しようとしてエラーになる
配列abcの要素として入れたいのはSuperTestのインスタンスだから上の書き方なら
SuperTest[] abc = new SuperTest[2];
abc[0] = new SuperTest();
abc[1] = new SuperTest();
というように普通の変数に代入するのと同じように書く
これは
SuperTest[] abc = new SuperTest[] {new SuperTest(), new SuperTest()};
と書け
SuperTest[] abc = {new SuperTest(), new SuperTest()};
のように宣言と初期化を同時に行うのなら略記できる
735734:2008/11/10(月) 14:52:31
SuperTest[] abc = new SuperTest[2];
abc[0] = abc[0];
abc[1] = abc[1];
自体はabcが代入されたあとなのでコンパイルエラーにならないので
「ということをやろうとしているのに等しい」は大体の意味合いとしてってことで
>>733の言うように
宣言と初期化を一緒に行う場合はabc自体が確実に代入されたあとでないと
abcを初期化には使えない
736732:2008/11/10(月) 15:13:02
勉強になりました!ありがとうございました。
737デフォルトの名無しさん:2008/11/10(月) 20:11:42
すみません。まだ、会社に入ったばっかなんですが、メインメソッドのなかでスレッドを使って
InterruptedExceptionの発生する箇所にはtry{} catch(InterruptedException)で例外発生時の捕まえる文を書きました。
先輩が、mainメソッドにもthrows InterruptedExceptionを書かなくちゃいけないといってきたんですが、
正直その先輩はちょっと怪しいです・・本当に書かなくちゃいけないのですか?
プログラムとしてはこんな感じです。↓
public static void main(String[] args) throws InterruptedException {
  // 何らかの処理
  try {
   Thread.sleep(1000);
  } catch(InterruptedException e) {
   System.out.println(e);
  }
}
738デフォルトの名無しさん:2008/11/10(月) 20:16:32
そんな会社に入ってしまってご愁傷様です
739737:2008/11/10(月) 20:19:01
>>738
やっぱそうですよね・・ 例外が発生する箇所はちゃんとtry{~}catch(InterruptedException){~}
でキャッチするように書いているので、書く必要はないですよね。

基本的に例外が発生して呼び出しもとのクラスに処理依存するときにthrows節を書かなくてはいけないと
認識していました。

どう考えても、理屈に合わないので、ここで聞いてみました。答えがわかって良かったです。
ありがとうございました。
740デフォルトの名無しさん:2008/11/10(月) 20:20:27
それはそうとして、InterruptedException を無闇に握り潰してはいけないぞ
わかってやる分にはいいが
741デフォルトの名無しさん:2008/11/10(月) 20:23:48
ちなみに、InterruptedException のハンドリングを次の機会に回してしまう場合は、
例外処理の中で Thread.currentThread().interrupt() を呼び出して復元しておくのが定跡
742737:2008/11/10(月) 20:38:24
>>740-741
どうもありがとうございます。スレッドはあまり触れた事がないので
分厚い本をみて勉強しながらプログラムを組んでいる最中です。
ご助言をスクラップブックに保存しておいたので、なにかのときには
役にたてたいとおもっています。

他のご助言までくださり、ありがとうございました。
743デフォルトの名無しさん:2008/11/10(月) 21:13:02
interfaceのメリットがよく分かりません。

interfaceを実装(implement)するクラスで、制約通りにメソッドの中身を書くわけですが、
最初からメソッドをそのまま書いた場合と、
interfaceで定義されてる定数が利用出来る意外のメリットはあるんでしょうか。

interfaceがあるから、これだけコードを書かなくて済むとか、
メリットについて分かりやすいっていうサイトや表現があればお願いします。
744デフォルトの名無しさん:2008/11/10(月) 21:21:36
interfaceに定数書くのは良くない使い方
void hoge(Printable obj) { obj.print("hoge"); }
こういう風に、実装に関係なくメソッドを呼び出せる
実際に表示するのはコンソールかもしれないしファイルかもしれないしメッセージボックスかもしれない
でも「文字列を出力する」のは同じだから同じように扱える
745デフォルトの名無しさん:2008/11/10(月) 21:28:29
>>743
どっちかっつーとinterfaceのメリットっつーか
interface使わない場合のデメリットになるけど
「実装の多重継承」でぐぐってみれば?
746デフォルトの名無しさん:2008/11/10(月) 22:50:24
インタフェースや抽象クラスは、
それを実装する側に属するのではなく、それを呼び出す側に属する。

使われ方を想定せずに、いきなりインタフェースや抽象クラスを書いて
それを実装しても無意味
747デフォルトの名無しさん:2008/11/10(月) 22:51:14
WebProg板で聞いても詳しい答え教えてくれそうも無いから、詳しそうな人が多いから
ここで聞きたいんだけど、あと、Javaの文法的なことだし・・

サーブレットのdoGetメソッドって実装するときextends HttpServletクラスを実装してて
doGetメソッドをオーバーライドすることになるんだろうけど、どうしてsuper.doGet()の一文がなくていいの?

教えてエロイ人。
748デフォルトの名無しさん:2008/11/10(月) 22:57:22
>>747
HttpServlet.doGet を使わないから。
749747:2008/11/10(月) 22:59:20
?? 意味がちょいと・・あっしは達人ではないので・・

でも、わかりました。HttpServletクラスがabstractクラスだからですよね。

でも、他のところでまた疑問が・・
initメソッドだとあるホームページだとsuper.init()って書いてあるんです。。なんでだろう。難しいなあ。
750デフォルトの名無しさん:2008/11/10(月) 23:04:45
JTextAreaでテキスト入力してると、時々入力で固まったり、
ウィンドウが真っ白になったりする事があるのですが、
これはJavaのバグでしょうか?JDK1.6.0_10を使っています。
751デフォルトの名無しさん:2008/11/10(月) 23:06:17
>>749
abstract はあまり関係ない。
単に HttpServlet クラスで定義された doGet メソッドを使用せずに
継承した独自のクラスで定義した doGet メソッドを使用すれば事足りるから
super.doGet を使わない。
init の例だと HttpServlet クラスで定義された init を使いたいから
super.init してるだけ。
752747:2008/11/10(月) 23:10:24
>>751
どうもありがとうございます。とてもよく分かりました。
その辺の区別をつけるのが難しいと思いますが、難しい事を考えず
本のサンプルの通りにしばらくやっていこうとおもいます。

とても丁寧に教えていただいてありがとうございました。感謝しています。
753デフォルトの名無しさん:2008/11/10(月) 23:50:59
一人で何回質問してんだよ
754デフォルトの名無しさん:2008/11/11(火) 00:12:25
質問スレなんだから
小さいこと言うなって
755デフォルトの名無しさん:2008/11/11(火) 01:02:10
まだ始めて2日目の超初心者です…
「Test」と表示されるアプレットを作ったのですがブラウザに表示されません。
appletviewerではきちんと表示されたのですが…
ブラウザはFirefoxの最新版です。

何か設定が必要なのでしょうか?

よろしくお願いしますm(__)m
756デフォルトの名無しさん:2008/11/11(火) 01:14:37
>>755
<applet code="クラス名" width="幅" height="高さ">
</applet>

上の文はHTMLに書いたよね?配置するフォルダとかあってるよね?
757デフォルトの名無しさん:2008/11/11(火) 01:26:18
>>756

はい。
アプレット以外のプログラムはいくつか作りましたし、フォルダとかは間違いありません。

htmlの中身も確認しましたが間違いありませんね…
758デフォルトの名無しさん:2008/11/11(火) 01:36:50
今、他のマシンでIEで試したところさくっと表示されました…
やっぱりFirefoxが原因みたいです。
これだとスレ違いになってしまいますね…
もう一度調べてみることにしますm(__)m
759デフォルトの名無しさん:2008/11/11(火) 02:23:39
Javaで書かれたライブラリのapidocsとか見てると

foo.bar.Baz
foo.bar.impl.BazImpl

な風にユーザが利用することを想定しているfoo.bar.Bazと
その内部実装であるfoo.bar.impl.BazImplに別けてる事例を散見するんですが
こういう技法は一般的にはなんて呼ばれてるんでしょうか?
またこういうのを勉強するには何を参考にしたらいいでしょうか?
760デフォルトの名無しさん:2008/11/11(火) 03:51:43
final修飾子はフィールドにつくと値を変更出来ないと書いてあるのですが、
なぜ配列の場合は変更出来るのでしょうか?

public class Test {
public static void main(String args[]){
final int[] a = new int[] {10};
System.out.println(a[0]);
a[0]=12;
System.out.println(a[0]);
}
}
761デフォルトの名無しさん:2008/11/11(火) 06:38:38
>>760
final は変数に対する修飾子。
変数に対して再代入出来なくなるだけなので、変数が指しているオブジェクトは変更できる。

>>760 の例で言うと、変数 a に対して、
a = new int[5];
などのように再代入できなくなっているが、
a[0] = 12;
のように中身は変更できる。

String などのように元々変更できないものを指す変数に対して final を付ければ、その変数に
対して再代入できなくなり、なおかつオブジェクトも変更できないので、全体として定数と
同じ扱いになる。
762デフォルトの名無しさん:2008/11/11(火) 06:42:03
>760
配列は基本型ではなく参照型だからね、クラスと同様に。
クラスの場合で考えてみて…
  final Test t = new Test() ;
で、new したあとで t が持ってるフィールドを変更できなくなっちゃったら困るでしょ。
ではこの場合の final はどういう意味か?
それは「t が示すインスタンスを、他のインスタンスに変えることはできない」って意味になる。
  Test t = new Test(); // instance1
  t = new Test() ; // instance2
これだと、2行目で instance2 が作られると同時に、変数 t は instance2 を示すようになる。
この時点でほかに instance1 を示している変数などが存在しなければ、instance1 はガベージコレクトの対象になる。
でも t がこのように違うインスタンスを示すようになっては困る場合に、t の宣言時に final をつける。
配列の場合も同様。言語によってイメージが違うけど、
Java における配列は、たとえ基本型の配列であっても「配列という参照型」になるんだ。
つまり「配列の中身を変えられたくない」ではなく「他の配列を指さないでほしい」という配列変数に final をつけるんだな。
763760:2008/11/11(火) 08:39:28
>>761, >>762
なるほどよくわかりました。ありがとうございました。
764デフォルトの名無しさん:2008/11/11(火) 08:43:10
すみません。以下のコードを実行すると、java.lang.ArrayIndexOutOfBoundsException: 4
が発生します。自分的にはcreateメソッドを呼び出す際に配列abcは配列defを指し示すように
したつもりなので、createメソッド呼び出し後は配列abcの要素数は3ではなく5のつもりなのですが。。
どの認識が違うのでしょう??

public class Test3 {
public static void main(String args[]){
Object[] abc = new Object[] {3, 56, 2};
create(abc);
abc[4]=1000;
for(Object num: abc) System.out.println(num);
}

public static void create(Object abc){
Object def = new Object[5];
System.arraycopy(abc, 0, def, 0, 3);
abc = def;
}
}
765デフォルトの名無しさん:2008/11/11(火) 08:49:34
>764
create() メソッドの2行目をよく見るんだ
766デフォルトの名無しさん:2008/11/11(火) 09:02:27
>>764
Javaには参照渡しがないから
メソッド内で参照型の引数に新しい参照代入しても呼び出し元では影響受けない。
767デフォルトの名無しさん:2008/11/11(火) 09:06:21
>>765
?createメソッドの中では
1行目:Object def = new Object[5];
この時点でabc={3, 56,2}, def={Null, Null, Null, Null, Null}
2行目:System.arraycopy(abc, 0, def, 0, 3);
この時点でabc={3, 56,2}, def={3, 56, 2, Null, Null}
3行目:abc = def;
この時点でabc={3, 56, 2, Null, Null}, def={3, 56, 2, Null, Null}ではないのでしょうか?

配列はクラスやStringと同様、アドレスを指し示しているだけなので、C言語のノリでいくと
abcはdef配列をポイントするようになるかと思ったのですが
768デフォルトの名無しさん:2008/11/11(火) 09:12:06
Object def = new Object[5];
--->
Object def = new Object()[5];

ではなかったかな?
769764:2008/11/11(火) 09:17:04
>>768
本当ですか。
Object def = new Object()[5];にすると
xception in thread "main" java.lang.Error: Unresolved compilation problem:
The type of the expression must be an array type but it resolved to Object
というコンパイルエラーが発生するようです
770768:2008/11/11(火) 09:20:55
あ、正しくは、
Object[] def = new Object()[5];

だと思う。あと引数のabcもObject[] abcのはず。

それから、最後のabc=defは意味をなさない。
771768:2008/11/11(火) 09:27:48
だけど、ちょっと不思議なプログラムですね。

引数でObject abcとするのと、Object[] abcとするのとでは意味が違う
けれど、Javaでは、実引数が配列だった場合もObject abcで受け取れる
事は受け取れてしまう。だからコンパイル・エラーにはなってない。
この場合、abc=defは、意味が分かりにくい。
言語仕様によっては中身もコピーしてくれても良さそうではある。
しかし、長さまで修正するかな・・・。

これがやりたいなら、戻り値をvoid型にせず、Object[] 型にして
return 文でdefを返し、main側で、abc=create(abc)とすると良いです。
772デフォルトの名無しさん:2008/11/11(火) 09:51:58
>>767
C言語のノリでいくと、
void create(void* abc){ abc = 0; }
int main(int argc, char* argv[]) {
 void* abc = malloc(sizeof(int) * 3);
 create(abc);
 printf("%p", abc);
}
で何が表示されるか? ってのと似てる。
773764:2008/11/11(火) 09:53:18
まずつまらない文法上の誤りがあったので最初に修正版を載せます。
public class Test3 {
public static void main(String args[]){
Object[] abc = new Object[] {3, 56, 2};
create(abc);
// abc[4]=1000; ERROR!!
for(Object num: abc) System.out.println(num);
}

public static void create(Object[] abc){
Object def[] = new Object[5];
for(Object num: def) System.out.println(num);
System.arraycopy(abc, 0, def, 0, 3);
for(Object num: def) System.out.println(num);
abc = def;
}
}

>>770
Object[] def = new Object()[5];
これはエラーになりますので()は不要かと思います。

766さんの回答が恐らく答えなのでしょうが、あんまりよくわからないです。
C言語だと、関数内でポイントし直すとそれはmainに戻ったときも有効だと思うのですが、
Javaの場合はC言語と同じように配列は参照型でありながら、(参照渡しがないから?)
動作が異なるということでしょうか?すみません、参照渡しって何でしょうか。。
どなたかCとJavaの違いを解説して頂けるとうれしいです
774デフォルトの名無しさん:2008/11/11(火) 10:24:18
>>773
違う言語を似てるからそうだろとか無理だろw
Javaの入門書1冊やってから来てくれ
775デフォルトの名無しさん:2008/11/11(火) 10:48:18
というより、>>773はC言語も、もうちっと勉強した方がいい。
たぶんC言語の方の理解が中途半端だから混乱してるだけ
776デフォルトの名無しさん:2008/11/11(火) 11:18:24
>>773
これで何が表示されるか考えてみるといいよ
intは値型だろって言いたいなら、Integerでもいいよ

public static void main(String[] args) {
int abc = 3;
create(abc);
System.out.println(abc);
}
public static void create(int abc) {
int def = 5;
abc = def;
}
777デフォルトの名無しさん:2008/11/11(火) 12:03:00
mainメソッドってstaticがついてるけど、これってJVMが静的関数として呼べるからって本にかいてあるけど、
そこまで徹底しなきゃいけないの?
778デフォルトの名無しさん:2008/11/11(火) 12:24:36
うん
779デフォルトの名無しさん:2008/11/11(火) 12:28:49
>>773
mainメソッドにある変数abcとcreateメソッドでパラメータとして受け取ったabcは
そもそも別の変数だと理解しないとな。
createメソッドを呼び出すとき、mainのabcの値(配列なので参照先≒Cでいうアドレス)がcreateのabcに入る。
そのabcにdefの値(同じく配列以下略)を入れたところで、createから戻った時に引数の変数の値も戻される
(createのabcの値がmainのabcに上書きされる)わけじゃないから、mainのabcはcreateを呼び出す前と変わらない。
以前のスレにこの辺をAAで上手く書いた人がいたんだがな・・・
780デフォルトの名無しさん:2008/11/11(火) 14:45:26
>>773
Javaは「参照の値渡し」。

似たようなことをやりたければ、
abc = create(abc); となるように create を書き換える。

いろんな意味で、もっと仕様を固めた方が良いと思うがね。
781デフォルトの名無しさん:2008/11/11(火) 17:20:38
ジェネリクスを用いたクラスにCloneableを実装してclone()を作りたいのですが
どのように作ればよいでしょうか
782デフォルトの名無しさん:2008/11/11(火) 17:39:09
このように作ればよい
public class MyObject<T> implements Cloneable {
public MyObject<T> clone() {
try {
@SuppressWarnings("unchecked")
MyObject<T> clone = (MyObject<T>) super.clone();
ごにょごにょ
return clone;
} catch (CloneNotSupportedException e) {
throw new AssertionError(e);
}
}
}
783デフォルトの名無しさん:2008/11/11(火) 17:42:18
今サーブレットの勉強を始めたばかりの所なんですが、
たとえばweb.xmlの
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

こういうのって皆さん覚えているんでしょうか?
それとも一々ググったり過去のソース見たりしてコピペして書くものなのですか?
784デフォルトの名無しさん:2008/11/11(火) 17:51:30
おまじないは丸暗記、これ基本。
785デフォルトの名無しさん:2008/11/11(火) 17:52:46
今の開発現場だとバージョンは何が主流ですか?
J2SE5.0系?それともJavaSE6.0系?
786>>785:2008/11/11(火) 17:54:05
あ、すみません。Web系の仕事でです。
787781:2008/11/11(火) 19:01:40
>>782
おおー・・・ありがとうございます
788デフォルトの名無しさん:2008/11/11(火) 19:29:48
>>783
そんなもの最初のうちは丸暗記Orコピペで十分。ただ、バージョンごとに違うからServlet2.5を使いたいときはそれ相応の
文章を書かなくてはいけないから、そこだけは注意する。

5年もたてば、どういうことかすぐわかるよ。っていうか、すぐわかりたいならXMLのDTDやらスキーマ(Schema)やら
本で勉強したらいいよ。内容としては、文章の定義をどういう定義にするかっていう糞つまらない話なだけだから。
789デフォルトの名無しさん:2008/11/11(火) 22:13:24
clone()を実装するときはデープコピーが多いので気になっているのですが、
もしclone()のシャローコピーはどういうパターンのときで有用なのでしょうか?
790デフォルトの名無しさん:2008/11/11(火) 23:26:41
>>789
メモリ節約したい場合とか、
メンバーフィールドが参照してるインスタンスを共有したい場合とか。
791デフォルトの名無しさん:2008/11/11(火) 23:44:19
それならthisを引数に渡したりすればいいし、thisを使えば済むんでない?
792デフォルトの名無しさん:2008/11/11(火) 23:48:46
>>791
そもそも、コピー取りたいんだから this と完全に同じじゃダメでしょ。
793デフォルトの名無しさん:2008/11/11(火) 23:49:53
抽象的な質問には抽象的な答しか返ってこないという見本だな。
794デフォルトの名無しさん:2008/11/12(水) 00:30:53
答えられないと抽象的なことを言って逃げてる奴がいるようだなw
795デフォルトの名無しさん:2008/11/12(水) 00:32:51
話題はコピーじゃなくてクローンじゃなかったのか。
そもそも、シャローコピーだとオブジェクトの状態はほとんどthisと同じになるんじゃないのか?実装によるけど。
796デフォルトの名無しさん:2008/11/12(水) 01:35:26
clone()自体使ったことないな
797デフォルトの名無しさん:2008/11/12(水) 01:45:18
使ったことなきゃclone()の醍醐味を味わえない罠w
798デフォルトの名無しさん:2008/11/12(水) 02:02:06
モバイルコンテンツやりたいんだけど
なにしたらいいの?
799デフォルトの名無しさん:2008/11/12(水) 04:31:04
とりあえず絵でも描けば?
800びぎなぁ:2008/11/12(水) 05:20:24
すみません。初めてjavaを書いたのですが、自作のソートメソッドを呼び出そうと
するとエラーになります。なんででしょうか?
エラー:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method Sort(Student[]) is undefined for the type Test
((Test.java))
public class Test {
public static void main(String args[]){
Student[] student = new Student[6];
student[0]=new Student("1gou", 1, 150, 89);
student[1]=new Student("2gou", 2, 140, 30);
student[2]=new Student("3gou", 3, 170, 47);
student[3]=new Student("4gou", 4, 110, 67);
student[4]=new Student("5gou", 5, 200, 50);
student[5]=new Student("6gou", 6, 90, 77);

Sort(student);
}
}
801びぎなぁ:2008/11/12(水) 05:25:13
((Student.java))
public class Student {
public String name;
public int studentid;
public double height;
public double weight;

public Student(){
this.studentid=0;
this.height=0.0;
this.weight=0.0;
}

public Student(String name, int studentid, double height, double weight){
this.name = name;
this.studentid = studentid;
this.height = height;
this.weight = weight;
}
つづく
802びぎなぁ:2008/11/12(水) 05:28:20
public Student[] Sort(Student[] student){
Student temp = new Student();
for(int i=0; i<student.length; i++){
for(int j=i+1; j<(student.length)-i; j++){
if(student[i].height>student[j].height){
temp=student[j];
student[j]=student[i];
student[i]=temp;
i++;
}
}
}
return student;
}
}

すみません。いっぱい貼りましたが質問内容はすごい基本的なことだと思います。
803デフォルトの名無しさん:2008/11/12(水) 05:45:34
>>800
意訳: Testクラスの中で Sort(Student[]) メソッドが定義されていません。
このエラーだけを直すなら以下の通り。

でも、初心者本なり、Webなりでキチンと基礎をやってからの方が良いと思う。

Sort(student) を
Student.Sort(student) へ

public Student[] Sort(Student[] student) を
public static Student[] Sort(Student[] student) へ

// メソッド名の1文字目はラテン文字の小文字で。
804びぎなぁ:2008/11/12(水) 07:10:49
コンパイルが通るようになりました。クラスメソッド(静的メソッド)とは、手続き型の関数みたいに使えるんですね。
勉強になりました。あと疑問なんですが、上記のStudentクラスのコンストラクタで、基本型の変数を初期化している
のですが、Stringも初期化しようと思ってString name=Null;と指定したところコンパイルエラーになりました。
(1)なぜエラーになるのでしょうか?
(2)通常Stringなどのオブジェクト変数はコンストラクタでどのように初期化するのでしょうか?
805デフォルトの名無しさん:2008/11/12(水) 07:53:38
>>804
null と書こうとして Null って書いちゃった

みたいな間抜けな話じゃないよな?
806びぎなぁ:2008/11/12(水) 08:05:38
>>804
間抜けな話です。生まれて初めて知りました。。オブジェクト型でも初期化出来るんですね。
nullで。(汗)ありがとうございました!
807デフォルトの名無しさん:2008/11/12(水) 09:55:43
J2EEアプリケーションサーバマシンにマルチコアプロセッサを使用している場合
サーバに大量のアクセスがあった際、Servletの動作はシングルコアより早くなるでしょうか?
808デフォルトの名無しさん:2008/11/12(水) 10:33:32
確かに可能性はあるが保証の限りではない
809デフォルトの名無しさん:2008/11/12(水) 11:27:20
>>808

ありがとうございます。

Javaのマルチスレッド処理はマルチコア動作に対応しているが、
負荷がかかっている場合でも必ずしも全てのコアが効率的に動作するとは限らないということですね。
810デフォルトの名無しさん:2008/11/12(水) 12:32:02
Javaのマルチスレッドはネイティブスレッドだから、OSのスケジューラしだいなんでは。
811デフォルトの名無しさん:2008/11/12(水) 13:46:36
csvファイルに3人分のデータを保存(一行で一人分)
1,a,b,c,
2,d,e,f
3,g,h,i
これを読み込んで配列に代入する際に2次元配列に代入するにはどうすればよいでしょうか。
よろしくお願いします。
812デフォルトの名無しさん:2008/11/12(水) 15:01:01
>>811
BufferedReader br=new BufferedReader(new FileReader("ファイルパス"));
String str;
String buff[][]=new String[3][4];
for(int i=0;(str=br.readLine())!=null;i++)
buff[i]=str.split(",");
813デフォルトの名無しさん:2008/11/12(水) 15:48:38
>>812
ありがとうございます。
これを実行したら配列に代入することはできたのですが、csvファイルの1行目だけうまくいきません。
[0][0]~[0][3]がcsvファイルの2行目を読み込んでしまいました。
何が原因かお分かりになりますでしょうか。
初歩的で申し訳ありません。
814デフォルトの名無しさん:2008/11/12(水) 16:26:38
>>813
ちょっと君のソースを見せてくれ。
815デフォルトの名無しさん:2008/11/12(水) 17:21:48
>>806
あれ?君がうわさの「鼻糞クン」ですか?
816デフォルトの名無しさん:2008/11/12(水) 18:20:09
clone()というのはC++のコピーコンストラクタと同じだろw
817デフォルトの名無しさん :2008/11/12(水) 18:58:01
ショートカット(Windows)やシンボリックリンク(UNIX)の
リンク先を取得できますか?
sun.awt.shell.ShellFolder というクラスを見つけましたが
Sun固有のAPIのようですし。
818デフォルトの名無しさん:2008/11/12(水) 19:23:19
>>817
1.7からは、java.nio.Path#readSymbolicLine() が追加されて、
それ使えばシンボリックリンクは読める予定。

現行バージョンではベンダ固有のAPIとかライブラリとか
自前でJNI使って読むとかしないと取得できない。
819デフォルトの名無しさん:2008/11/12(水) 20:00:29
Windowsのショートカットとシンボリックリンクは別物って既に分かってるか
820デフォルトの名無しさん :2008/11/12(水) 20:18:06
>>818
そうですか。JDK7まではsun.awt.shell.ShellFolder使ってみます。
ありがとうございます。

>>819
もちろん分かってます。
しかしsun.awt.shell.ShellFolderでは
ショートカットとシンボリックリンクの区別はないようですし、
片方がサポートされるなら他方もサポートされるだろうと思い
同列に扱いました。
821デフォルトの名無しさん:2008/11/12(水) 21:17:55
>>814さん教えていただく立場にありながら遅れてしまい申し訳ありません>>813です。

ソースは
import java.io.*;
public class tom{
int num,wei;
String sex,nam;
void showProfile(){
System.out.println(num+" "+wei+" "+sex+" "+nam);
}
}
822デフォルトの名無しさん:2008/11/12(水) 21:19:08
class alt{
public static void main(String args[])throws IOException,FileNotFoundException{
String filename="fi.csv";
BufferedReader br=new BufferedReader(new FileReader(filename));
String str;
String line=br.readLine();
String buff[][]=new String[3][4];
for(int i=0;(str=reader.readLine())!=null;i++){
buff[i]=str.split(",");
}

tom a1=new tom();
a1.num=Integer.parseInt(buff[2][0]);
a1.wei=Integer.parseInt(buff[0][1]);
a1.sex=buff[0][2];
a1.nam=buff[0][3];
a1.showProfile();//これをa1~a3まで作る予定。
}
}

です。
まだおられましたら、よろしくお願いします。
823デフォルトの名無しさん:2008/11/12(水) 21:34:56
>>822
一行目読み込めないって
String line=br.readLine();
これなにさ。

勝手に改変されて読み込めないとか言われても知らんがな。
824デフォルトの名無しさん:2008/11/12(水) 21:42:15
>>a1.num = Integer.parseInt(buff[2][0]);
buff[0][0]じゃないの?

>>for(int i=0;(str=reader.readLine())!=null;i++){
readerじゃなくてbr
825824:2008/11/12(水) 21:43:16
まだつっこみどころあったかw
826デフォルトの名無しさん:2008/11/12(水) 21:44:55
>>823
申し訳ありません。教科書を見つつやっていて勝手に付け加えてしまいました。
一行を消したらうまくいきました…
ほんとに助かりました。
ありがとうございました。
827デフォルトの名無しさん:2008/11/12(水) 21:47:01
ミスだらけでほんとに申し訳ありませんでしたorz
ありがとうございました。
828デフォルトの名無しさん:2008/11/12(水) 21:49:15
あのー。clone()はどういうときに活用するんでしょうか?
829デフォルトの名無しさん:2008/11/12(水) 21:51:26
クローンしたいとき
シャローコピーとディープコピーでぐぐればいいんじゃない
830デフォルトの名無しさん:2008/11/12(水) 22:12:10
うむ
831デフォルトの名無しさん:2008/11/12(水) 22:20:55
そうなら、Serializableとどう違うんですか?機能的には同じコピーですよね。
832デフォルトの名無しさん:2008/11/12(水) 22:30:37
スレ違いかもしれませんが、スクリーンショットってAltとPrtを同時押しでいいんですよね?
なんかそうしても画面全体が対象となってしまうのですが・・・
解決策があったら教えていただけないでしょうか。
833デフォルトの名無しさん:2008/11/12(水) 22:50:40
>>832
http://blog.ddc.co.jp/mt/dtp/archives/20050727/124307.html#id_3_0_0

ってかホントスレ違いすぎだろ…。
834デフォルトの名無しさん:2008/11/12(水) 23:42:23
>>831
Serializableはオブジェクトをファイルに保存したりネットワークに送信したりするのが主目的だろ
コピーのためにあるわけじゃない
835びぎなぁ:2008/11/13(木) 00:02:13
コンパイルエラー:The constructor SuperTest() is undefinedが発生します。
なんででしょうか?SuperTestのコンストラクタは定義しているのですが、何が悪いのですか?

class SuperTest{
protected int a;
public SuperTest(int a){
this.a=a;
}
}

class ChildTest extends SuperTest {
private int b;
public ChildTest(int a, int b){
this.a=a;
this.b=b;
}
}

public class Main {
public static void main(String args[]){
ChildTest abc = new ChildTest(4, 7);
}
}
836デフォルトの名無しさん:2008/11/13(木) 00:07:55
>>835
引数なしの SuperTest() がないから。

言語仕様により、ChildTest(int a, int b) の先頭で暗黙のうちに
引数なしの SuperTest() が呼ばれてる。
明示的に SuperTest(int a) を呼びたい場合は
ChildTest(int a, int b) の先頭で super(a); しないとだめ。
837デフォルトの名無しさん:2008/11/13(木) 00:07:57
>>835
ChildTestのコンストラクタでは、SuperTestの引数なしのコンストラクタ
を自動的に呼び出そうとする。

なので、引数なしのSuperTestのコンストラクタが定義されていないので
エラーになっているんだと思う。

ChildTestの{の直後の行にsuper(a);と書いて、this.a=a;を削除すれば、
動くはず。
838びぎなぁ:2008/11/13(木) 00:32:37
知りませんでした。勉強になりました。もう一つ質問なのですが、たまに人のコードを見ていると
ChildTest abc = new ChildTest(4, 7);のところを
SuperTest abc = new ChildTest(4, 7);、つまり親クラス 変数 = new 子クラス()と右辺と左辺が
違うものを見た事があるのですが、これは何がメリットでこのようなことをするのでしょうか?

ちなみに、
SuperTest abc = new ChildTest(4, 7);
System.out.println("abc's a= "+abc.a);
System.out.println("abc's b= "+abc.b);
とやってみたところabc.b cannot be resolved or is not a fieldというエラーに
なりました。ChildTest(4, 7)でインスタンスをつくっている以上、b=7も存在している
のではないのでしょうか?
839デフォルトの名無しさん:2008/11/13(木) 00:37:57
実際には存在しているのだが、abcをSuperTestとして扱うと宣言した以上、それは見えないものとして扱われる
840デフォルトの名無しさん:2008/11/13(木) 00:38:16
>>838
そのように書くと、コンパイル時には、abcは、SuperTestのメンバにしか
アクセスできない様な書き方になる。bというメンバはSuperTestには
ないのでコンパイル時エラーになる。

しかし、実行時には確かにbというメンバも持っていて、abcが参照している
先は、SuperTestではなく、ChildTestになっている。

ChildTestでSuperTestで定義されたメンバ関数をオーバーライドすると、
abc.メンバ関数()と書いた時、ChildTestの方の新しい関数が呼び出される。

その書き方は何を目的とするかというと、SuperTestで定義された
変数と関数しかコンパイル時には「書かない」と言うこと。
「使わない」というのは微妙に間違い。使っていないようで実際には
新しい方の関数が使われる時があるから。
841840:2008/11/13(木) 00:41:31
要は、SuperTestを継承したクラスが、ChildTest1, ChildTest2, ChildTest3
と複数あった場合に、SuperTestで定義された関数しか使わないように書いて
おいて、実行段階で自動的に新しくオーバーライドしたそれぞれの関数を呼
び出すようにする事が出来る。
842びぎなぁ:2008/11/13(木) 01:22:05
なるほど。以下の理解であってますか?
class SuperTest{
protected int a;
public SuperTest(){
this.a=0;
}
public void printSuperTest(){
System.out.println("SuperTest's a is: "+this.a);
}
public void showTest(){
System.out.println("SuperTest's a is: "+this.a);
}}
class ChildTest extends SuperTest {
protected int b;
public ChildTest(int a, int b){
this.a=a;
this.b=b;
}
public void printChildTest(){
System.out.println("ChildTest's a is: "+this.a);
System.out.println("ChildTest's b is: "+this.b);
}
public void showTest(){
System.out.println("ChildTest's a is: "+this.a);
System.out.println("ChildTest's b is: "+this.b);
}}
843びぎなぁ:2008/11/13(木) 01:22:38
public class Main {
public static void main(String args[]){
SuperTest abc = new ChildTest(4, 7);
System.out.println(abc.a);//SuperTestのフィールドにはアクセスOK
abc.printSuperTest();//SuperTestのメソッドにもアクセスOK
// System.out.println(abc.b);//ChildTestのフィールドにはアクセスNG
// abc.printChildTest();//ChildTestのフィールドにはアクセスNG
abc.showTest();//オーバーライドの場合だけ、特別にChildTestのメソッドにアクセス可能、これがメリット
}}
844デフォルトの名無しさん:2008/11/13(木) 01:26:29
参考書3冊買って読んで理解してからそれでも分からないところを質問に来い
845デフォルトの名無しさん:2008/11/13(木) 01:26:54
>>838
ChildTestをSuperTestの一種とみなしたいとき。よくある例:
class 図形 { void 表示() {...} } // 普通はabstract classかinterfaceだが
class 円 extends 図形 { void 表示() { /* 円を書く */ } }
class 正方形 extends 図形 { void 表示() { /* 正方形を書く */ } }
図形[] いろいろ = new 図形[2];
いろいろ[0] = new 円(); // 普通はこんな風には書かないが
いろいろ[1] = new 正方形();
for (int i = 0; i < いろいろ.length; i++) { // 普通は拡張for文使うが
  いろいろ[i].表示();
}
表示したいときは、「図形」として「円」が入ってようが「正方形」が入ってようが関係なく「表示()」を呼び出せばいい。また、後で図形の種類を増やしても、「図形」しか使っていない部分は修正せずに済む。
846デフォルトの名無しさん:2008/11/13(木) 01:50:18
ググってもよく分からなかったため、ここで質問させていただきます・・・
二次元の配列C[][]をreturn文で戻り値を返す時は

return(C[][]);

ではダメなのでしょうか・・・?
コンパイルしても文法エラーとでてしまって困ってます。。
初心者の質問で申し訳ないですが、回答お願いします。。。
847びぎなぁ:2008/11/13(木) 01:51:25
>>845
ヤバいくらいわかりやすかったっす。
イメージ出来ました。
848デフォルトの名無しさん:2008/11/13(木) 01:52:53
return C;
849デフォルトの名無しさん:2008/11/13(木) 01:56:26
>>848

ありがとうございます。無事コンパイルできました!
850デフォルトの名無しさん:2008/11/13(木) 02:39:47
>>848
>>845なんか、普通にオブジェクト指向の本にあるような説明だと思うよな。
851デフォルトの名無しさん:2008/11/13(木) 07:16:24
BitSetみたいにjava.util.Collectionを論理演算するようなライブラリはないでしょうか?
852デフォルトの名無しさん:2008/11/13(木) 12:03:04
and -> Collection#retainAll
or -> Collection#addAll
notは無い
853デフォルトの名無しさん:2008/11/13(木) 12:40:03
>>851
notに関しては、あるCollectionの要素でないもの、というものは、
要素の全体集合を制限しておかないといくらでも存在するので、
全体集合的なCollectionの中の部分的なCollectionの補集合を取るということなら、
全体からCollection#removeAllで部分的なCollectionを削除すればいいと思う。
854デフォルトの名無しさん:2008/11/13(木) 14:11:50
毎秒ごとに使用する変数は宣言しなおさないほうがいいでしょうか?
例えば

while(TRUE){
String s=getMethod();
if(judgeMethod(s)){doMethod(s);}
sleep(1000);
}

なのと

String s
while(TRUE){
s=getMethod();
if(judgeMethod(s)){doMethod(s);}
sleep(1000);
}

なのとです
855デフォルトの名無しさん:2008/11/13(木) 14:20:11
>>854
String sだけなら場合は効果はない。
>String s=getMethod(); 
を全部外に出せるならある。
856デフォルトの名無しさん:2008/11/13(木) 14:35:27
むむむ、ちょっと外には出せそうにないです
じゃあ行数短い上にしましょうか
どうもありがとう

ちなみに細かいですが下は
String s; //行末のセミコロン
while(true){ //trueは小文字
s=getMethod();
if(judgeMethod(s)){doMethod(s);}
Thread.sleep(1000); //Threadのメソッド
}
が正しかったですね
ちょっと慌ててました
857デフォルトの名無しさん:2008/11/13(木) 20:08:02
http://codezine.jp/article/detail/86?p=1

↑のサイトのテンプレートマッチングのプログラムを実行しようと思ってるのですが、
どう頑張っても動きません。
Faces、Tempの画像を同じフォルダに入れてイクリプス実行しようと試みたのですが
どうもうまくいかないので誰かアドバイスお願いします。
858デフォルトの名無しさん:2008/11/13(木) 21:49:51
>>852,853
それらのメソッドをコレクション向けに総合的にライブラリにしたような、論理・集合ライブラリみたいなプロジェクトは存在しないのでしょうか?
859デフォルトの名無しさん:2008/11/13(木) 21:59:46
すでにあるメソッド1つ2つで済むのに、なんで別のライブラリにまとめなおす必要があるんだ?
860デフォルトの名無しさん:2008/11/13(木) 22:41:41
コレクションのデータ構造と同じく実装するのはそんなに難しくないんですけど、集合・論理演算はよく使いませんか?
そういうのはコレクション・フレームワークみたいにライブラリにして再利用するものかと思います。
それも、たいていの場合、熟練者がプロジェクトでやってるとより使いやすい仕様や設計になってるんですけど、そういうのはないんでしょうか?
861デフォルトの名無しさん:2008/11/13(木) 22:52:44
ListじゃなくてSet使えば、って話じゃないのか?
862デフォルトの名無しさん:2008/11/13(木) 23:00:44
質問です。
BufferedWriterクラスのflush()メソッドの説明をみると
“ストリームをフラッシュする”
とあるのですが、フラッシュするとは一体なにをすることなのでしょうか?
863デフォルトの名無しさん:2008/11/13(木) 23:03:56
バッファに溜まったデータを吐き出す。
864デフォルトの名無しさん:2008/11/13(木) 23:09:59
熟練者ならビット演算は当然得意だよな?
865デフォルトの名無しさん:2008/11/13(木) 23:19:13
得意とか苦手とかないだろ
回路作るわけじゃあるまいに
866デフォルトの名無しさん:2008/11/13(木) 23:28:55
AWTのテキストフィールドに入力制限を設けたいのですが、
入力して確定していない全角文字の文字数制限のやり方が分かりません。
半角のみの場合はKeyListenerやKeyAdapterで
入力文字数、入力文字種の制限かけられるのですが・・・。


例えば、氏名を入力するテキストフィールドに20文字までの入力制限をかけても

あああああああああああああああああああああああああああああ //←確定していない状態

と入力すると制限を超えて入力されてしまいます。


確定前の全角文字数を監視して
制限超えたらキー入力受け付けなくする方法ないでしょうか。
867862:2008/11/13(木) 23:33:59
>>863
いままでflush()メソッドを知らなかったので使っていなかったのですが
それでもファイルにはきちんと書き込みが行われていました。
flushメソッドを呼ばないと
せっかくBufferedWriterクラスをつかっても
writeメソッドが呼ばれる度に書き込みを行ってしまうのですね
勉強になりました。ありがとうございます。
868デフォルトの名無しさん:2008/11/13(木) 23:40:04
>>867

どうして
> writeメソッドが呼ばれる度に書き込みを行ってしまう
なんて結論になるんだろう
flushを呼ばないとバッファに溜まったものがファイルに書き込まれない可能性がある
flushを使わなくてもきちんと書き込まれていたのは最後にきちんとcloseしていたから
869デフォルトの名無しさん:2008/11/13(木) 23:56:00
>>865
それじゃあなたは何を作ってるんですか?
870デフォルトの名無しさん:2008/11/14(金) 00:05:55
ソフトウェアだろう。
871デフォルトの名無しさん:2008/11/14(金) 00:06:13
>>867
closeを呼んでいれば、そのときにフラッシュもされる
872862:2008/11/14(金) 00:14:03
>>868
なるほど、closeすることによって書き込まれていたのですね。
詳しく説明してくださりありがとうございました。
また何かありましたらよろしくお願いいたします。
873862:2008/11/14(金) 00:18:02
>>871
それを聞いてとてもスッキリしました。
ありがとうございました。
874デフォルトの名無しさん:2008/11/14(金) 00:52:20
集合演算の総合的なライブラリがあるなんて聞いたことないなw
875デフォルトの名無しさん:2008/11/14(金) 07:18:00
JavaスレってC,C++宿題スレみたいな問題解きあってるスレない?
876デフォルトの名無しさん:2008/11/14(金) 07:30:13
検索もできないのに、よくプログラムやろうと思うな
877デフォルトの名無しさん:2008/11/14(金) 12:31:37
①以下のプログラムをコンパイルするとエラーになる。なぜか?
class A {}
public final class Test3 extends A {}
class B extends Test3 {}

②以下のプログラムをコンパイルすると下記のようなエラーになる。どのように修正すればよいか?
interface VideoGame {
void play(String software);
}
public class Famicom implements VideoGame {
public static void main(String[] args) {
System.out.println("Famicom");
}
}
--------------------------------------------
Famicom.java:5: Famicom は abstract でなく、
VideoGame 内の abstract メソッド play(java.lang.String) をオーバーライドしません。
public class Famicom implements VideoGame {
^
エラー 1 個

わかりますか?
878デフォルトの名無しさん:2008/11/14(金) 12:34:04
わかります
しかし宿題は宿題スレへ
879デフォルトの名無しさん:2008/11/14(金) 13:18:50
スレ違いの質問だったらすいません

Javaを1から勉強し直そうと思っているのですが、1からの勉強に向いている本を教えてください
出来れば、エクリプスを開発環境にして書いてあるものだと助かります
880デフォルトの名無しさん:2008/11/14(金) 13:22:21
hibernateを勉強しているのですが、
Sessionからマッピングオブジェクトを取得する処理で
Product product = session.get(Product.class, i)
のような記述があります。
このProduct.classというのがクラスを表わしてるのは分かるのですが
文法的にはどういう意味があるのでしょうか?

Objectクラスのクラスメンバあたりに当たりをつけて調べてみましたが
API見てもそれらしいメソッドは見当たりません。
そもそもclassメソッド自体が全てのクラスから検索しても存在しませんでした。
881デフォルトの名無しさん:2008/11/14(金) 13:31:01
>>880
それはメソッドではないです
文法的にはクラスリテラルといい、そのクラスを表す java.lang.Class のインスタンスが得られます
Class foo = Product.class;
System.out.println(foo.getName());
のように使います
882880:2008/11/14(金) 14:11:31
>>881
おおなるほど…丁寧にありがとうございます。
API探しても見つからないわけだ。
883デフォルトの名無しさん:2008/11/14(金) 15:49:13
これ宿題スレの方でしたか・・・
宿題スレに一度はったものの、すれ違いだと思い
向こうで「誤爆です、すみません」とカキコしたバカ者です
失礼しました
884デフォルトの名無しさん:2008/11/14(金) 22:07:51
>>879
勉強し直すって、すでにいくらからJava知識があるわけ?
885デフォルトの名無しさん:2008/11/14(金) 22:48:24
質問なのですが、
入力した文字列、例えば"山田太郎"を入力などを
山田
太郎
のように半分で改行したいのですが、わかりません・・・
"\n"を使用するのは、わかります
あと、StringBufferも使用するはずなのも・・・・
886885:2008/11/14(金) 22:54:58
解決すますた
887デフォルトの名無しさん:2008/11/14(金) 23:09:25
javaの仮想マシンはjavaで作れますか?
888デフォルトの名無しさん:2008/11/14(金) 23:17:29
>>887
javaの仮想マシンだけでjavaの仮想マシンを作るのは無理
javaのコンパイラあたりまでなら無問題

ってな答えを期待してる?
889デフォルトの名無しさん:2008/11/14(金) 23:17:58
作れるよ
でもそうやって作った仮想マシンを動作させるためには別の仮想マシンが要る
890デフォルトの名無しさん:2008/11/14(金) 23:24:34
>>888,889
ブートストラップ問題じゃん、直接ネイティブコード吐けなきゃ無限ループ
ネイティブコード吐く所作ればどんな言語でも可能ちゃうか?

# COBOL に出来るかどうかはしらんが…
891デフォルトの名無しさん:2008/11/14(金) 23:27:17
必要なところはCとか使うのは当たり前。
java languageにはnativeキーワードがあるから使れるだろ。おまえら適当なこと言うなよw
892デフォルトの名無しさん:2008/11/14(金) 23:35:22
>>891
native なしでどこまで行けるかって話じゃねぇのか?
バイトコードのネイティブコンパイラだって Java で書いてあったりするじゃんw
893デフォルトの名無しさん:2008/11/14(金) 23:39:45
使れる
894デフォルトの名無しさん:2008/11/14(金) 23:41:45
質問です。
/*php html*/
echo <<<_EOD_
<img src="xxx.jpg" width="640" height="480" alt="" />
<p>W:<span id="w">640</span>pix H:<span id="h">480</span>pix</p>
_EOD_;

id="w" の640やid="h"の480はjavaスクリプトで取得できてるのですが
取得した値を例えば 640/2 などして320となった値width="640"を変更してwidth="320"と数値を変更したいのですが
なにか方法はないでしょうか。
895デフォルトの名無しさん:2008/11/15(土) 00:37:00
List型の変数に~Listって名前付けるのはおかしいんですか???
bookListとかproductListとか。
配列ならbookArrayでマップならbookMapで。
分かりやすいですよね?

なのに口うるさい先輩が怒るんですよ
名前に型を持ち込んでどうする!お前は文字列変数全ての語尾にStringを付けるのかってね。
あぁ頭が固い堅物は嫌だね
896デフォルトの名無しさん:2008/11/15(土) 00:40:51
いいんじゃないの
コレクションの種類が重要でないときはbooksみたいに複数形にするだけにしてる
897デフォルトの名無しさん:2008/11/15(土) 00:42:14
俺的には別に問題ないと思うが、
books とか products の方が良く使うかもしれん
単に短いから読みやすい/書きやすいという理由だが
898デフォルトの名無しさん:2008/11/15(土) 00:47:54
口うるさい先輩がが怒るよりもコンパイラに怒られる方が怖いよ
899デフォルトの名無しさん:2008/11/15(土) 00:56:43
コレクションって、コード読む時は「コレクションである」ことさえわかれば
十分(種類には興味がない)な場合が多いから、とりあえず複数形にするだけが多いかな
だからって種類を明示して悪いことはないと思うよ
900デフォルトの名無しさん:2008/11/15(土) 02:04:41
C#のコンパイラはすぐ怒るからなw
gccのC++なんか最悪だろw
901デフォルトの名無しさん:2008/11/15(土) 04:13:33
>>866
SwingのJTextFieldならできるけど、AWTのTextFieldは知らない。
ちなみにJTextFieldならこんな感じ。テキストのうpロダが見つからなかった…。
// ここから
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
* テキスト入力制限クラス
* @author nanashi
*/
public class LimitDocument extends PlainDocument{
/** 入力最大文字数 */
private int limit;

/**
* コンストラクタ
* @param limit 入力最大文字数
*/
public LimitDocument(int limit){
this.limit = limit;
}

@Override
public void insertString(int offset, String str, AttributeSet a){
String tempStr = str;
if(offset < limit){
int enableLength = limit - offset; // 現在の入力可能文字数
int inputLength = str.length(); // 入力文字数
902901続き:2008/11/15(土) 04:14:14
try {
if(enableLength > 0){
if(enableLength < inputLength){
tempStr = tempStr.substring(0, enableLength);
}
} else{
tempStr = "";
}
super.insertString(offset, tempStr, a);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}

/**
* メインメソッド
* @param args コマンド引数
*/
public static void main(String[] args){
JFrame frame = new JFrame();
JTextField textField = new JTextField();
textField.setDocument(new LimitDocument(10));
frame.getContentPane().add(textField);
frame.setTitle("入力テスト");
frame.setSize(500, 55);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
903901:2008/11/15(土) 04:20:21
あと逆に質問があるのですが、
SwingのJFrameにJButtonやJTextAreaを貼り付けて
表示させた時にウィンドウだけ描画されて中身が真っ白に
なってしまう事があるのですが、JVMのバグでしょうか?
それともsetVisible(true)の呼び出しタイミングが悪いのでしょうか?
ちなみにWindowsXP SP3、jdk1.6.0_10で実行しています。
904デフォルトの名無しさん:2008/11/15(土) 05:05:31
表示した後にコンポーネントを貼り付けた場合は revalidate
905デフォルトの名無しさん:2008/11/15(土) 07:09:07
>>895
複数の本をおさめるリストなのだから
「本たち(books)」よりも「本のリスト(bookList)」のほうが
言語として自然だという考え方もあると思う。
906デフォルトの名無しさん:2008/11/15(土) 07:37:22
いや。問題は就職先を間違えたことじゃないか?というかまだヒヨッコの分際で先輩に反発してる自体であれだが・・・
907デフォルトの名無しさん:2008/11/15(土) 07:46:04
>>906
>>1
【初心者】Java質問・相談スレッド120【歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1223603727/
908デフォルトの名無しさん:2008/11/15(土) 07:47:13
ありゃ、逆に書いてしまったOrz
907破棄で
909デフォルトの名無しさん:2008/11/15(土) 07:59:53
1から100までのシャフルされた(ランダムな)intをArrayに25ほど入れたいのですが、方法を教えてください。
910デフォルトの名無しさん:2008/11/15(土) 08:27:23
>>895
ぼくは分かりやすくていいとと思うけどな
911デフォルトの名無しさん:2008/11/15(土) 08:34:12
>>909
シャッフルして頭から25個使えばいい
シャッフルの方法解りませんとか聞くなよググれ
912デフォルトの名無しさん:2008/11/15(土) 08:36:58
>>911
普通に答えてやれよ。
913デフォルトの名無しさん:2008/11/15(土) 08:38:08
>>911
シャフルの方法じゃなくて、Random Number Generatorの方法を聞いてんだよ。
914デフォルトの名無しさん:2008/11/15(土) 09:16:33
シャッフルじゃなくていいって事は同じ数字が2回出てきてもいいんか?
915デフォルトの名無しさん:2008/11/15(土) 09:32:11
>>913
初めからそう書けよ。おまえは馬鹿かw
916デフォルトの名無しさん:2008/11/15(土) 09:39:41
>>909
同じ数字が出てもいいなら、普通に乱数発生させて99.0倍したあと1足して、キャストするなりすればいい。

被ったらだめだというなら、
1:1~100の整数を配列に代入
2:500回位ランダムに入れ替える
3:頭から25個取り出す
これでおk。
または、既に発生させた乱数を調べ、被ったら新しく乱数を発生させる。
ただ、>>909のいう範囲と個数なら、今回は多分前者の方がいいよ。
917デフォルトの名無しさん:2008/11/15(土) 10:02:19
>>916
糞野郎に答えてやるおまえは馬鹿か?
918デフォルトの名無しさん:2008/11/15(土) 10:14:49
>>916
重複なしは
2.for(i=1から100)swap(i,乱数)
がいいみたいよ
919903:2008/11/15(土) 10:30:36
>>904
コンポーネントはJFrameに貼り付けた後にsetVisible(true)を
呼び出しています。実装としては下の通りで、TestJFrameオブジェクトを生成して、
メソッドdisplay()を間隔を空けずに何回も呼び出しまくると、画面が真っ白な
ウィンドウが表示される事があります。
JavaVMの引数に-Dsun.java2d.noddraw=trueを指定しても同様の現象が発生します。
何が問題なのか全くわかりません。
public TestJFrame extends JFrame implements ActionListener{
 public void display(){
  JButton button1 = new JButton("test1");
  button1.setActionCommand("test1");
  JButton button2 = new JButton("test2");
  button2.setActionCommand("test2");
  JTestArea textArea = new JTextArea();
  JPanel panel = new JPanel();
  panel.add(button1);
  panel.add(button2);
  Container contentPane = this.getContentPane();
  contentPane.add(textArea, BorderLayout.CENTER);
  contentPane.add(panel, BorderLayout.EAST);
  this.setTitle("test");
  this.pack();
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setAlwaysOnTop(true);
  this.setVisible(true);
  this.toFront();
  public void actionPerformed(ActionEvent e){
    if(e.getActionCommand().equals("test1")){
      System.out.println("test1");
    } else if(e.getActionCommand().equals("test2")){
      this.dispose();
    }}}}
920デフォルトの名無しさん:2008/11/15(土) 11:09:52
>>915
はじめから読み取れよ、おまえは馬鹿かw
921デフォルトの名無しさん:2008/11/15(土) 11:22:16
終了
922デフォルトの名無しさん:2008/11/15(土) 11:34:40
おまえはまた脳みそが糞まみれになってんのか
923デフォルトの名無しさん:2008/11/15(土) 12:05:17
終了
924デフォルトの名無しさん:2008/11/15(土) 12:38:25
普通に考えたら 1~100 の数字の組み合わせは 100! あるのだから、
単にスワップを繰り返すやり方は目の出方に偏りがでることは明らかだけどな
925デフォルトの名無しさん:2008/11/15(土) 12:53:47
すいません
Random.nextInt( )
についてご教授お願いします

926デフォルトの名無しさん:2008/11/15(土) 12:58:51
ランダムで1~100から選んで、
今まで入れた中の数字と同じのがなければ無ければ、入れるって繰り返せばいいと思うが。
927デフォルトの名無しさん:2008/11/15(土) 13:08:13
>>925
ランダムクラスの「次の整数をだす」っていう技をつかう

って言う意味だよ。
928デフォルトの名無しさん:2008/11/15(土) 13:27:38
>>926
ひでえアルゴリズムだなw下手するとやたら時間かかるぞw

配列の0から99までをforループで順番にランダムに出た場所のものと取り替える
これを好きな回数やりゃいんじゃね
929デフォルトの名無しさん:2008/11/15(土) 13:35:54
ランダムで1~100までの値が入った配列を作る
重複があれば最初に戻る
930デフォルトの名無しさん:2008/11/15(土) 13:37:02
悪くしてどうすんだよw
931デフォルトの名無しさん:2008/11/15(土) 13:39:09
JDK6Update10をインストールすると
ステータス:インストーラを抽出していますってとこで止まり
このWindowsインストーラパッケージには問題があります。
このインストールを完了するのに必要なプログラムを実行できませんでした。
と表示されてインストールできません。
原因は何でしょうか。
OSはvistaです。
j2sdk-1_4_2_18まで遡ったけど無理でjdk1.3.1_20でなら出来ました。
932デフォルトの名無しさん:2008/11/15(土) 13:54:01
import java.util.Random;

Random r = new Random();
for (i = 0 から 25回)
int randint[i] = r.nextInt(100);

これなら0-100のランダムINTだ。じゃあ、1-100にするには?
933デフォルトの名無しさん:2008/11/15(土) 13:56:26
>>932
r.nextInt(100) なら0から99だろ…
934デフォルトの名無しさん:2008/11/15(土) 14:17:19
GUIアプリを作ろうと思っています。
SWTやらSwingやらありますが、作りやすい(とっつきやすい)ものはどれでしょうか?

Java経験:Springフレームワークを1ヶ月
GUI経験:Unix-CでのXlib
935デフォルトの名無しさん:2008/11/15(土) 14:29:08
int randint[i] = r.nextInt(100)+1;
936デフォルトの名無しさん:2008/11/15(土) 16:38:44
・[100][2]の2次元配列を作る。
・[n][0]に、1~100を入れる。
・[n][1]に、乱数を入れる。範囲は適当でいいし、重複してもいい。
・[n][0]と[n][1]をペアにして、[n][1]の内容でソート。
・[n][0]を取り出す。
937デフォルトの名無しさん:2008/11/15(土) 16:46:46
java初心者です。
今継承、抽象クラスについて疑問があります。
今抽象メソッドX,とメソッドYを持つクラスAを抽象クラスとして、そこからクラスBとクラスCを派生するように
します。この時クラスB、クラスCそれぞれでメソッドX,メソッドYを実装しないとエラーが出てしまうのですが、
これは片方のサブクラスだけでメソッドX,メソッドYを実装するだけでよくなるような対処法はありますか?
よろしくお願いします。
938デフォルトの名無しさん:2008/11/15(土) 17:05:27
抽象クラスってそもそも実装するメソッドを強制するためのものじゃないの?
インターフェース使えば。
939デフォルトの名無しさん:2008/11/15(土) 17:23:49
>>936
多次元配列は面倒だ。
・100個分の1次元配列を作る。
・「下位バイトは1~100、上位バイトは適当な乱数」という整数を入れる。
・ソートする。
・下位バイトを取り出す。
940デフォルトの名無しさん:2008/11/15(土) 17:47:38
ttp://www.jitec.jp/1_20casl2/casl2dl_002.html


こちらのIPAのHPからCASLⅡのシミュレータをDLしたのですが、どうやって実行すればいいのか分かりません
同じページに「JavaTM 2 SDK Standard Edition Version 1.4.2 をダウンロードしてください」と書かれているのですが、
「JavaTM 2 SDK Standard Edition Version 1.4.2 をダウンロードしてください」をDLしてインストールすれば
CASLⅡのシミュレータを動かせるんでしょうか?イマイチ分からないので、どなたか分かる方いましたら教えてください
あと、「JavaTM 2 SDK Standard Edition Version 1.4.2 をダウンロードしてください」というのは、
↓のHPからDLできるんでしょうか?IPAのHPにはリンクされているんですが、どこのボタンを押せばいいのか分かりません・・・

ttp://java.sun.com/products/archive
941デフォルトの名無しさん:2008/11/15(土) 17:57:09
>>940
そこのページの J2SDK/J2RE - 1.4 の隣が 1.4.2_17 になってる状態でその隣の GOボタン押して、
次のページで Download J2SDK して、
次のページで Platform に自分の使ってるOS選択して
I agree to the following Software License Agreements のチェックオンにして continue、
次のページにバイナリへのリンクあるから、それダウンロード。
942デフォルトの名無しさん:2008/11/15(土) 18:19:56
>>941
THX
何か英語ばかりで意味不明だったけど、ウィザードみたいのが出てきて
今、インストールが終わったっぽい・・・

だけど、これインストールしたけど、EXEファイルみたいなのは無いの?
どうやって、CASL2のシミュレータを動かせばいいのか分からん・・・
943デフォルトの名無しさん:2008/11/15(土) 18:57:12
どこぞに実用に耐えるメルセンヌツイスタ-のJava実装はありませんかぁ???
944デフォルトの名無しさん:2008/11/15(土) 19:09:07
>>943
実用に耐えるの意味がわからん。
普通に実装すればよい気がするんだが。
945デフォルトの名無しさん:2008/11/15(土) 19:18:22
>>944
速度的に...
946デフォルトの名無しさん:2008/11/15(土) 19:22:54
Runnableインターフェースを継承した方法で、
スレッドを作るとき、mainメソッドがどこにもありません。
947デフォルトの名無しさん:2008/11/15(土) 19:25:31
>>946
どこかに作ってください。
948デフォルトの名無しさん:2008/11/15(土) 19:28:05
作れといわれても、ソースを読んだら書いてなかったんです。
949デフォルトの名無しさん:2008/11/15(土) 19:37:46
>>948
どこかにつくってください
950デフォルトの名無しさん:2008/11/15(土) 19:43:40
ソースのWebページ乗せるなり、本に載ってるコードコピペするなりしんと。
951デフォルトの名無しさん:2008/11/15(土) 19:50:49
http://www.hellohiro.com/thread.htm
ソースはここです。
952デフォルトの名無しさん:2008/11/15(土) 19:57:53
>>951
どこにも作らなくて良いです。
953デフォルトの名無しさん:2008/11/15(土) 20:41:44
わろす
954デフォルトの名無しさん:2008/11/15(土) 20:50:28
java EEの本によく出てくるEnumeration型って何なんですかね・・・
java SEのコレクションと何か違うんでしょうか?
955デフォルトの名無しさん:2008/11/15(土) 20:59:57
956デフォルトの名無しさん:2008/11/15(土) 21:02:48
>>919
ちゃんとイベントディスパッチスレッド上でやってる?
957デフォルトの名無しさん:2008/11/15(土) 21:50:40
>>951
アプレットのことかな?mainメソッドっていうのは、いわゆる普通のアプリケーションで
どこからプログラムをスタートさせるのか書かないと実行マシン(仮想マシン)が、どこからはじめたらいいか
わからないからmainメソッドを書くんだよ。必ずmainメソッドから始まるようにするんだ。これはC言語とかC#でもいっしょ。

アップレットやサーブレットは決まった処理は決まったメソッドを呼ぶようにしてるから
メインメソッドがなくても、きまった処理が必要になったときに決まったメソッドが呼ばれるようになっているんだよ。
958デフォルトの名無しさん:2008/11/15(土) 22:23:31
>>957
ありがとうございました
959デフォルトの名無しさん:2008/11/15(土) 23:18:09
>>931です
ウイルスキラーを削除したらインストールできました。
ウイルスキラーは終了するだけでは無理でした。
960デフォルトの名無しさん:2008/11/16(日) 00:42:18
eclipseで

import javax.media.opengl.GL;
import javax.media.opengl.glu.GLU;

ってパッケージのimportができないんだ
eclipseでパスの追加はしてある

/usr/lib/jvm/default-java/jre/lib/ext/jogl.jar
/usr/lib/jvm/default-java/jre/lib/ext/jogl-natives-linux.jar

なんでダメなんだろ
961デフォルトの名無しさん:2008/11/16(日) 00:48:47
jogl.jarの中を見ると

GL.classがあるのは

/net/java/games/jogl/GL.class

という場所だ
ひょっとしてパッケージ宣言とimportが
かみ合ってないんだろうか
962903:2008/11/16(日) 00:57:51
>>956
イベントディスパッチスレッドで実行しても同じ現象が発生してます。
JavaVMのバグなのか自分のプログラムのバグなのか切り分けができません。
正直疲れました。

SwingUtilities.invokeLater(new Runnable(){
 public void run(){
  try{
   for(int i = 0; i < 1000; i++){
    TestJFrame frame = new TestJFrame();
    frame.display();
    Thread.sleep(1000);
   }
  } catch(InterruptedException e){
   e.printStackTrace();
  }
 }
});

963デフォルトの名無しさん:2008/11/16(日) 01:13:34
>>962
for文の中の前2行(new と display)を invokeLater に実行させたら?
964デフォルトの名無しさん:2008/11/16(日) 01:18:50
>962
イベントディスパッチスレッドをスリープで止めてるから他のものが描画されない。
965デフォルトの名無しさん:2008/11/16(日) 01:26:23
どうしてもすぐ再描画したいなら、
RootPaneのpaintImmediatelyを使いなはれ
966デフォルトの名無しさん:2008/11/16(日) 02:08:28
イベントディスパッチスレッドは止めちゃダメ。
Swing コンポーネントの描画も EDT で行われる。
どうしても1秒間止めたいなら
javax.swing.Timer で1秒後に display() を
呼ぶようにすればいい。
967903:2008/11/16(日) 02:32:32
>>963
>>964
>>965
>>966
ありがとうございます。
Thread.sleep(1000)をはずしてTimerでやってみたましたが、
やはり数十回に1回は真っ白なウィンドウが出てしまいます。
その時のウィンドウはキーイベントを受け取っている(KeyListenerで確認)ので、
完全に固まっているわけではなく、描画だけが追いついていない様子です。
そんなに重い処理でもしているのでしょうか?私はそうは思えないです。

試しにpaintImmediately()やrepaint()を実行しても現象変わらずです。
968デフォルトの名無しさん:2008/11/16(日) 04:36:58
サーブレットの仕様でインクルードというのがありますが
インクルードすることによって何が出来るようになるんですか?

ServletDispatcher(サーブレット名).include(req,res)
これで指定したサーブレットのメソッドが使えるようになったりするんでしょうか?
969デフォルトの名無しさん:2008/11/16(日) 09:19:03
>>967
実行可能な最小ソースコード見せて
970デフォルトの名無しさん:2008/11/16(日) 17:26:07
>>968
include っていうのは、そのファイルに色々サーブレットの処理を書いておいて
それを表示するってことだよ。

たとえば、エラーページなんか表示したいとき、ひとつのページごとに違うエラーページつくってたら
めんどくさいでしょ?上の君の貼った例ServletDispatcher(サーブレット名).include(req,res) だと
色々なページでエラーがおきたら、そこのURLに飛ばしてそこでinclude文使ってあるファイルをインクルードすると
エラーページは1つ書いておけばいいだけになるんだよ。

サーブレットのメソッドもつかえるようになるんだけど、ページの取り込みというのが目的だよ。includeファイルにエラーのページの内容を書いておけば
そこで処理すればいいからね。ひとつのインクルードファイルだけですむんだ。include文でよまれたインクルードファイルは処理して
表示されるんだ。たとえば、a.classでb.classをインクルードするとa.classの中のb.classをインクルードした場所に
bのサーブレットで書いた部分が表示される。
971デフォルトの名無しさん:2008/11/16(日) 18:56:35
以下の条件のようなクラスDollarを作成しています。
1.Moneyのサブクラスである。
2.コンストラクタにdouble型で値を入れるとその値を持つオブジェクトを生成する。
3.toStringメソッドを使うと、「$(コンストラクタに入れた値)」となる文字列を得る。

この特に条件2をどうしても実現できません(この場合のオブジェクトを生成する方法がわからない)。
アドバイス、ヒント等よろしくお願いします。
972デフォルトの名無しさん:2008/11/16(日) 18:58:30
private double value;
public Dollar(double value) { this.value = value; }
でいいの?
973デフォルトの名無しさん:2008/11/16(日) 19:05:08
>>972
すいません。クラスMoneyが抽象クラスなんです。。
abstract public class Money {
private double value;
protected Money(double value){
this.value = value;
}
abstract protected String getPrefix();
abstract protected String getPostfix();
@Override public String toString(){
return getPrefix()+String.valueOf(value)+getPostfix();
}
abstract public double getYenRate();
public double getValue(){
return value*getYenRate();
}
@Override public boolean equals(Object obj){
if(this == obj) return true;
if(!(obj instanceof Money)) return false;
Money m = (Money) obj;
return this.getValue() == m.getValue();
}
@Override public int hashCode(){
long v = Double.doubleToLongBits(getValue());
return (int)(v^(v>>>32));
}
}
974はんしょう:2008/11/16(日) 19:07:50
先の方に割り込む形になるのでしたら ごめんなさい
JAVAのJBUILDER2005を見ています(正直使っているという状態ではまだないのです)が、
JPX(プロジェクト)ファイルを再BulidするのとMakeをするのとがメニューにあります。
1:この違いはなんでしょうか?一見どうちらを選択しての既存のものは実行できるか
できないのか について言えば変わりはなかった。
2:幾つかのサンプルの内、上のようにJbuliderで実行をすると絵が出ますので、実行できるようになるですが
Jbuliderのソフトを介さないで 実行できることはないでしょうか。
Javaは実行ファイル(正確な用語でないかもしれませんが)というものはないでしょうか?
例えばWindowsで言えば、拡張子.exeのファイルは直に、
あるいは FLASHの.swfファイルはIEで(ブロックは外して)開くことが出来る。同じflashの.flvファイルはWeb上で、起動ファイルを導入してしか見えない(Youtubeのように)。
JAVAはどうでしょうか?
それと.JAVAという拡張子ファイルはソースファイルと理解してよいでしょうか?

975デフォルトの名無しさん:2008/11/16(日) 19:09:25
>>973
なんで条件を後出しするの?
馬鹿なの? 死ぬの?

public Dollar(double value) { super(value); }
@Override protected String getPrefix() { return "$"; }
@Override protected String getPostfix() { return ""; }
976デフォルトの名無しさん:2008/11/16(日) 19:12:03
>>975
申しわけございません。
ちなみにオブジェクトを生成っていうのはnew演算子を使う以外方法はないんですか?
977デフォルトの名無しさん:2008/11/16(日) 19:23:43
ジェネリックスで行き詰まってしまったので助けていただけないでしょうか?
今作っているのは(例え話として)「引き出しクラスを指定できる可変長タンス」です。

public class Tansu {
Class<? extends IHikidashi> hikidashiClass;
ArrayList<IHikidashi> hlist;

public Tansu(Class<? extends IHikidashi> hikidashiClass)
{ this.hikidashiClass = hikidashiClass; }

public void addHikidashi() throws Exception
{hlist.add(hikidashiClass.newInstance());}
}

Tansu tansu = new Tansu(ConcreteHikidashi.class); tanse.addHihidashi();
でタンスを作成して引き出しを追加します。ここまではOK。
ここでタンスの引き出しの中身を任意のクラスに差し替え可能にしようとしました。

public class Tana<NAKAMI> {
Class<? extends IHikidashi<NAKAMI>> hikidashiClass;
ArrayList<IHikidashi<NAKAMI>> hlist;

public Tana(Class<? extends IHikidashi<NAKAMI>> hikidashiClass)
{ this.hikidashiClass = hikidashiClass; }
...

で、中身が整数型なタンスを作成しようと
Tansu<Integer> tansu = new Tansu<Integer>(ConcreteHikidashi<Integer>.class);

とすると、".class"近辺が文法エラーで怒られてしまいます。
つまりジェリックスを利用して宣言されたクラスのClassオブジェクトを
入手したいのですが、これはどのようにすれば良いのでしょうか?
978デフォルトの名無しさん:2008/11/16(日) 19:43:54
>>977
ConcreteHikidash の代わりに IntegerHikidash implements IHikidasshi<Integer> 使うとか。
979デフォルトの名無しさん:2008/11/16(日) 20:16:59
>>978
あぁ、確かに出来ました。コードの何処かで

class IntegerHikidashi extends ConcreteHikidashi<Integer>{}

とか宣言しておいて、

Tansu<Integer> tansu = new Tansu<Integer>(IntegerHikidashi.class);

でエラーも警告も無しでコンパイルが通ります。助かりました。

しかし上記のような空の継承クラス宣言無しでスマートに出来る方法は
無いでしょうかね。
また以下のように引き出しのインスタンスを生成してそのクラスを渡して
も怒られるなど、まだまだ私にとってジェリックスには謎が多いです・・・

IHikidashi<Integer> prototype = new ConcreteHikidashi<Integer>();
Tansu<Integer> tansu2 = new Tansu<Integer>(prototype.getClass());

-> The constructor Tansu<Integer>(Class<capture#4-of ? extends IHikidashi>) is undefined
980デフォルトの名無しさん:2008/11/16(日) 20:55:52
えっと、

SomeClass method(Class klass, String arg) {
< xxxx を呼ぶだめの前処理 >
Class ? x = new klass(<前処理結果 1>);
return klass.any_method(arg, <前処理結果 2>);
}

てな事を書きたい場合、どうすればええの?
981980:2008/11/16(日) 21:09:56
説明が足りないと思われるので
ぶっちゃけ Lisp 系の言語で良く定義される

(with-open-file (ファイルオープン処理) 本体)
(with-disable-interrupt 本体)

外側の () から抜けるときは exception だろうが何だろうが,
ファイルクローズなり, 割り込み許可の処理をおわってブロック
から抜けてくるような作りにしたい

本体は, 戻値と引数がマッチしていれば何でも OK みたいな………
982デフォルトの名無しさん:2008/11/16(日) 21:34:18
>>981
つ無名クラス
クロージャ持つ言語に比べてめちゃめちゃ冗長になるけどな。
983デフォルトの名無しさん:2008/11/16(日) 22:15:01
>>976
リフレクション
984980:2008/11/16(日) 22:24:53
>>982 やっぱそうか
>>983 速度的にどうなのよ?
985デフォルトの名無しさん:2008/11/16(日) 22:31:23
ジェネリックス難しいお
勉強中
986デフォルトの名無しさん:2008/11/16(日) 22:32:10
>>976
DI
987デフォルトの名無しさん:2008/11/16(日) 22:51:37
すごい基本的なんだけど・・・
コンパイルは、どうやるんですか?
OSは、Windouwsです。
入門書を買ったんですか・・・コンパイルの方法が書いてない・・
988デフォルトの名無しさん:2008/11/16(日) 23:03:32
989デフォルトの名無しさん:2008/11/16(日) 23:15:22
>>984
何千個もインスタンス作るとかじゃなきゃ
速度は問題にならないっしょ。
990デフォルトの名無しさん:2008/11/16(日) 23:20:11
>>985
使うだけなら比較的簡単。
言語仕様については理解することを放棄した。
(理論的背景がさっぱりだ)
991デフォルトの名無しさん:2008/11/16(日) 23:31:46
ジェネリクスを分かりやすく解説しているサイトはあまりないからね。
992デフォルトの名無しさん:2008/11/16(日) 23:47:41
MoneyCollection クラスに格納されている各 Money のオブジェクトに対して、日本円に換算した合計金額を
Yen オブジェクトで返す public Yen total() メソッドを実装するのですが、
格納されているのはMoneyのオブジェクトで返す時はYenオブジェクトにするという場合どのように
すればいいですか?下のようにpublic Yen total()メソッドを実装しようとしたんですが、
失敗続きで。。。アドバイスお願いします。
import java.util.*;
public class MoneyCollection extends ArrayList<Money> {
public MoneyCollection(){
super();
}
  public Yen total(){
    ???

public void show(){
for(Money m : this){
System.out.println(m);
}
}
}
993デフォルトの名無しさん:2008/11/16(日) 23:53:04
>>992
>>971と同じ人?宿題は宿題スレへ。
>>971のときもそうだったけど条件は全部書こうぜ。
994デフォルトの名無しさん:2008/11/17(月) 00:26:31
>>987
http://www.smg.co.jp/seminar/java/でインストールすましたら(かならずPATHは設定する事)
コマンドプロンプト開いてcdコマンドで自分のソースファイルを保存したディレクトリに移動して
javac ファイル名とコマンドするだけ。cdはコマンドプロンプトが作業するディレクトリを移動するコマンド。
たとえば、c:\javaフォルダにソースファイルを保存したら、コマンドプロンプトを開いてcd c:\javaとすれば
移動できる。そこで、javac 保存したファイル名 とコマンドをうてばコンパイルできる。コンパイルの仕方は
→を参照。http://www.stackasterisk.jp/tech/java/java01_03.jsp
ちなみに、PATHっていうのは、
C:\Program Files\Java\jdk1.5.0_16\bin
            ↑
            Javaのバージョン
と設定するんだけど、binフォルダにあるjavacがjavaコンパイラのこと。
だから、コンパイルするときjavac ソースファイル名 とするんだけど
コマンドプロンプトでプログラム起動するときはPATHに設定しておくと
プログラム名だけで起動できる。
PATHっていうのは、そういうもの。
995994:2008/11/17(月) 00:29:10
訂正
jdk1.5.0_16 ← これがJavaのバージョン。
だから、質問者がダウンロードしたバージョンにより、このフォルダ名が
変わっているはずだから、自分のフォルダ名をしっかり書くこと。
一度、マイコンピュータから順々にJavaのインストールしたフォルダ階層をくぐっていくといいよ。
996デフォルトの名無しさん:2008/11/17(月) 01:11:34
おやすみ。

【初心者】Java質問・相談スレッド121【歓迎】
ttp://pc11.2ch.net/test/read.cgi/tech/1226851794/
997デフォルトの名無しさん:2008/11/17(月) 01:55:39
>>996
乙。
998デフォルトの名無しさん:2008/11/17(月) 02:00:47
>>996
999デフォルトの名無しさん:2008/11/17(月) 02:24:22
ume
1000デフォルトの名無しさん:2008/11/17(月) 02:29:05
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。