【初心者】Java質問・相談スレッド113【大歓迎】at TECH
【初心者】Java質問・相談スレッド113【大歓迎】 - 暇つぶし2ch1:デフォルトの名無しさん
08/03/01 18:16:51
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。URLリンク(pc10.2ch.net)

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

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

前スレッド
【初心者】Java質問・相談スレッド112【大歓迎】
スレリンク(tech板)

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

次スレは>>980あたりで。

2:デフォルトの名無しさん
08/03/01 18:17:32
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
スレリンク(tech板)
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part16
スレリンク(tech板)l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 7
スレリンク(tech板)l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 64 ★★
スレリンク(tech板)l50

3:デフォルトの名無しさん
08/03/01 18:18:25
**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
URLリンク(sdc.sun.co.jp)
■ J2SE 5.0 (1.5.0)
URLリンク(java.sun.com)
■ Java SE 6
URLリンク(java.sun.com)

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
URLリンク(www.java.com)

4:デフォルトの名無しさん
08/03/01 18:30:45
おっおっおっ

5:デフォルトの名無しさん
08/03/01 20:10:49
JavaでInternetからファイルダウンロードを行うプログラムを書こうとしています。

URLリンク(634.ayumu-baby.com)
に書かれているような実装を行ったところ、
ダウンロード速度がかなり遅く、改善したいのですが
どのような方法があるでしょうか?

6:デフォルトの名無しさん
08/03/01 20:42:25
並行処理

7:5
08/03/01 21:02:39
>>6
コネクションを張りまくる方法でしょうか?

そこまで頑張る必要は無くて、ブラウザのダウンロード速度と同程度であれば良いのですが、
現状だと、20MBのファイルをダウンロードするのに、
ブラウザ(キャッシュクリアした状態で):数秒~十数秒程度
Javaプログラム:数十分
と大きな差が出てしまっています。

8:デフォルトの名無しさん
08/03/01 21:32:41
>>5
read()で1バイトずつ読み込んでたら遅くなるのは当然
read(byte[])で一度にたくさん読み書きするといいよ

9:デフォルトの名無しさん
08/03/01 21:33:32
1byteづつ読んで、1byteづつ書き込んでるからとかじゃねーの
バッファサイズ指定して読み込んで、書き込みも最後に一気にやるように修正汁
(read() じゃなくて read(byte[] b) のほうを使う)

10:9
08/03/01 21:34:15
スーパー被った

11:5
08/03/01 22:10:53
>>8>>9
色々書き忘れすみません、>>5のコードそのままではなくて
while ((i = in.read(buffer)) != -1) {
out.write(buffer,0,i);
}
のような形でバッファを利用するように変更していまして、その結果が>>7です。

バッファのサイズはとりあえず1024*32でテストしていますが、
1回の読み込みは1414~5656バイトくらいのようですので
バッファサイズが小さすぎるということも無さそうです。


例えばブラウザで
URLリンク(download.netbeans.org)
をダウンロードすると200~300KB/secは出ていますが、
Javaのプログラムからだと十数KB/sec程度と、1桁変わってきてしまっています。

12:デフォルトの名無しさん
08/03/01 22:26:52
初歩的な質問すみません

System.Math.Powを使用したらコンパイルできません
シンボルを見つけられません。
シンボル: 変数 Math
場所 : java.lang.System の クラス

MouseListenerを使用したらコンパイルできません
abstract でなく、java.awt.event.MouseListener 内の
abstract メソッド mouseExited(java.awt.event.MouseEvent)
をオーバーライドしません。

ネットで調べたらどちらも同じ階層内に存在するということだったので
普段使用しているフォルダ以外のフォルダに保存してみたけど無意味でした。

どうすればいいのでしょうか

13:9
08/03/01 22:44:58
>>11
俺の環境で試したら、ブラウザもプログラムも差無かったけど。
コード晒してみたら?

14:デフォルトの名無しさん
08/03/01 22:54:36
>>12
どういう状況なのかよくわからん。わかりやすく書いてくれ。
Math.pow() を使いたいなら、System. は不要
(System.Math は、 java.lang.System クラスの Math というフィールド
という意味になってしまう)

15:デフォルトの名無しさん
08/03/01 23:02:02
すいません そのまま載せてみます。

import java.lang.*;
class Sample
{
public static void main (String args[])
{
double x;
x = Math.pow(2,16);
System.out.println(x/2);
}
}
をコンパイル

Sample.java:7: シンボルを見つけられません。
シンボル: 変数 Math
場所 : java.lang.System の クラス
x = System.Math.Pow(2,16);
^
エラー 1 個

16:デフォルトの名無しさん
08/03/01 23:03:55
すいません Math 解決されました。
>>14さんの言うとおりです。System不要でした。

さらに別の箇所に上書きをしていましたorz

17:デフォルトの名無しさん
08/03/01 23:08:57
もう一箇所不明な点 質問させてください
Planet1.java:6: Planet1 は abstract でなく、java.awt.event.MouseListener 内の ab
stract メソッド mouseExited(java.awt.event.MouseEvent) をオーバーライドしません

public class Planet1 extends Applet implements Runnable,MouseListener
^
注:Planet1.java は推奨されない API を使用またはオーバーライドしています。
注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてくださ
い。
エラー 1 個

サンプルプログラムをそのまま打ち込んだだけなのになぜかコンパイルできません。

18:デフォルトの名無しさん
08/03/01 23:12:05
mouseExitedを実装してやれ。空実装でいいから。

19:デフォルトの名無しさん
08/03/01 23:12:53
あと、java.lang.*はimportいらない

20:デフォルトの名無しさん
08/03/01 23:15:04
>>17
どこのサンプルか知らんが、エラーメッセージどおり mouseExited をオーバーライドする必要がある
クラスの中に
public void mouseExited(MouseEvent e) { }
って書いとけばおk
ところで、何書いてるのか理解せずにサンプルを見たまま打ち込むだけってのは、あまり勉強にならないよ

21:デフォルトの名無しさん
08/03/01 23:26:49
どうもすみません。
サンプルを打ちながら書式を学習していたところなのです。
public void mouseExisted(MouseEvent e){} でも問題ないですか?すでに書き込んでありますが不可でした。


22:デフォルトの名無しさん
08/03/01 23:30:46
解決しました 入力ミスでしたorz
Existed -> Exited で解決

23:デフォルトの名無しさん
08/03/02 00:57:42
一番効率の悪いソートってなんですか?

24:デフォルトの名無しさん
08/03/02 00:58:55
ソートする気がないソート

25:デフォルトの名無しさん
08/03/02 01:00:27
ランダムに並び替えて上手い順番に並ぶのを待つソート

26:デフォルトの名無しさん
08/03/02 01:01:30
ボゴソートだっけ?

27:デフォルトの名無しさん
08/03/02 01:08:02
これな。
URLリンク(ja.wikipedia.org)ボゴソート


28:デフォルトの名無しさん
08/03/02 01:12:37
望む順番に並ばないように並び替えるソート

29:デフォルトの名無しさん
08/03/02 01:13:57
>>28
それはえーじゃんw
一瞬で終わるぞwww

30:デフォルトの名無しさん
08/03/02 01:16:40
途中で何故かyield()が入り他のスレッドにソートを任せようとするソート

31:デフォルトの名無しさん
08/03/02 01:21:08
>>23
ソースコードはこれ
URLリンク(d.hatena.ne.jp)

32:デフォルトの名無しさん
08/03/02 01:21:14
>>29
ソートは望む順番にするのが目的なんだから目的を達成できない限り永遠に終らないぞ

33:デフォルトの名無しさん
08/03/02 01:31:34
ソートアルゴリズムを名乗るなら、
最低でもソートされる可能性がないとインチキだと思う。

34:デフォルトの名無しさん
08/03/02 01:35:27
「アルゴリズム」だからな。
その手順で確実に問題が解決される保障がないと。

35:デフォルトの名無しさん
08/03/02 01:39:12
効率の悪いアルゴリズム、って普段はあまり考えないなw
ランダムに探索する手法が一般的に一番効率悪くなるんだろーか

36:デフォルトの名無しさん
08/03/02 01:43:00
真面目にやると実時間内に終わらない場合、
ある程度の不確実性を許容する事で
ランダムなアルゴリズムが効力を発揮することはある。
遺伝的アルゴリズムとか。

37:デフォルトの名無しさん
08/03/02 01:44:36
それはアルゴリズムじゃなくてヒューリスティックなロジック。

38:デフォルトの名無しさん
08/03/02 01:46:30
ソートであってソートアルゴリズムを名乗っていなければok

39:デフォルトの名無しさん
08/03/02 01:48:22
遺伝的アルゴリズムは別にランダムじゃないしな
ルーレット選択とか突然変異とかは局所最適解に陥るのを防いでるだけだろー

40:デフォルトの名無しさん
08/03/02 04:13:21
全スレ>>998様 すみませんもう少しお付き合いを。
>インスタンスメソッドの synchronized 修飾子は synchronized(this){ } でメソッド内全てを囲ったのと等しい。
>クラスメソッドの synchronized 修飾子は synchronized(Queue.class){ } と等しい。

そうなるとサンプルURLリンク(www.techscore.com)
Consumerのqueue.get()呼び出しが先に実行されたらget()内部でwait()してしまい、
Producerのqueue.put()呼び出しはsynchronized(this)のブロックにより、メソッド内に進入できなくてnotifyAll()を実行できずにデッドロックしてしまうように思えるのですが?
まだ理解が足りないですか?

41:デフォルトの名無しさん
08/03/02 04:34:35
サイトのソースコードしか目に入ってませんでした。その下にしっかり解説がありました。orz
>wait()メソッドは獲得しているロックを解放するため、他のスレッドがsynchronizedメソッドであるput()やget()を実行できるようになります。

42:デフォルトの名無しさん
08/03/02 08:56:20
>>35
アルゴリズムに問題が解けるなんて定義は無いと思うけど?
もともと、計算不可能論から出発しているのだし。

43:デフォルトの名無しさん
08/03/02 08:59:46
>42
そんなことはねーぞw
「問題を解決するための手順」なんだから、効率はともかく、解決しないのはアルゴリズムと呼ばない。

44:デフォルトの名無しさん
08/03/02 09:07:57
>40
根本的な部分で理解がおかしい

>Consumerのqueue.get()呼び出しが先に実行されたらget()内部でwait()してしまい
wait() によって、その実行しているスレッドの実行が止まるだけ。
つまり、別のスレッドはget() にも put() も実行できる状態になる。
get() が実行されたら、状況は変わらないから、そのスレッドもwait() で停止
put() が実行されたら、notifyAll() で他の停止しているスレッドに実行を通知。
すると、先に止まっていたスレッドのどれか1つが動き始める

思うにマルチスレッドの話なのに、頭の中シングルスレッドだろ?

45:デフォルトの名無しさん
08/03/02 09:27:10
>>43
関心のある者全員が飽きるまで解決してないことにするアルゴリズムが一番効率の悪いアルゴリズム

46:デフォルトの名無しさん
08/03/02 09:32:58
スレ違いもいい加減にしてアルゴリズムスレでやれ

