【初心者】Java質問・相談スレッド113【大歓迎】
at TECH
1:デフォルトの名無しさん
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());
}
}
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4768日前に更新/246 KB
担当:undef