47:デフォルトの名無しさん
08/03/02 09:57:16
J2EEについて質問させてください。
Front Controllerとなるサーブレットを自分で作っていたのですが、Filterという技術があることを知りました。
FilterはFront Controllerに完全にとって代われるものなんでしょうか?
それともあくまでFront Controllerは自分で作りFilterはそれを修飾するだけのものですか?
普通はどのように使われているのでしょうか

48:デフォルトの名無しさん
08/03/02 10:15:15

Javaラインタイムパラメータ(例えば、-Xmsや-Xmx)の設定は、
レジストリとかファイルとかに保存されてるのでしょうか?(WindowsXP、JRE1.05)

OS側で、コンパネが制限されてしまっていて、Javaアイコンが触れないのです。(;´Д`)

49:デフォルトの名無しさん
08/03/02 10:55:29
>>47
あんたの作ったFrontControllerってのが何をしているのかは知らんけど、認証の前処理だとかエンコードとかその類だったら全部Filterでやるのが普通

>>48
Jarをダブルクリックした時に立ち上がるようなパラメータはレジストリとかだと思う
どうしてもパラメータを渡したければ、コマンドプロンプトからjavaコマンドで起動したら?

50:デフォルトの名無しさん
08/03/02 10:56:57
>>39
結局ランダムじゃないか。

51:47
08/03/02 11:13:19
>>49
返答ありがとうございます。
自分がやっているのは、各サーブレットで重複するようなロジックをFront Cotrollerに書いてます。
認証やエンコードなどだけではなくシステム固有のロジックをFilterにずらずらと書いてもいいのか疑問に思いました。

52:デフォルトの名無しさん
08/03/02 11:19:26
>>49
まりがとう。(JRE1.05ではなく、JRE1.5.0_06ですた)

JVM Optionとかっていうレジストリかと思ったら、JRE1.5.0_06では、無くなってて。
コマンドプロンプトかぁ...

53:デフォルトの名無しさん
08/03/02 11:27:19
3から100までの素数を表示するプログラムを作成したのですが
コマンドプロンプトで実行すると縦にガーっと表示されます。
これを横列スペース区切りで表示するにはどうすれば良いでしょうか?
ex) 3 5 7 11 …
また、表示したものをクリアしてその上に表示することはできますか?
アプレットを使用しないと無理でしょうか?


54:デフォルトの名無しさん
08/03/02 11:32:24
System.out.println じゃなくて System.out.print を使え

>また、表示したものをクリアしてその上に表示することはできますか?
無理


55:デフォルトの名無しさん
08/03/02 11:39:04
¥r で行頭に戻ることは出来たんだが、
¥f をprintしたら1画面送りしてくれるかと思ったらしてくれなかった。


56:前スレの975です
08/03/02 12:44:47
>>前スレ987
返事遅れてすいません。
送り手側は全てのデータを書き込んだ後
(Whileを抜けた後)にChannelを閉じる処理をしています。

57:デフォルトの名無しさん
08/03/02 13:25:17
>>55
javaの標準APIはコンソール画面制御には不向きというか機能があまりない。
java向けのcursesライブラリを使ってみるとかしてみては?

58:デフォルトの名無しさん
08/03/02 15:33:49
>>50
ランダムって何?再現性が有るか無いか?

59:デフォルトの名無しさん
08/03/02 15:36:49
>>58
乱数に依存している部分がある。

60:デフォルトの名無しさん
08/03/02 20:25:40
こんばんわ。
今、考えてるソフトは、

まず、JFrameにJPanelをpackします。
そのJPanel上には点が書いてあります。
その点をdrag and dropのように
マウスをpressした状態で移動させると、
マウスにそって点が移動する。
(そしてその点の持つJPanelへの相対座標x,yは変化する)

という仕様のものを考えています。

Javaについていろいろ仕様を見ましたが、
swingやawtはライブラリが巨大すぎてどうすればいいか検討もつきません。
この仕様を満足するようにするには、
どのようなクラスやメソッドを使って設計すればいいのでしょうか?

61:デフォルトの名無しさん
08/03/02 20:35:23
iアプリでgif画像を保存したいのですがどうすればできるでしょうか?

今までやったこと:
com.nttdocomo.ui.ImageEncoderではJPEGでしか保存できない。
javax.imageio.ImageIO.write()を使えばできるらしいがiアプリでは呼べない。

どなたか詳しい方よろしくおねがいします。

62:デフォルトの名無しさん
08/03/02 21:02:03
>>60
点を何で描くつもりかしらんけど、
そのコンポーネントにaddMouseListenerとaddMouseMotionListenerでリスナをセットする
マウスを押したりドラッグするとそのリスナのメソッドが呼ばれるから、
マウスの位置を見ながら点の位置を動かす

63:デフォルトの名無しさん
08/03/02 21:03:01
>>61
gifの仕様書を見ながら自分でエンコーダを書く・・・とか?

64:デフォルトの名無しさん
08/03/02 21:19:06
>>62
例えば
MyPointというクラスを作って
public static final int SIZE = 10;
private int x, y;

drawPoint(Graphics g)
g.fillOval(x, y, SIZE, SIZE)

という感じで描きたいと思っています。
JPanelにはこのMyPointをコンポジッションしたいと思っています。

どこにリスナを登録すればいいですか?

65:デフォルトの名無しさん
08/03/02 21:25:43
>>64
JPanelに

66:デフォルトの名無しさん
08/03/02 21:27:14
>>64
public class MyPanel extends JPanel implements MouseListener, MouseMotionListener{...}

67:デフォルトの名無しさん
08/03/02 21:39:34
リスナでマウスポインタの位置を知る事が出来ますが、
そのマウスポインタが円の中にない場合は
何もアクションを起こしたくありません。
また、円を拾ったあと、「マウスポインタに沿って」同時に動かしたい
つまり連続的に描写したいです。
これはどうすればいいですか?

68:デフォルトの名無しさん
08/03/02 21:48:58
if文で円の中にあるときだけ処理すれば?
押したままマウスポインタを動かすとmouseDraggedが連続的に呼ばれるから、
新しいマウスポインタの位置にあわせて点だか円だかを描きなおせばいい

69:デフォルトの名無しさん
08/03/02 21:50:53
出来そうな気がしてきました。
明日コーディングしてみて、分からなかったらまた質問します。
ありがとうございました。

70:デフォルトの名無しさん
08/03/02 21:58:02
>>63
お答えありがとうございます。
でもエンコーダ自作以外の方法ないですかね・・・?
(ありがちですがそれをすると軽く予定時間オーバーしちゃいますので・・・

どこかにプリミティブなエンコードライブラリとか落ちてないですかね・・・
(javaじゃ無くても良いので)


71:デフォルトの名無しさん
08/03/02 22:08:23
入門書って何冊くらい読めばいいの?

72:デフォルトの名無しさん
08/03/02 22:10:36
>>71
気が済むまで。

73:デフォルトの名無しさん
08/03/02 22:12:17
>>71
自分が入門レベルを卒業できるまで

74:正志
08/03/03 00:01:33
ヒントがほしいんですが、
data 1 data 2 data3 data 4 ... data 112
という行があって、
lastIndexOf("data")で
最後のdata位置を入手した後、
最後のIntをとりたいんだけど、(112)
どうしたらいいですか?

75:デフォルトの名無しさん
08/03/03 00:02:58
>>74
ヒントか
substring と Integer.parseInt

76:正志
08/03/03 00:03:49
わーい

77:正志
08/03/03 00:08:53
ふざけんな

78:デフォルトの名無しさん
08/03/03 00:11:29
"data"でsplitしたらどうだろう。

79:正志
08/03/03 00:13:07
String posx=ss.substring(ss.lastIndexOF("?")+1);
で出来た

URLリンク(www.youtube.com)

80:60
08/03/03 00:18:51
さきほど点を移動させる質問をしたものです。
たくさん点を置くことを考えた場合、
MyPoint自体にリスナを持たせた方がいいと思うのですが、
MyPointをJPanelから継承させて、
リスナを持たせて、位置は
URLリンク(java.sun.com)()
Component#getLocation()
で取得するという方法では、
マウスで点をドラッグして動かすというのは無理でしょうか?

81:デフォルトの名無しさん
08/03/03 00:27:59
MouseEvent の .getPoint() で、MyPoint 上のマウスの位置を取得
mouseDragged() の中で、呼び出されるごとに前回との差分を計算して移動させるようにしては?

82:60
08/03/03 00:35:41
URLリンク(sdc.sun.co.jp)()

MyPointオブジェクトがドラッグされます。
その瞬間にMouseEvent eが発行されます。
これはどこから発生させればいいですか?

一応、
MyPanel < JPanel has MyPoint
という設計を考えています。MyPointはx,yという座標を持っています。

もしMyPointをリスナ登録させた場合、e.getPoint()は・・

あぁ
URLリンク(www.javadrive.jp)
ですか。

これって、
e.getPoint().xというのは、e.getX()と等価ではないですか?
そのコンポーネント上で、「マウスがクリックされた」座標を取得出来るだけですよね?
もし、MyPointでイベントを取得して、かつ、そのイベントのMyPanelでの相対位置を知ることが出来ればいいと思うのですが。

83:デフォルトの名無しさん
08/03/03 01:02:33
何が言いたいのかよくわからんが、

private Point prePoint;
public void mouseDragged(MouseEvent me){
Point nowPoint = me.getPoint();
this.setX(this.getX() + (nowPoint.x - pre.x));
this.setY(this.getY() + (nowPoint.y - pre.y));
pre = me.getPoint();
}

こんな雰囲気でいけると思うんだが

84:60
08/03/03 01:09:47
>>83

MyPoint extends JPanel implemens MouseMotionListener, MouseListener

という設定でですか?
private Point prePoint
というのはなんですか?
どこにも使われてないのですが。

おそらく、
MyPointのサイズ内で
マウスポインタの相対位置の変化を
点の移動距離としようという発想でしょうが、
問題提起として、
もし、マウスを思いっきり早く動かした場合、
つまりコンピュータがMouseEventを発行するより先に
MyPointの領域からはみ出た場合はどうするのでしょう?

85:正志
08/03/03 01:10:47
さきほど取ったdataのpositionですが、
文字列を整数に出来ない、
int sss3=Integer.valueOf(posx);
なんで


86:デフォルトの名無しさん
08/03/03 01:11:23
>>82
イベントがどのコンポーネントで発生したか e.getComponent() で知ることができる
それでなんとかなるだろ

87:デフォルトの名無しさん
08/03/03 01:14:45
>>84
>MyPointの領域からはみ出た場合はどうするのでしょう?

ドラッグ中は、ボタンを押した場所のコンポーネントにマウスイベントが送られ続ける
ボタン離すまでずっと
はみ出ても問題なし
ただし座標はマイナスとかになるから、そのへんさえ考慮してあればおk

88:デフォルトの名無しさん
08/03/03 01:15:19
>>60
prePoint は pre のミスだ。空気嫁。

>MyPointの領域からはみ出た場合はどうするのでしょう?
mouseExited() つかえ

89:デフォルトの名無しさん
08/03/03 01:29:18
>>85
Integer.parseInt するまえに、posXを表示させて確認しろ
"data" とか空白とか混じってるんだろ、どうせ

90:デフォルトの名無しさん
08/03/03 01:31:53
>>80
URLリンク(rg550.hp.infoseek.co.jp)
こんな感じじゃダメなの?

91:デフォルトの名無しさん
08/03/03 01:47:49
>>85
>>88じゃないけど補足。
空白入ってたらtrimしてやればよし

92:60
08/03/03 09:25:11
>>90
これは簡単な実装ですね。
おれがやりたいのは、PointもJPanelから継承させて
リスナをつける。
Pointの方でイベントを制御したいというものです。
外からやればそれは簡単でしょうが、
mousePointのところでものすごい手間がかかります。
例えば点が1万コあったら、いちいちこんな計算をするのは無駄すぎます。

それとこれは直接には関係ありませんが、
おれの主義で、コレクションは使わない事にしてます。
プリミティブ型と参照型の変換があんまりうまく行かないので非常に手間です。

もしArrayList<int>とかけるようになった暁には使おうかと思います。

93:デフォルトの名無しさん
08/03/03 09:37:37
>>92
>例えば点が1万コあったら、いちいちこんな計算をするのは無駄すぎます

自分で計算するのは無駄で、Swingに同じ計算をやらせるのは無駄でないと?

94:60
08/03/03 09:39:06
いや、自分で計算しないでしょ。
いちいちそのポインタがどのPointに含まれてるのか特定
するのが工学的に考えてすごく無駄。
自分で計算する部分なんかあるわけがないと思いますが。
プログラミングなんだから。

95:デフォルトの名無しさん
08/03/03 10:44:55
JAVAでヒャードキュメントを書く方法を教えてください。
String s = <<END_OF_DATA;
あいうえお
かきくけこ
END_OF_DATA

96:60
08/03/03 10:45:59
自分でっていうのは、自前で計算して点を特定してっていう意味か。
swingも内部でオブジェクトの特定に計算してるわけね。
でも、MyPointの挙動をMyPanelが請け負うのはどうなの?
もし他のコンポーネントに対してもdraggedイベントを発動させたい時に
場合わけが必要になる。
それって例えばdraggedイベントが10種類あるとした場合に、
めちゃくちゃな事になるから
MyPointにイベントを処理してもらう方がいいと思った。

それに、点の位置をpublicで外から変更出来るっていうのも不自然。

97:デフォルトの名無しさん
08/03/03 11:10:08
>>95
ない

98:デフォルトの名無しさん
08/03/03 11:41:10
>>96
そのへんはどっちでもいいと思う
たぶん好みの問題だし

1万個の点の判定を高速化したいって趣旨だったら、R-TreeやQuad treeを作るといいんじゃないかな
URLリンク(en.wikipedia.org)
URLリンク(en.wikipedia.org)

99:デフォルトの名無しさん
08/03/03 11:41:54
>>93
無知と非常識に基づく信念の持ち主の相手なんかしなくていいよ。無駄だから。

100:60
08/03/03 13:34:16
>>98
例えば、
paintComponent(Graphics g)
を使う時に、委譲を使ったりしますよね。
それと同様に、
MyPointクラスでも
MyPoint#public void moveByMouseMove(MouseEvent e)
とかいうのを作って、
MyPanel#public void mouseDragged(MouseEvent e)
(MyPoint)p.moveByMouseMove(e);

とするのはどうでしょうか?
最悪、MyPanel上でコンポーネントを計算で拾うにしても
実装の部分はMyPointクラスで書いた方がいいと思うのですが。

101:デフォルトの名無しさん
08/03/03 13:37:26
URLリンク(rg550.hp.infoseek.co.jp)
マウスの処理をMyPoint側でやるコード書いてみた。
点を1万個にすると生成に時間が掛かるけどその後は特に問題なく動いた。

102:デフォルトの名無しさん
08/03/03 13:42:03
>>97
作ってください。作ってくれたら

103:60
08/03/03 13:46:16
>>101
実行してみました。
素晴らしいです。まさにおれが考えていた仕様そのものです。
setOpaqueというのは知りませんでした。
おれはsetVisibleで出来るかと思ってましたが、
どう違うのですか?

104:デフォルトの名無しさん
08/03/03 13:50:45
>>100
ドローツールを作るときとかは、そんな感じで作るよ。
各図形にイベントを送って、それによってマウス制御のStateを変えていく。
そうすると、図形の選択・移動や変形なんかが簡単にできる。

ただ、クラスは分けたほうがいいと思う。モデルが太りすぎるから。

105:60
08/03/03 13:50:51
JFrame#setLocationRelativeTo
URLリンク(terai.xrea.jp)
も知りませんでした。勉強になります。

差し支えがなければ、
生成に時間がかかるのは当然として、
その後、円滑に動く理由を説明してもらえませんか?

106:デフォルトの名無しさん
08/03/03 13:51:39
>>103
JPanelはデフォルトで不透明 (opaque=true) だから、点は四角くないので透明な部分もあるので、設定を変えてるだけでしょ
setVisibleとは全然別

107:60
08/03/03 13:59:26
>>106
setVisibleっていうのは
addするかしないかくらいの差があるという事ですか?
つまり
setVisible(false)というのは完全に無効なコンポーネントになると?
Visiblityというのは見える、見えない=不透明か透明か
という事だと思っていました。

なるほど、デフォルトでは灰色のようですね
今setOpaqueをコメントアウトしたら四角いバックグラウンドが出てきました。

だからMyPointでsetBackgraound(Color.BLACK)
しても大丈夫ですが、これはきっと遅いでしょうね。



108:デフォルトの名無しさん
08/03/03 14:12:23
>>107
そう
setVisible(false) は、まったく何も表示されなくなるし、マウス入力もキーボード入力も受けなくなる
存在してないのとほとんど同じ

109:60
08/03/03 14:13:14
>>108
Oh I see, Thanks

110:a
08/03/03 15:18:59
URLリンク(www.harukitchen.com)
ここのサイトにある
プログラムはオープンソースにしておきます。以下のファイルを全てDLして、
メインとなるMapEdit.javaをjavac ファイル名でコンパイルしたのですが、

URLリンク(nandemo-up1.hp.infoseek.co.jp)
URLリンク(nandemo-up1.hp.infoseek.co.jp)

このようなエラーが…。
オブジェクトが見つかりません で検索してみたのですが、
クラスがないということだけしか…でもクラスの定義はされてるし…サッパリです…。
どうすればいいのでしょう?何か足りないファイルでもあるのでしょうか…?

111:デフォルトの名無しさん
08/03/03 16:10:14
>>110
>でもクラスの定義はされてるし…

定義されてるか?
OffScreenというクラスはどこにあるんだ?
AccelとかBattleManageは?

112:a
08/03/03 16:21:45
MapCanvas.javaに OffScreen m_pix_off_screen;
Chara.javaに Accel m_accel;
とあるんですが、これは違いますかね…?^^;

113:デフォルトの名無しさん
08/03/03 16:23:37
>>112
Javaの基礎から勉強し直した方がいいよ

114:a
08/03/03 16:28:16
JAVAの基礎すら知らないので、
とりあえず起動させる手順教えて下さい。

115:60
08/03/03 17:29:22
java3Dを使いたいですなぁー

116:デフォルトの名無しさん
08/03/03 17:47:22
>>114
ここはプログラムを作る人のための板なんで、
自分で作らず拾って動かすだけの人はお呼びでない
>>115
じゃあ使ってみれば
ひとりごとはブログにでもどうぞ

117:デフォルトの名無しさん
08/03/03 20:31:23
こんな質問恥ずかしいんだが初心者歓迎って書いてるから大丈夫だよね

JComboBoxに対してsetSelectedItemメソッドを実行するとJComboBoxに登録した
アクションリスナーが反応しちゃってどうも意図した動作が得られない
JComboBoxの項目が選ばれたときのみリスナーが反応するには
どこでどう判断させればいいのかな?
恐らくイベントを受け取るactionPerformedメソッドで
それがユーザーアクションによって起こったものかどうか判断できるのだろうか…
いくらヤフっても出てこない。どなたかご教授お願いします

118:デフォルトの名無しさん
08/03/03 20:44:56
>>117
一番安直なのは、setSelectedItemする間だけリスナを外す
もしくはフラグを立ててイベントを無視する
ユーザ操作によるものかどうかは判定できないんじゃないかなぁ

119:デフォルトの名無しさん
08/03/03 20:52:42
>>118
リスナを外す方法は、ちょっと不粋かなぁ?と思ったんだけど
それしか方法がないなら仕方ないね。即レスありがとう

120:デフォルトの名無しさん
08/03/03 22:24:44
shift_jis、jis等の文字コードを指定して
全角文字列を一文字ずつ漢字コード取得していくのは
どのようにすればいいでしょうか?

121:デフォルトの名無しさん
08/03/03 22:29:01
>>120
byte[] b = "あ".getBytes("Shift_JIS");

122:デフォルトの名無しさん
08/03/03 22:30:00
サーブレットの数が沢山あり、
a.b.servlet1.java
a.b.servlet2.java
...
a.b.servlet100.java

web.xmlに1個ずつ<servlet>a.b.servlet1</servlet>と定義するのは大変なので、InvokerServletを利用したいのですが、
アクセスするURLにパッケージ名を含めないという要求もあります。invokerでパッケージを指定する方法ないですか?

/context/xxx/servlet1 -> a.b.servlet1.java
/context/xxx/servlet2 -> a.b.servlet2.java
...
/context/xxx/servlet100 -> a.b.servlet100.java

<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/xxx/*</url-pattern>
<class-pattern>a.b.*</class-pattern>
</servlet-mapping>

みたいなことが出来たら嬉しいのですが。
InvokerServletのサンプルにも上記のような物がなく、代わりになるような物も見つからず。。。


123:デフォルトの名無しさん
08/03/03 22:37:01
質問です。

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

public class GUI extends JFrame {
public static void main(String[] args){new GUI();}
public GUI(){
Container c = getContentPane();
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
c.add(new MyForm("オラオラオラ", "オラ"));
c.add(new MyForm("無駄無駄無駄", "無駄"));
JButton b = new JButton("そして時は動き出す");
b.setAlignmentX(JButton.RIGHT_ALIGNMENT);
c.add(b);
pack();
setVisible(true);
}

class MyForm extends JPanel{
public MyForm(String label, String value){
setLayout(new FlowLayout(FlowLayout.RIGHT));
add(new JLabel(label));
JTextField tf = new JTextField(10);
tf.setText(value);
add(tf);
}
}
}

最後のボタンを右詰にしたいんですけど、右詰にならないのは何故でしょう。

124:デフォルトの名無しさん
08/03/03 22:38:02
>>122
invokerもどきを自分で作るのがそんなに大変とは思えないけど・・・
リクエストURLからクラス名を切り出して
Class.forName(~).newInstance()でサーブレットをインスタンス化して
service呼ぶだけじゃないのかなぁ基本的には

125:デフォルトの名無しさん
08/03/03 22:40:54
>>123
MyForm も setAlignmentX(1) にしないといけないのでは

126:123
08/03/03 22:49:40
>>125
なるほど。
いけました。そういうもんなんですね。

127:a
08/03/03 22:53:07
>>116
お呼びでないじゃなくて質問者が来るんだよ。バカか。
かってに決めてんなよお前の意味わからんルールを。質問相談スレッドだろが。

128:デフォルトの名無しさん
08/03/03 22:58:19
>とりあえず起動させる手順教えて下さい。
いやこれ質問じゃないし

129:デフォルトの名無しさん
08/03/03 23:04:16
>>127
URLリンク(pc11.2ch.net)
ここ見てみろ、ちゃんと書いてあるだろう
「この板はプログラムを作る人のための板です」って

130:デフォルトの名無しさん
08/03/03 23:04:21
まあ3月だもんな
しゃーない

131:正志
08/03/04 03:02:19
>>91 Thanks,
>>88 Shut-up man, fuck off you bitch, ウゼエ どうせ~だろ はやめなさい

132:デフォルトの名無しさん
08/03/04 03:32:21
ところでsplitで x または aで区切るのはどうしたら?

133:デフォルトの名無しさん
08/03/04 03:59:29
"123a456x789a0".split("x|a")

134:デフォルトの名無しさん
08/03/04 14:36:03
Nim of game の書き方教えてくれるとこありますか?

135:デフォルトの名無しさん
08/03/04 14:36:34
Game of Nimでした。

136:デフォルトの名無しさん
08/03/04 16:07:34
MouseEventはabstractでーバーライドできないって出てくるのですが、
何か間違っているのでしょうか?いちおう解説本の通りに打ったつもりなんですが・・

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

/*
<applet code="MouseEvents" width=300 height=300></applet>
*/

public class MouseEvents extends Applet implements MouseListener{

public void init(){
addMouseListener(this);
}

public void mouseClicked(MouseEvent me){
setBackground(Color.blue);
repaint();
}

}



137:デフォルトの名無しさん
08/03/04 16:08:09
すみません、質問させてください。

Look&Feelのフォント設定で、
System.setProperty("swing.plaf.metal.controlFont", "Dialog-Plain-12");
を指定しておくとフォントがDialog-Plainの12ポイントになりますよね。
WindowsのLook&Feelを適用したときにもこのように一括で指定するキーはありますか?

これらのキー名がAPIドキュメントにさっぱり見つからず困っております・・・


138:デフォルトの名無しさん
08/03/04 16:10:42
>>136
MouseListenerのメソッドはmouseClickedだけじゃなくて全部実装する必要がある
中身からっぽでもいいので
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }

139:デフォルトの名無しさん
08/03/04 16:21:47
>>138
ありがとうございました


140:デフォルトの名無しさん
08/03/04 17:36:21
カオスってるな

141:デフォルトの名無しさん
08/03/04 17:36:39
WindowsXP+tomcat5.0.28にて
hello.jsp --------------------------------------------------------------
<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ page errorPage="DefaultException.jsp" %>
error.jsp -------------------------------------------------------------
<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ page isErrorPage="true" %>
----------------------------------------------------------------------
hello.jspの中で例外が発生するとerror.jspが呼ばれますが、error.jspの内容が文字化けしてブラウザに表示されます。
でも、error.jspを直接ブラウザから呼ぶと文字化けが起きません。
JSPの例外処理機構で呼ばれた時だけ文字化けしているように見えます。解決方法ありますか?

142:デフォルトの名無しさん
08/03/04 17:38:22
>>141
転載ミス。errorPage=error.jspと読み替えてください。

143:デフォルトの名無しさん
08/03/04 20:15:09
>>141
文字化けの原因は別のところにありました。
web.xmlで下記の設定を入れていると、こちらが優先されるらしく文字化けが発生します。
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
error-pageの設定をコメントアウトすると文字化けしなくなります。tomcatのバグ?

144:デフォルトの名無しさん
08/03/04 21:50:31
public static void main(args[])
について、教えてください。

このメソッドについて、
一連のコンパイル単位の中でただひとつのみの存在が許されるメソッドである、
といったルールは存在しますか?

public class Test1 というクラスと
class Test2 というクラスとの両方に、
public static void main(args[])を記述してみて、
Test1のmain()から、Test2のmain()を読んでみたのですが、特に問題なく動きました。


145:デフォルトの名無しさん
08/03/04 21:56:35
> 一連のコンパイル単位の中でただひとつのみの存在が許されるメソッドである、
> といったルールは存在しますか?
ない。

146:デフォルトの名無しさん
08/03/04 22:48:27
4桁の16進数を
数値型に変換ってどうすればいいですか?
0xの16進数で出力したいのですが

147:デフォルトの名無しさん
08/03/04 22:57:00
>>146
よくわからんので、どういう入力に対してどういう出力が欲しいのか、例をあげてくれ

148:デフォルトの名無しさん
08/03/04 22:59:59
>>146
エスパーレスすると
int i = 0xABCD;
System.out.println("0x" + Integer.toString(i, 16));

149:デフォルトの名無しさん
08/03/04 23:03:56
>>147
失礼しました
>>148の方の例で言うと
StringでABCDとわかっていて
intで0xABCDと変換したいのですが

150:デフォルトの名無しさん
08/03/04 23:05:58
>>149
String s = "ABCD";
int i = Integer.parseInt(s, 16);

151:デフォルトの名無しさん
08/03/04 23:07:07
>>150
ありがとうございます
引数に指定するだけなんですね

152:デフォルトの名無しさん
08/03/04 23:47:26
お世話になります。

swingいじりしているのですが、根本がわかっていません。
JFrameのインスタンスを作ると、そいつは、自動的に別のスレッドで動いているのでしょうか?
関数main()は、最終行まで処理されて、その後ろはないのですが、
JFrameでつくったウィンドウやその上のコンポーネントは動作を続けています。

スレッドでなければ何なのか理解できません。
エスパーしていただけませんか。

153:デフォルトの名無しさん
08/03/05 00:04:25
分かりません。教えてください。初心者です。エスパーしてください。

154:デフォルトの名無しさん
08/03/05 00:15:34
>>152
クラスは作成したとき一回だけ初期化用のメソッドを通る。

155:デフォルトの名無しさん
08/03/05 01:12:20
OSのシステムフォントを得る方法はありますか?

156:デフォルトの名無しさん
08/03/05 01:28:07
Javaの質問とちょっとずれる気もしますが・・・

DBとのコネクションを確立する為に
Connection con = null;
con = DriverManager.getConnection(URL,USER,PASS)

などと書きますよね。
この時、conはインスタンスと呼んで良いのですか?
Connectionはインターフェースなのでインスタンスを生成することはできないはず。
インスタンスでないとしたら何なのでしょうか?
ご教授下さい。


157:デフォルトの名無しさん
08/03/05 01:30:59
>>152
ThreadGroup#listでどんなスレッドが動作しているか見てみるといい。
思った以上にいろいろなスレッドが動いているのが分かる。

158:デフォルトの名無しさん
08/03/05 01:32:57
>>156
conはConnectionインタフェースを実装するクラスのインスタンスへの参照

159:デフォルトの名無しさん
08/03/05 01:35:38
一応、正確を期すなら「conで参照しているインスタンス」みたいな言い方になる。
変数それ自体はインスタンスではない。


160:デフォルトの名無しさん
08/03/05 03:18:58
>>152
そう、SwingはEDTという別スレッドで動いている
そして、ここ以外では動かしてはダメ、というのがルール

161:デフォルトの名無しさん
08/03/05 04:15:31
>>152
名前をわざわざ変えなければ、mainメソッドはmainという名前のスレッドで動作している。
Swing関係の機能を使うとさらに別のいくつかのスレッドが生成される。
その中には>>160の言うEDTというGUI関係のイベント処理を一手に担うスレッドもある。
この新たに生成されたスレッド群によってウインドウやその上のコンポーネントが動作する。
mainメソッドが最後まで処理されるとmainという名前のスレッドは終了して無くなるが、
他のスレッドが終了するまでプログラム全体としては終了しない。

162:デフォルトの名無しさん
08/03/05 11:23:40
EDT自体はAWTにもあってSystem Queueっていう名前でマルチスレッドになってる。
Swingのイベント周りはシングルスレッドで動いててSwingコンポーネント生成を含めてSwingコードはEDTで動かさないといけない。
昔、Swing関連のスレッドにはバグがあるからSwingコンポーネントの生成もEDTで行うようにと作法が密かに変わってSwingのチュートリアルだけが変更されてまともなアナウンスはされてない。

163:デフォルトの名無しさん
08/03/05 12:10:15
>>152 の書き方だと
>JFrameのインスタンスを作ると、そいつは自動的に別のスレッドで動いているのでしょうか?
と訊いているのだから、コンストラクタの呼び出しのことで、それ自身はmainのスレッドで動いているでいいんじゃない?
全てのコンストラクタの呼び出しが終わらなければmain()には戻らないと…
コンポーネントのイベント処理はまた別の話で。
もちろんSUNの推奨は >>162 の云うようにコンポーネントの作成もEDTで行うなのだろうが…

164:デフォルトの名無しさん
08/03/05 12:34:10
ボタンを作って、そのボタンを押すとthreadがnullになるように作っています。
run()メソッドの中に書かれている処理にかかる時間が短い場合(1ms以下)だと正常に止まってくれます。
しかし、処理にかかる時間が長い場合(100msくらい)だと何回もボタンを押さないと止まってくれません。
どうしたらいいですか?

run()メソッドの中
while(thread != null) {
処理
thread.sleep(100);
}

165:デフォルトの名無しさん
08/03/05 12:40:35
>>164
時間のかかる処理の途中で if(thread==null) break; とかしてみる。

166:デフォルトの名無しさん
08/03/05 12:49:12
コンストラクタってコンストラクタ自身がスレッド作ってその上で動いてなかったっけ?

167:デフォルトの名無しさん
08/03/05 13:35:10
えっ

168:デフォルトの名無しさん
08/03/05 13:50:35
>>166
試しちまったじゃねぇかよ。
public class ConstractaThreadName{
ConstractaThreadName(){
DisplayThreadsName();
}
public static void main(String[] argv){
ConstractaThreadName ctn = new ConstractaThreadName();
System.out.println();
DisplayThreadsName();
}
private static void DisplayThreadsName(){
int i, n;
System.out.println("Display Threads Name");
Thread[] tarry = new Thread[Thread.activeCount()];
n = Thread.enumerate(tarry);
for(i = 0; i < n; i++)
System.out.println(tarry[i].getName());
}
}

169:デフォルトの名無しさん
08/03/05 13:57:48
>>168
カレントスレッドがどれかも表示しないと意味なくない?

170:デフォルトの名無しさん
08/03/05 14:01:32
>166
スレッドの生成コストってフルGC並の糞思い処理だぜw

171:デフォルトの名無しさん
08/03/05 14:03:00
eclipse Europe 3
と日本語化をつかってるのですが
バージョンアップするには何をダウンロードしてどうしたらいいですか?

172:デフォルトの名無しさん
08/03/05 15:48:54
>>171
Eclipse統合M24【Java/C/PHP/Ruby/Python/Perl】
スレリンク(tech板)l50

こっちで聞け


173:デフォルトの名無しさん
08/03/05 16:54:03
いやjavaのスレッドじゃなくてVM内部で別のスレッド走らせてるんじゃなかったけ?
言語違ったかなぁ・・・。

174:デフォルトの名無しさん
08/03/05 17:01:43
>>173
そんなわけのわからんことはしないよ
そんな奇妙なことをする言語があるなら興味深い
コンストラクタじゃなくてファイナライザか?

175:デフォルトの名無しさん
08/03/05 19:50:02
質問です。

GI プログラム中から
他のGUI プログラムを呼び出したときに
必ず呼び出したプログラムのウィンドウ(Frame)にフォーカスをあわせる方法
ってありますか?

呼び出すプログラム側でエンターキーで他のプログラムを呼び出すのですが、
エンターキーを連打したときなどに、どっちのプログラムもキーの受付をしてくれなくなります。

マウスでクリックしてやれば、アクティブになってキー操作を受け付けてくれるのですが。

176:デフォルトの名無しさん
08/03/05 19:51:14
>GI プログラム中から
GUI プログラム中から
のミスです

あと、
> 必ず呼び出したプログラム
呼び出された新しいプログラム という意味です。

177:デフォルトの名無しさん
08/03/05 21:18:28
詳しい方へ質問です。

『作成したプログラムを保存するフォルダを作る。コマンドプロンプトを起動したらそのフォルダがディレクトリになるように設定する(Cドライブのルートに「My Java」フォルダを作成し、ここをディレクトリにする)』
という作業をしたいのですが、「コマンドプロンプトのプロパティ」→「ショートカット」で「作業フォルダ」に“C:¥My Java”と入力すると、
「“C:¥My Java”フォルダは無効です。フォルダがあるか、またはパスが正しいか確認して下さい。」と出てしまいます。
他にフォルダを作った覚えもないのに、何度やっても同じ結果になってしまうのですが、どうしてなんでしょう?

あ~もう!自分で書いてて意味分からない‥


178:デフォルトの名無しさん
08/03/05 21:32:09
>>175
URLリンク(java.sun.com)()

>>177
"C:\My Java"
と入れてみ。
C:\は全角で入力する必要があるし、
フォルダ名にスペースを含む場合は前後を"で囲む必要がある。

179:デフォルトの名無しさん
08/03/05 21:32:44
C:\は全角じゃない半角だった

180:デフォルトの名無しさん
08/03/05 21:44:13
>>177
質問の内容がJavaではない気がする・・・。
Javaのプログラム上からファイル出力をする為のディレクトリを生成して
Javaからコマンドプロンプトを起動してカレントディレクトリを設定するって事ですか?

181:デフォルトの名無しさん
08/03/05 21:52:13
int a, b;
System.ou.t.println(a + b);
このaとbを外部からの入力で処理したいのですが、
PHPなんかのWebプログラミングでは、フォームから値を渡しますが、
Javaの場合どうやったらいいんでしょう?
GUI画面を作ればいいのかな?とは思うのですが、やったことがなくてイメージわかないし、
Servlet+JSPなんかの場合、PHPと同じようなことができるんでしょうが、
まだ環境構築どころかJavaでのWebプログラミングのやり方もわからないので、
とりあえずコマンドプロンプトから入力してくださいみたいな感じで、
aとbを順に打ち込んで計算するようなものを作ってみたいと思っています。
どのへんのクラスを使えばいいのでしょうか?

182:デフォルトの名無しさん
08/03/05 21:56:07
>>181
いきなり2ちゃんかよ。
まずは本なり入門サイトに行けよ

183:175
08/03/05 22:21:26
>>178
最前面には来るんですけど、キー入力が受付ないんですよね。
クリックしてアクティブにしてやると受け付けるんですが

184:デフォルトの名無しさん
08/03/05 22:24:54
>>181
System.in から1行読めばいいんじゃないかね。


185:デフォルトの名無しさん
08/03/05 22:26:53
// >>181
public static void main(String[] args) throws IOException {
// 標準入力ストリームから行単位で読み込めるようにBufferedReaderクラスのインスタンスを生成
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print(a: );
// 標準入力から1行読み込みint型に変換
int a = Integer.parseInt(br.readLine());
System.out.print(b: );
int b = Integer.parseInt(br.readLine());
System.out.println(a + b);
}

186:185
08/03/05 22:34:02
訂正
System.out.print(a: ); // ×
System.out.print("a: "); // ○
System.out.print(b: ); // ×
System.out.print("b: "); // ○
あと
import java.io.*;
も忘れないように。

187:デフォルトの名無しさん
08/03/05 22:38:28
>>155
たぶん見た目ネイティブにしたいんだろうが、
JavaでOSのシステム標準フォント設定を得る方法など聞いたことがない。

188:デフォルトの名無しさん
08/03/05 22:58:51
システムカラーなら取れるんだけどね

189:デフォルトの名無しさん
08/03/05 23:37:52
>>181
「Java Scanner」でググって見なよ

190:デフォルトの名無しさん
08/03/06 06:58:02
c言語に比べてjabaを初心者が先に学ぶメリットって何かありますか?
良かったら説明して下さい!

191:デフォルトの名無しさん
08/03/06 08:16:53
まずは英語を勉強する方が良いと思うぞw

192:デフォルトの名無しさん
08/03/06 08:33:55
JAVAのテキストが一通り終わったのですが、
次は何をすればいいでしょうか?

193:デフォルトの名無しさん
08/03/06 08:44:29
ソフト会社にバイトに行って、いかに自分がダメダメかを思い知るw

194:デフォルトの名無しさん
08/03/06 09:45:48
Javaを「メモリ管理不要、C++」として見てしまいますが、
すべてのパッケージを勉強する必要がありますか?

195:デフォルトの名無しさん
08/03/06 10:05:04
> すべてのパッケージを勉強する必要がありますか?
必要なら。

196:デフォルトの名無しさん
08/03/06 10:18:27
com.sun.*とSwingの非公開クラスはいらんだろう。

197:デフォルトの名無しさん
08/03/06 10:28:31
>194
不要。
java.lang.*
java.util.*
は大雑把にでもいいから確認して、後は必要に応じて調べれば十分

198:デフォルトの名無しさん
08/03/06 10:32:50
>>196
非公開クラス?
URLリンク(java.sun.com)

ここで見てて涙目になりました;;
覚える事が多すぎます・・・

199:デフォルトの名無しさん
08/03/06 11:30:56
>>198
それは1つ前のバージョンのだな
最新はこっちだ
URLリンク(java.sun.com)

必要になったときに必要なものを調べて来られれば、全部覚える必要はない

200:デフォルトの名無しさん
08/03/06 11:31:56
>>198
java.ioはI/O系、java.sqlならJDBCまわりってレベルで十分。
あとは、必要に応じて調べるだけ。

201:デフォルトの名無しさん
08/03/06 12:52:12
Scannerでの質問なのですが

import java.util.Scanner;
public class TestPorb
{
public static void main(String[] args)
{

Scanner input = new Scanner (System.in);
String gen = input.next();
int pt2 = input.nextInt();
int pt1 = input.nextInt();
//input.nextLine();
String name = input.nextLine();
int numOfGame = input.nextInt();
String pos = input.next();
}
}

name をとるときに inputMissmatchというエラーが出ます
コメントを解除するとちゃんと動くのですが、
理由が分かる人がいれば教えてください。

202:デフォルトの名無しさん
08/03/06 13:01:47
>>201
nextLine は InputMismatchException を投げません。
入力次第なので、後は何とも。

203:201
08/03/06 13:11:36
>>202

入力は、

aaa
12
23
asd asd

で試したところ、

InputMismatchException:
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at TestPorb.main(TestPorb.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)

を投げてきて、次の入力に進めません
長くてすみません。

204:デフォルトの名無しさん
08/03/06 13:41:01
>>203
で、それは何処で止まってるのでしょうか、と。
// 一行ごとに直前の変数を出力して、
// 入力と解析後の対応部分を確かめつつ。

205:デフォルトの名無しさん
08/03/06 13:46:14
nextIntが23の後の改行も食ってるとか?

206:201
08/03/06 13:55:08
>>204

入力は一行づつで、
最後の asd asd を入力した時点でのエラーです。
その前に入力したデータは全て正常に入っています。
どうも入力した "asd asd" を nextLine() で Stringに入れることができていないようなんです。

String name = input.nextLine(); の実行前に一度 input.nextLine(); を実行することでエラーを回避できるので、
Bufferに何か残っているのかな、と予想しているのですが実際のところよく分かりません。

207:201
08/03/06 13:57:50
>>205

だとすれば、
無駄にinput.nextLine()を走らせて回避するしか方法はないのでしょうか・・

208:デフォルトの名無しさん
08/03/06 14:57:03
>>205
まあ、nextLine が、"23" の直後から改行までを、改行抜きで食ってるだけ。
よって、"23<改行>" なら、戻り値の列長はゼロ。

>>207
そうそう。無駄に nextLine を走らせてください。そういう仕様です。
細かく調整したいなら sikip というものもあります。

209:201
08/03/06 22:17:42
>>208

そうですか、分かりました
skipの方も試してみます

ありがとうございました


210:デフォルトの名無しさん
08/03/06 22:21:33
今、自分のPCに
Java SE 6 Update 3 がインストールされており、
ブラウザでアプレットなどが起動できるのですが、

Update 4 や Update 5 をインストールすると
Update 3 で起動できていたアプレットが起動しなくなり、
ブラウザを閉じようとすると、固まってしまう状態になります。

ランタイムをアンインストールして Update 3 に戻すと正常に動作するようになるのですが、
Update 4 以上のバージョンで何か問題があるのでしょうか?

コントロールパネルのJavaの設定で、
インターネット一時ファイルなどを削除してみても、
アプレットは動作しませんでした

211:デフォルトの名無しさん
08/03/06 22:40:16
リグレッションバグ踏んだとか

212:デフォルトの名無しさん
08/03/07 00:14:08
アプレットが元々バグってて、古いバージョンではたまたま動作してただけとか

213:デフォルトの名無しさん
08/03/07 08:29:09
お世話になります。

SwingでGUIのプログラム作ってみているのですが、
イベント動作(?)を設定できずに悩んでいます。
お力添えください。

(awtの?)ActionListener,ActionEvent,ActionPerformed()で、
イベント動作を記述したいです。

JPanel A
├JPane B
|├JButton 1 (implements ActionListener)
|└JButton 2 (implements ActionListener)
└JTabbedPane
 ├JTextArea 1
 └JTextArea 2
例えば、JFrame以下に、上記の構造のコンテナの階層があって、
各コンテナは、直上のコンテナでインスタンス化される。
以上としたときに、
ボタンのActionPerformed()にて、
テキストエリアの内容を保存したり、とにかくテキストエリアにアクセスしたいのですが、
その手段がわかりません。
( 続く)

214:213
08/03/07 08:29:32
(続き)

すべての変数をJPanel A 直上でインスタンス化して、
上記の構造をつくり、
JButtonは、内部クラスにすれば、動作の設定はできるのですが、
コンテナの数が多くなってきたときに、内容を読むのが辛い気がします。

また広域な変数を作ることでも可能なのでしょうが、あまり使いたくないです。

どのようにすればよいでしょうか。

最終的には、JMenuBar以下のメニューからのアクセスをしたい、
且つ、JMenuBar以下の構造は、クラスとして、
外部クラスか内部クラスとして宣言したいです。
また、JTabbedPaneは、メニューなどから、増加させたり、削除させたりしたいのですが、
「各コンテナは、直上のコンテナでインスタンス化される。」
のルールにのっとった記述ができなく、簡単化のため、上記の例を出しました。

よろしく御願いします。

215:デフォルトの名無しさん
08/03/07 10:36:36
>>213
ボタンとテキストエリアで行うことを仕様とし、その実装をクラスにする。
そのインスタンスをパネルAで生成し、パネルBとタブの生成時に渡す。

216:デフォルトの名無しさん
08/03/07 12:10:01
数値a, b(long、doubleも含む)のどちらが大きいか比較し、
a<bなら負、a>bなら正、a==bなら0を返すような標準APIってありますか?

自分で作れというのが最もなのですが、割と頻繁に使う状況に遭遇するので、
標準でそのようなAPIは無いのか疑問になって質問しました。
Mathにはなかったようなのですが。

217:デフォルトの名無しさん
08/03/07 12:18:40
>>216
new BigDecimal(a).compareTo(new BigDecimal(b)) とか?
無限大やらNaNやらの場合は知らん。

218:デフォルトの名無しさん
08/03/07 12:27:43
>216
数値といっても型が違えば単純には比較でないだろ、常考
比較する為の一般に通用する仕様がないわけだから安直に標準APIじゃ提供しようがない

219:デフォルトの名無しさん
08/03/07 12:33:59
それくらい自分で作れ。

220:デフォルトの名無しさん
08/03/07 13:07:15
>>217
ありがとうございます。
取りあえずこれでいけそうですね。

>>218
説明不足でした。型はプリミティブ型でよいです。
System.out.print()のように引数タイプに全てのプリミティブ型を
用意しているクラスメソッドがあったので、数値比較についてもあるのかなと思ってました。

221:デフォルトの名無しさん
08/03/07 13:21:14
同じ型どうしなら a-b でいいのだけど、それじゃダメってことだよね。


222:デフォルトの名無しさん
08/03/07 13:39:09
>>216
×最も
○尤も

(a==b)? 0: (a<b)? -1: 1;

223:デフォルトの名無しさん
08/03/07 13:39:31
>220
だからdouble と int をどうやって比較するのかと(ry

224:デフォルトの名無しさん
08/03/07 13:40:42
パネルにコンポーネントをadd()してからそのコンポーネントをadd()の反対にすることはできますか?

225:デフォルトの名無しさん
08/03/07 13:45:31
ん?remove(Component)のこと?

226:デフォルトの名無しさん
08/03/07 13:59:21
>>223
値範囲で 217 に負けるけど、Double.compare(double, double) でも良いと思うのですが
変換で何か重要な問題があったっけ……

227:216
08/03/07 14:03:57
本当に説明不足でした。
ぐだぐだですみません。
返す型は int。
型はプリミティブ型。
>>221
(int)(long型 - long型)すると、差がInteger.MAX_VALUEより大きい場合に
問題が起きそうなのでその方法はとりませんでした。

>>222さんのように三項演算子で書く方法が一番スマートそうですね。
どうもでした。

228:216
08/03/07 14:08:05
>>226
読む前に投稿していました。
まさにこんな感じのを求めてました。
ありがとうございます。

229:デフォルトの名無しさん
08/03/07 14:10:20
>>226
int i = 0;
double d = 0.0;

230:226
08/03/07 14:13:42
>>229
日本語での解説をお願いします。

231:デフォルトの名無しさん
08/03/07 14:14:32
(゜д゜) はぁ?

232:デフォルトの名無しさん
08/03/07 14:22:24
javadocよく嫁

233:デフォルトの名無しさん
08/03/07 14:23:29
言い忘れた
byte型の昇格じゃなきゃ特に演算時に気を付けることはない。

234:デフォルトの名無しさん
08/03/07 14:27:46
嘘八百を並べた悪徳スレ

235:デフォルトの名無しさん
08/03/07 14:43:59
>>216
>>226でもいいけど、long が 64ビットなのに対して double の仮数部は 53ビットしかない。
だから例えば
System.out.println(Double.compare(0x20000000000000L, 0x20000000000001L)); //=> 0
System.out.println(0x20000000000000L == (double)0x20000000000001L); //=> true

逆に言うと、あらかじめ精度が必要ない事が判っていれば
Double#compare(double, double) で構わない。

236:226
08/03/07 14:55:25
>>235
なるほど。これはお勧め出来なかったですね、申し訳ない。

Long.MAX_VALUE と (double) Long.MAX_VALUE
==> 9223372036854775807
==> 9.223372036854776E18

// int と double についての方も、こういうことなのでしょうか?

237:デフォルトの名無しさん
08/03/07 14:58:14
>>236
int と float だと、float の方が精度低いので問題起きる可能性がある。

238:デフォルトの名無しさん
08/03/07 16:36:10
(・д・)

239:デフォルトの名無しさん
08/03/07 16:54:44
MVCモデルについて質問です。
現在、MVCを使ってマインスイーパを作ろうというプロジェクトを行っています。
Mでは、m*nのテーブルを裏返したり、フラグを変更させる動作を持たせる事にします。
ここで問題なのですが、
この配列をVに描写してもらう時に、渡すのは数字の入った2次元配列です。
これを例えば1なら1と表示させるというようにすればいいように思えますが、
Vを作る人は、Mがどういう仕様かを知ってはいけないと思います。
つまり、Mで、1という数字を100という風に書こうが31という謎の値で書こうが関係ない設計にしなければならないと思います。
この場合、私の考える中で唯一これを満たす方法は、
Mに描画のメソッドを実装して、Vで委譲させる方法ですが、
MVCの原則として、Mは描画や出入力を行ってはいけない事になっています。
そもそも、View側でもm*nで待っていてくれている保証はないわけですが、
MとVの独立性を保つためにはどのように設計すればよいのでしょか?

240:デフォルトの名無しさん
08/03/07 17:07:46
>>239
>Vを作る人は、Mがどういう仕様かを知ってはいけないと思います。 

いやいやいや。
ビューはモデルの仕様を知っている。
でなければ、何を描くのかすらわからんではないか。
ツリーモデルをマインスイーパービューに渡してどうしろというんだ。
ツリービューはツリーモデルを描く。
マインスイーパービューはマインスイーパーモデルを描く。
interface MinesweeperModel {
 int getWidth();
 int getHeight();
 boolean isFlagSet(int x, int y);
 boolean isOpen(int x, int y);
 boolean hasMine(int x, int y);
 void addChangeListener(ChangeListener l);
 void removeChangeListener(ChangeListener l);
}
こんなのでいいかと。
これをどう実装するか(二次元配列?)は、モデルの実装の詳細であって、ビューはそれを知る必要はない。
これをどう表示するか(JTable?)は、ビューの実装の詳細であって、モデルはそれを知る必要はない。
ただし両者とも、そのインタフェイス (MinesweeperModel) の仕様は知っている。

241:デフォルトの名無しさん
08/03/07 17:13:31
MVCってjava関係ないじゃん。
ゲーム作ってるならこっちの方が適切。

スレリンク(gamedev板)l50
ゲームにおけるデータ構造・クラス設計・パターン

242:デフォルトの名無しさん
08/03/07 17:15:00
クリックされたら配列に入力され、その後配列と対応する場所に四角を書きたいんですが
うまくいきませんorz
どこがだめなんでしょうか?
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

/*
<applet code="proto" width=200 height=200></applet>
*/
public class proto extends Applet implements MouseListener{
Point p;
boolean bl[][] = new boolean[20][20];
public void mouseClicked(MouseEvent me) {
p = me.getPoint();
bl[p.x/10][p.y/10] = true;
repaint();
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void paint(Graphics g){
for(int x=0;x<20;x++){
for(int y=0;y<20;y++){
if(bl[x][y] == true){
g.fillRect(x*10,y*10,10,10);
}}}}}

243:デフォルトの名無しさん
08/03/07 17:18:48
>>242
addMouseListener

244:239
08/03/07 17:22:15
>>240
プログラムが出来たら、うpするので
その時に評価してもらおうと思います。
いろいろ考えると難しくて。実装じゃなくて、設計が。
設計やさんは優秀じゃなきゃ出来ませんね。
設計が腐ってるとすべてが終わる。
設計がしっかりしてれば
実装なんか中卒だろうが高卒だろうが
理系だろうが文系だろうが
関係なしに出来るのではないかと思えてきましたが、
実際のプログラミング現場ではやはり設計というのは一番優秀な人がするものなのでしょうか?


245:242
08/03/07 17:26:33
うわ・・恥
>>423どうもありがとうございました

246:デフォルトの名無しさん
08/03/07 17:32:36
実装をなめんなよ

247:デフォルトの名無しさん
08/03/07 17:38:34
>実際のプログラミング現場ではやはり設計というのは一番優秀な人がするものなのでしょうか?

そういう話題はマ板向き

248:デフォルトの名無しさん
08/03/07 17:51:19
設計する人が優秀とは限らないが、優秀でない人が設計すると火事になる

249:239
08/03/07 18:02:27
今、ぼくは
「クラスが独立であるとは、クラスが単独でテスト可能である事と同値である」
という持論に基づいてプログラムしています。
これが正しいかどうかは置いといて、
テストが不可能、例えば乱数に寄ってしまっている設計はいけない設計ですか?
例えばマインスイーパなら、爆弾を仕掛けると思いますが、
爆弾を仕掛けるのを乱数に頼って、イニシャライザに組み込んでしまうと、
動作ごとにどこに爆弾が仕掛けられたか分からず、
「ここを押せばこういう状態に遷移する」
といったテストが行えません。
今作ってるプログラムはまさにこうなのですが、
これは失敗した設計ですか?

250:デフォルトの名無しさん
08/03/07 18:06:26
>>240の書いているようなモデルインターフェースを作っていれば、そんなものいくらでも実装で変更できると思うんだけど。

251:デフォルトの名無しさん
08/03/07 18:13:59
>>249
乱数を元にしないNonRandomMinesweeperModelを使ってテストすればいいだけだ

252:デフォルトの名無しさん
08/03/07 18:17:45
乱数に限定した話なら乱数シードを外から渡すようにすれば良いだけの話。
再現性が保てない設計は失敗と言っていい。

253:239
08/03/07 18:20:36
>>252
再現性が保てない設計は失敗なんですか。
確かにぼくもこれではテストが出来ないではないかと
すごく不安になってました。
乱数シードを外から渡してみます。

もしぼくが設計者だったら大火事でしたね。

254:239
08/03/07 18:22:40
コーディングの段階からjavadocに基準した
コメントを書いておくべきですか?
みなさんはどうなされていますか?

255:デフォルトの名無しさん
08/03/07 18:22:41
>>249
イニシャライザが何か初期化してても、とりあえずそれを無視して、
テスト用の盤面に書き換えてからテストすればいいんじゃないか

256:デフォルトの名無しさん
08/03/07 18:35:59
>>254
場合による。

ライブラリとかみたいにドキュメントはきっちりしてた方がいい場合もあるし
アプリケーションで要求変更がばしばしくる案件なんかではドキュメント書いても
次の日には書き換えなきゃいけなくなったりで割に合わない場合もある。

257:239
08/03/07 18:36:36
>>255
それが可能な設計ではないという事です。
でも、これは具体的な話ですが、
initBoard(int i, int j, int[][] bombBoard)
とかいう風にします。
今は
initBoard(int i, int j, int bombNum)
としています。これは爆弾の数から内部で爆弾が配置されたボードを弾いて、それを使って
Boardをinitializeしようという設計だからです。
でもこれは爆弾ボードの生成で乱数を使ってしまうので、再現性がありません。
しかし、上記のメソッド定義だと、ユーザが好き勝手なテーブルを引数にしてしまいます。
これはユーザに使い勝手がいいとは言えない気がします。
例えばもし縦横の配列数が違った場合は、Exceptionを出して処理を終了させればいいのでしょうか?

258:デフォルトの名無しさん
08/03/07 18:43:02
>>257
>initBoard(int i, int j, int[][] bombBoard) 
>とかいう風にします。 
>今は 
>initBoard(int i, int j, int bombNum) 
>としています。

それ両方あればいいじゃん
ユーザは使い勝手の良い方を選んで使えばいい

259:デフォルトの名無しさん
08/03/07 18:44:47
initBoard(int width, int height, int bombNum, long seed) で良いじゃん。

260:239
08/03/07 18:45:50
>>258
なるほど、オーバーロードがありましたか。
その発想は気づきませんでした。
確かにJavaAPIにある多くのライブラリには複数イニシャライザが設定されてるものがありますね。
でも書き直しですね。このままだとDRYに反する。

261:239
08/03/07 18:54:11
>>259
seedを引数にするという発想は正常ですか?
自由な配列を入れさせてもし大きさが違っていたら
Exceptionを発行して弾くというのは
少し感覚的におかしい気がします。
「型が違う」「クラスが違う」という弾き方は正常かと思いますが、
配列の大きさが違う、という事で弾かれるのは、
外から見てる人が、引数に対してすでに設定したBoardの大きさを意識して
入れなくてはいけない事になります。
これは使い勝手がいいとは言えないし、
おそらく正しい設計に基づいているであろう
GUIのライブラリがそういうものがあったかどうか考えても
なかったように思えます。
(もしあったら教えてください)

262:239
08/03/07 18:55:17
あ、でもそれじゃseedがどういう時にどんな配列が出来るか
は予想がつかないのでテストケースが書けないですね・・・

263:デフォルトの名無しさん
08/03/07 18:58:04
>260
DRYだろオーバーロードは基本的に。
void a(int i) と void a(int i, int j)
があったとすれば、前者の実装は
a(i, 0)
のように記述するだろ?

264:デフォルトの名無しさん
08/03/07 19:01:00
>>261
乱数のシードを渡すくらいなら Random オブジェクトを渡した方がいいと思う
そうすれば SecureRandom を使うこともできるし (セキュアな盤面が必要な状況なんかないだろうけど)、
テスト目的に Random を継承してランダムでない値を返すようにしたオブジェクトを渡すこともできるし

265:デフォルトの名無しさん
08/03/07 19:10:59
>>235
言語仕様的には strictfp が付いてなければ IEEE754 に従っている保証はない
ちなみに、IEEEの倍精度は精度は53桁だけど仮数部は52ビットだった気が

266:デフォルトの名無しさん
08/03/07 19:14:07
優秀でない人が実装すると設計が無駄になる

267:デフォルトの名無しさん
08/03/07 19:19:17
>>264
Random を継承してランダムでない値を返すくらいなら、
単に、数値を返すメソッドを持ったインタフェースを渡した方がいいと思う


268:デフォルトの名無しさん
08/03/07 19:22:29
>>254
コメントはテストケースにしっかり書いた方が良いよ

269:デフォルトの名無しさん
08/03/07 19:27:09
>>262
どういうシードを渡した時にどういう配列が出来るかは、どういう乱数が発生するかと等価だから
乱数生成ルーチンのテストにしかならん。除外可能。でなければ乱数生成を自前でやる必要が
出て本末転倒な事になる。異なるシードを与えたときに異なる配列になることが確認できれば十分
(もちろんその整合性も)。

というかホワイトボックステストがしたいのかブラックボックステストがしたいのかはっきりせれ。

270:デフォルトの名無しさん
08/03/07 19:29:13
つうか、そこまでするんだったら、
interface InitBoard {
int width();
int height();
boolean bomb(int x, int y)
}
などというインタフェースを渡せばいいやん

271:デフォルトの名無しさん
08/03/07 19:41:35
>>265
>>235の例だけでいえば定数式だから strictfp ついてなくても
0 だったり true だったりは言語仕様で保証されてる。

272:239
08/03/07 19:41:41
>>270
インターフェイスを使うメリットが分かりません。
インターフェイスは、そこに書いてあるメソッドに実装を強要するだけであり
なぜこの場面で使わないといけないのかが分かりません。

273:デフォルトの名無しさん
08/03/07 19:42:49
「エンジニアリング設計の基準を実際に満足することのできる唯一のソフトウェアドキュメントはソースコードだけだ」
と Jack Reeves 様が言っております。
ソフトウェアで巷で言われている「設計」などというものは
他の工学では単に設計の骨組みに過ぎないのです、たぷん

274:デフォルトの名無しさん
08/03/07 19:44:13
上にもいろいろ書いてあるだろ?
インターフェイス使えば同じ機能でも別の実装が可能になるんだって。
もう少し自分でいろいろ試行錯誤するべきだと思うよ。

275:デフォルトの名無しさん
08/03/07 19:46:44
マインスイーパーのマス程度にポリモーフィズムはいらんだろw
必要になったとすればもうそれは別のゲームになってるから設計からやり直したほうがいい。

276:デフォルトの名無しさん
08/03/07 19:57:15
javaじゃなくて設計の話になってるな。

277:デフォルトの名無しさん
08/03/07 20:04:12
>>272
インターフェースを使わないメリットが分かりません。
そこに書いてあるメソッドを呼び出せれば Board の実装が可能なのに
なぜこの場面で使うといけないかが分かりません。

278:デフォルトの名無しさん
08/03/07 20:14:08
JavaのClass.getDeclaredClasses()の使い方について質問させてください。
あるクラスで宣言されているクラス名を獲得しようとしているのですが、思うように動いてくれない状況です。
以下のようなテストコードを作ったのですが、

public class Hello {
public String message=new String("Hello");

public static void main(String[] args){

Hello hello=new Hello();
Class helloClass=hello.getClass();
Class[] classes=helloClass.getDeclaredClasses();

System.out.println("Num of Classes "+classes.length);
for(Class cls:classes){
System.out.println(cls.getName());
}
}
}

自分の想定では

Num of Classes 1
java.lang.String

という表示が出ることを期待していたのですが、実際の出力は

Num of Classes 0

となってしまい、クラス名の配列を獲得できません。
ドキュメントを読んだりネットを検索しても理由が分からず、お知恵を拝借したい次第です。
ちなみに、JDKは1.6.0_04を利用しています。

279:デフォルトの名無しさん
08/03/07 20:22:54
>>278
getDeclaredClasses() はメンバーフィールドで使用されているクラスを得るんじゃなくて
メンバーとして宣言されたクラスおよびインターフェイスを得る。

よーするに、
public class Hello {
 public static class Foo{}
 public static void main(String[] args){
  System.out.println(Hello.class.getDeclaredClasses().length); //->1
  System.out.println(Hello.class.getDeclaredClasses()[0]); //->class Hello$Foo
 }
}

280:278
08/03/07 20:31:08
>>279
>getDeclaredClasses() はメンバーフィールドで使用されているクラスを得るんじゃなくて
>メンバーとして宣言されたクラスおよびインターフェイスを得る。

さっそくのご回答ありがとうございます。
理解しました。なるほど、そういうことだったのか…

私がやりたかったのは前者だったのですが、
あるクラスのメンバとして宣言されている(has a関係の)クラス名を取得する方法という方法は
あるのでしょうか?


281:デフォルトの名無しさん
08/03/07 21:22:44
突然ですがすみません。
最近VistaのBasicにJava6update5をインストールしてから、
Yahooオークションの詳細な残り時間が表示されなくなるばかりか
ブラウザが固まってしまいます。
私だけでしょうか。
URLリンク(help.yahoo.co.jp)
このヘルプ通り設定してもダメでした。

282:デフォルトの名無しさん
08/03/07 21:29:20
あなただけです

283:デフォルトの名無しさん
08/03/07 21:37:06
内部クラスについて教えてください。
public class Class2 {
  public static void main(String args[]){
    new Class2().sub2();
  }
  int a = 100;
  public void sub2() {
    new Class3().printPrintln();
    new Class4().printPrintln(this);
  }
  class Class3 {
    void printPrintln() {
    int a = 1000;
    System.out.println(a);
    //System.out.println(this.a);
    }
  }
}
class Class4 {
  public void printPrintln(Class2 variableClass2) {
    System.out.println(variableClass2.a);
  }
}
のコメントアウトされている行で、Class2のaを取り扱いたいのですが、
不可能でしょうか?thisのような何かは存在しませんか?

284:デフォルトの名無しさん
08/03/07 21:39:08
存在します

285:デフォルトの名無しさん
08/03/07 21:54:29
>>280
> あるクラスのメンバとして宣言されている(has a関係の)クラス名を取
> 得する方法という方法はあるのでしょうか?

java.lang.ClassのAPIリファレンスを眺めて、それでもわかりませんか?



286:デフォルトの名無しさん
08/03/07 21:58:48
>>281
うちでも出た。IE7 + Java6u5。Javaコンソールに
java.lang.ClassFormatError: Incompatible magic value 1011373133 in class file default
って出て、リロードすると固まる。
Operaだとちゃんと表示されるんだよね。IE用Java Plug-inの問題かも。
つうか、ヤフオクのアプレットのclassファイル、古くない?version 45.3 ってjava1.1かよ…

287:278
08/03/07 22:00:51
>>285
すいません。分からないです。

当初はgetDeclaredClasses()じゃなくてgetClasses()使ってたんですが、
それでうまく行かなかったのでgetDeclaredClasses()を使って、やはりダメで…という状況です。


288:デフォルトの名無しさん
08/03/07 22:04:12
>>286
そうですか。
さきほどアンインストールしたら直りました。
失礼しました。

289:デフォルトの名無しさん
08/03/07 22:11:39
Javaプログラムのデプロイとアップデートについて質問させてください。
ローカルの*.classファイルが新しいものかどうかをチェックするには
どのような方法があるでしょうか?

ファイルのタイムスタンプでよいかと思ったのですが、ユーザがタイムスタンプを
書き換えるようなアーカイバを利用していた場合に対処できません。

.classファイルに外から見てわかるような内部バージョン番号をつけることはできるのでしょうか?

290:デフォルトの名無しさん
08/03/07 22:17:40
JAR にしてマニフェストに書く。

291:デフォルトの名無しさん
08/03/07 22:21:39
>>287
getFields?

292:278
08/03/07 22:37:12
>>291
そうか、その手があったか!

import java.lang.reflect.Field;

public class Hello {
public String message=new String("Hello");

public static void main(String[] args){

Hello hello=new Hello();
Class helloClass=hello.getClass();
Field[] fields=helloClass.getFields();

System.out.println("Num of Classes "+fields.length);
for(Field fld:fields){
System.out.println(fld.getType().getName());
}
}
}


で、実行

Num of Classes 1
java.lang.String

必要な結果が得られました。ありがとうございました。

293:デフォルトの名無しさん
08/03/07 22:53:16
>>290
おお、Jarでまとめるのもひとつの手ですね。タイムスタンプ署名もつけられるようですし。
ただその場合、アップデート時にはJarごと更新する必要がありますよね?
あまり大きなJarだと問題が出そうです。

更新されているclassファイルのみ更新する方法がないものでしょうか・・・

294:デフォルトの名無しさん
08/03/07 23:36:29
問題が出るような大きなJarって何Gくらいなの?

295:デフォルトの名無しさん
08/03/08 00:18:32
3メガぐらいで十分大きいんじゃん

296:デフォルトの名無しさん
08/03/08 01:40:41
>>295
GBクラスではないです。大きくても100MBいかないぐらいまででしょうか。
でもクライアント数が多いとまるごとアップデートは現実的ではないと思いまして。

297:デフォルトの名無しさん
08/03/08 01:44:05
クラスファイル等のリソースを設計、実装、運用などに合わせて分類し、それを元にjarを分ける

298:デフォルトの名無しさん
08/03/08 02:52:26
Javaこそ、このあたりの自動更新機構/ツールが備わっていてもよさそうなものだが

299:デフォルトの名無しさん
08/03/08 03:05:43
つ Java Web Start

300:デフォルトの名無しさん
08/03/08 08:12:22
Propertiesを継承して俺俺Propertiesを作っています
getProperty(key)をオーバライドして取得した値がnullの時
exceptionを投げたいのですがPropertiesにthrowsが無いからダメと怒られます

こんな時どうすればいいですか?


301:デフォルトの名無しさん
08/03/08 08:14:14
RuntimeException を投げる

302:デフォルトの名無しさん
08/03/08 08:18:37
RuntimeException又はそれを継承したExceptionを投げる

303:デフォルトの名無しさん
08/03/08 08:31:43
nullチェックした方で任意の例外投げる

304:デフォルトの名無しさん
08/03/08 08:35:56
>>301-303
ありがとうございます。
なるほど、UserExceptionを継承したのを投げてたのですが
RuntimeExceptionを継承したのを投げたらいけました。




305:デフォルトの名無しさん
08/03/08 11:00:19
>304
それはあまりよくない設計
PropertiesをラップしたMyPropertiesを作る方がいい
継承はほどほどにな

306:デフォルトの名無しさん
08/03/08 11:11:26
>>305
それは考えたのですが
カバーするメソッドが多くなるので
どうかなと思ってやめました

307:デフォルトの名無しさん
08/03/08 11:13:35
>306
そんなに多いか?
利用側に関してはgetProperty くらいでしょう使うのは。

初期化とかは内部で閉じるから、余計なパラメータ等を設定されるのも防止できるぜ。
不要なものまで公開しない方がいい。

308:デフォルトの名無しさん
08/03/08 11:33:46
>>306
ふむ…確かに多いが、eclipse なら、delegate対象を選択して、
メニュー:Source > Generate Delegate Methods...
で、必要なメソッドを選んで一発終了ですがな。

309:デフォルトの名無しさん
08/03/08 12:28:26
重い以前に回線が切れるのは何でですかね?
ダウンロードした瞬間切れるんですが・・・。

310:デフォルトの名無しさん
08/03/08 14:22:39
>>308
それっぽいのがあるなーと思ってはいたのですが
使い方解らず・・・
そっちに変更します

ありがとうございました

311:デフォルトの名無しさん
08/03/08 15:44:39
今までC#をやってきて、似てると噂を聞いたことのある
Javaに手をつけてみようかと思い、とりあえず
Java SE 6とEclipseをインストールしてみました。

あと何か入れておいたほうが良いものとかあります?

312:デフォルトの名無しさん
08/03/08 15:50:42
>311
C#でGUIとかやっていたならば、NetBeans6を使ってSwingをいじった方が感覚的に近いかも知れん
後はWebアプリを作りたいのか、GUIアプリを作りたいのか、ちょっとしたCUIアプリなのかで入れるものは変わる
CUIならEclipseで十分。

313:311
08/03/08 15:56:31
Webアプリを作ってみたいですね。

Webアプリを作るには何がいるんかな

314:デフォルトの名無しさん
08/03/08 16:04:37
「Webアプリ」つっても >>311>>312 で抱いているイメージが違いそうだな

315:デフォルトの名無しさん
08/03/08 17:25:50
java で作ったプログラムを配布したいんですけど、
.jar の状態で配布するのが普通なんですかね?

画像を大量にあつかうプログラムなので
-Xmx500m -Xms500m とか指定させて動かすのが普通なんですけど、
こういう場合ってバッチファイル起動させるようにする形でいいんでしょうか

アドバイスお願いします。


316:デフォルトの名無しさん
08/03/08 17:41:32
バッチとかシェルスクリプトとかネイティブな実行形式でラップするとか
まあ、実行時引数渡すだけならバッチかスクリプト

317:デフォルトの名無しさん
08/03/08 18:02:41
マニフェストに記述できないの?
いや、よくしらんけど

318:315
08/03/08 19:02:55
>>317
マニフェストファイルに実行時引数やメモリオプションなどを記述できるんですか?
よく知らないもので、、

319:デフォルトの名無しさん
08/03/08 19:29:59
URLリンク(www.ibm.com)

320:デフォルトの名無しさん
08/03/08 22:04:37
すみません質問です。

log4jを使ったjarを作っているのですが、
どうにもクラスパスを認識してくれないようです。
java -classpath /usr/share/java/log4j.jar -jar hoge.jar
でorg/apache/log4j/Loggerがないと怒られます。
開発PCはWindows(Eclipse)、実行(プレ本番)PCはFedora8です。
Windows側では正常に動作します。

321:デフォルトの名無しさん
08/03/08 22:06:09
スレッドを止める方法(破棄する)ってどうしたらいいですか?
「ボタンAを押すと画像を動かし始め(スレッドを開始)、ボタンBを押した時に画像を止め(スレッドを止める)、
またAを押すと画像は動き始める」っていうものなんですが・・・
Interrupt()を使ってもとまらないしsleep()を使うとボタンが押せなくなるんです…

322:デフォルトの名無しさん
08/03/08 22:16:04
>>281
私もUpdate4にした頃からアプレットが固まるようになったけど、
別スレで、
コントロールパネル > Java の
Javaコントロールパネル から
基本 > ネットワーク設定 の ネットワークプロキシ設定を
直接接続 に変更しろ

ってあったのをみて
試したら動作するようになったよ

323:デフォルトの名無しさん
08/03/08 22:16:31
>>320
-jarオプションを付けると、オプション-classpathや環境変数CLASSPATHは無視され、
MANIFESTファイルのClass-Path属性に記述されたもののみが有効になる。
ちゃんとMANIFESTファイル書け。

324:デフォルトの名無しさん
08/03/08 22:40:57
>>321
sleep を使うとボタンを押せなくなるようなスレッドを止めたいのなら、
アプリケーションを終了させると止まるヨ

325:デフォルトの名無しさん
08/03/08 23:01:24
>>323 MANIFESTって外部のJarも書けるのは初めて知りました。
おかげで無事動作しました。サンクスです。これで家に帰れます orz

326:283
08/03/08 23:43:32
お世話になります。
283なのです。

>284
ありがとうございます。
あるということで、、今日一日探してみたのですが、見つけられませんでした。
私の持っている本には見つからず、Webページでは、記述のある場所を見つけられませんでした。

Webページで参考になる場所を教えてもらえませんか。

327:デフォルトの名無しさん
08/03/09 00:03:06
>>326
URLリンク(java.sun.com)

要は、クラス名.this と書く。


328:デフォルトの名無しさん
08/03/09 00:04:55
>>326
仕様にズバリ載ってるだろうが・・・

329:デフォルトの名無しさん
08/03/09 00:06:07
あ、thisの話じゃなかった。


330:283=326
08/03/09 15:36:43
>327
ありがとうございます
確認できました。
教科書とか、入門レベルの本には載ってないのですね…。

>328
仕様書読んだことありませんでした。
参考書に沿って勉強していて気になっていた感じでした。

>329
=327ですよね?
いえ、thisの話が知りたかったのです。
Class2のaを見たいのではなくて、
最終的には、Class2 のインスタンスそのものを見たかったので、Class2.thisですね。
これが最も知りたかったことです。
ありがとうございます。

331:デフォルトの名無しさん
08/03/09 17:52:45
java.lang.*;
はimportしなくても初めからされているのはなぜですか?
importするときはどんなときですか?
String s="うんこ"
みたいなふうなようなことを自作するにはどうやりますか?
おねがいします。

332:デフォルトの名無しさん
08/03/09 17:56:21
>はimportしなくても初めからされているのはなぜですか? 
その方がべんりだから
>importするときはどんなときですか? 
java.lang以外のとき
>みたいなふうなようなことを自作するにはどうやりますか?
できません

333:デフォルトの名無しさん
08/03/09 17:59:50
>>332
ありがとうございました。
最終結論としてjava.langをimportするときはありえないという理解で
よろしいでしょうか?

334:デフォルトの名無しさん
08/03/09 18:43:12
書いてもいいけど無駄ではある。
どのクラスを使っているか明示するために*なしで1個1個のjava.lang以下の
クラスをインポート宣言する流儀はありえる。


335:デフォルトの名無しさん
08/03/09 18:45:31
インスタンス化するときの、
フィールドを定数で初期化する方法として、

クラスの記述のときに、フィールド宣言と同時に初期化の値を記述してしまう方法と、

コンストラクタで実行させる、
方法をとれるみたいですが、
1の方法はとらない方がいい、といった考え方はありますか?
(1の後に2が実行されるようで、1を2で上書きできることは確認してみました。)

どのコンストラクタでも同じことをしたいならば、便利だと思ったのですが、
初期化はコンストラクタでやるべきかなとも、思いました。
こういった考え方をいろいろ教えているサイトってありませんか?

336:デフォルトの名無しさん
08/03/09 18:57:18
テストについて質問です。

例えば
Class A{
A(){
methodA();
}
public methodA(){};
}
のようなクラスをテストするとします。
methodAをテストする前にインスタンスが作られますが、
そこではテストしていないmethodAが発動します。
この問題はどうすれば解決しますか?

337:デフォルトの名無しさん
08/03/09 19:11:58
java sound apiがダウンロードするばしょが見つかりません
日本語マニュアルつきでおねがいします。

338:デフォルトの名無しさん
08/03/09 19:44:26
>>336
Javaでおk

339:デフォルトの名無しさん
08/03/09 19:48:32
>335
ケースバイケース
可読性を考えるとフィールドの宣言と同時に初期化する方がいいかもしれない
また、初期化忘れも気づきやすい

コンストラクタはあくまでインスタンスの初期化の最後のプロセスと考えるといいかもしれない。
他にも(非staticな)イニシャライザで初期化する方法もある
private int num;
{
  num = 10;
}
のような感じ
これはほとんど使わないけど

340:デフォルトの名無しさん
08/03/09 19:49:21
>336
methodAがpublicである事がバグの一種


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch