トップページ⇒tech
1001コメント348KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/08(金) 19:48:24
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

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

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

前スレッド
【初心者】Java質問・相談スレッド111【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1200151522/

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

次スレは>>980あたりで。
0268デフォルトの名無しさん2008/02/15(金) 02:12:47
何だこれ?
読む気しねえ
0269デフォルトの名無しさん2008/02/15(金) 02:13:55
>>267
板違い
Web 作成板池
02702652008/02/15(金) 02:40:39
XPath の表記に接頭辞付けて、その接頭辞に対する URI (XML のと同じ URI) を返す
NamespaceContext サブクラス作らなきゃいけないみたいですね。
0271デフォルトの名無しさん2008/02/15(金) 03:14:39
>>267
板違いって言われてなお同じ板の別スレに投げるとは
web制作板へ行ってもそのままじゃ誰も読んでくれんぞ
あっちの板で質問するときはせめて改行を入れろ
長くなるようならうpろだにあげろ
0272デフォルトの名無しさん2008/02/15(金) 03:42:55
>>264
お察しの通り、例外が発生した際の手順は見かけ以上に多く、議論の的になります。
例外を使う場面に関する検索キーワードとしては「java 例外 コスト」などでしょうか。

条件分岐目的で例外を発生させる書き方は、好まれていないように思えます。
instanceof とキャストと例外の話も面白い。
0273デフォルトの名無しさん2008/02/15(金) 05:59:57
httpclientを使用してログインが必要なサイトにアクセスしたはいいものの
リダイレクトされて、html情報を取得できません。。。

ググってもリダイレクト先のURLを取得する方法がわかりませんー!
どなたかご存じありませんか><
0274デフォルトの名無しさん2008/02/15(金) 06:04:52
Location ヘッダを取れ。
つかリダイレクトを自動処理する設定くらいないのか。
0275209 ◆xkgLgN/H4. 2008/02/15(金) 09:06:24
>>213-214,225-227
レスありがとうございました。
メソッドの事後条件チェックにアサーションを使用した例と
考えることにします。
引数チェックに見えるのが腑に落ちないですが、
そこは問題作成者の思いやりが足りなかったと思うことにします。
0276デフォルトの名無しさん2008/02/15(金) 11:39:42
>>264
処理の重さが気になるって話なら、実際に例外が発生しない限りほとんどノーコストなんだし、
実際に例外が発生した場合にコストが高いのは、まぁエラー発生時のみだからと割り切る。

gotoっぽくてイヤって話なら、returnでエラーコード返す処理を連ねてくのに比べればマシかと。
0277デフォルトの名無しさん2008/02/15(金) 12:30:20
paint(Graphics g)やupdate(Graphics g)のgの部分を他のクラスから使う方法はありますか?

今はエラーを表示するだけなのに、

paint(Graphics g){
 test(g);
}

test(Graphics g){
 ………
 tset_error(g);
}

test_error(Graphics g){
 g..drawString("エラーがでたよ",0,0);
}

こんな感じの入れ子が数段連なってます。
なんだかガベージコレクトも頻発してるみたいなのでGraphics gを無くしたいのです。
0278デフォルトの名無しさん2008/02/15(金) 12:33:26
根本的な使い方が間違っていると思われ
0279デフォルトの名無しさん2008/02/15(金) 12:38:47
エラーに限らずほとんどのクラスにGraphicsが付いてるんですよ。
なんとかしたいでつ(>_<)
0280デフォルトの名無しさん2008/02/15(金) 12:52:03
作ったやつに氏ねと言ってくれ
0281デフォルトの名無しさん2008/02/15(金) 12:57:06
>>277
設計を見直すべきかと
paintの中で描画以外の処理をやってないか?
paintでは描画に集中し、ほかの事はやらない

設計に問題がないのなら、gを渡すのは仕方ない
あとガベージコレクションはgを渡してるのとはおそらく関係ない
0282デフォルトの名無しさん2008/02/15(金) 13:11:25
>>281
Graphicsの入れ子はガベージコレクト的に問題ないと言うことですね。それを聞いて安心しました。
ということはImageや整数配列の入れ子が問題なのかな。

Cみたいな参照変数になってるのか、なってないのかがよく分からなくて。
0283デフォルトの名無しさん2008/02/15(金) 13:22:23
Javaには参照渡ししかない。
0284デフォルトの名無しさん2008/02/15(金) 13:22:26
直線のデータをdに入れます。
dは配列です。1次元目が開始位置、2次元目が終端です。
1次元目、2次元目がそれぞれx,yの座標を持っているので、
int d[][]型です。
int d[][] = new int[2][2];
配列dのメモリ確保はこれでよいですか?
C言語のようにd = new int[2]を実行してから、2次元目はforで回しながら
newしなくてはならないのでしょうか?
0285デフォルトの名無しさん2008/02/15(金) 13:23:32
ごめん、うそついた。
Javaの変数は、オブジェクトについてはすべて参照。
引数はすべて値渡しだが、オブジェクト自身を渡すことはできない。
0286デフォルトの名無しさん2008/02/15(金) 13:26:54
>>284 http://www.javaroad.jp/java_array3.htm
0287デフォルトの名無しさん2008/02/15(金) 13:52:34
>>285
試してみたら、Imageはコピーでした。Graphicsは参照。
全部試してみればよかったんだね。
0288デフォルトの名無しさん2008/02/15(金) 15:39:04
java3級 落ちてきたオイラに一言。
0289デフォルトの名無しさん2008/02/15(金) 15:46:37
java3級ってなに?
0290デフォルトの名無しさん2008/02/15(金) 16:12:36
サーティファイか
0291デフォルトの名無しさん2008/02/15(金) 17:14:19
propertiesファイルで

firstname = taro
lastname = yamada
fullname = ${lastname} ${firstname}

みたいなことって無理ですか?
0292デフォルトの名無しさん2008/02/15(金) 17:44:10
>>234
なんか、完ぺき主義者みたいだな。
ところどころで主語や目的語が抜けて凄いな。
何を多重継承したのかわからんし、何をどのようにコントロールしているのかもわからない。
5W1Hがなっていないというか。
0293デフォルトの名無しさん2008/02/15(金) 18:17:48
>291
無理
0294デフォルトの名無しさん2008/02/15(金) 20:22:43
anko1;;あんこ
anko2;;あんこ2

このような形式の辞書ファイル(100MB)を
ランダムアクセスファイルで分割してメモリに読み込み
検索する辞書検索プログラムを作っているのですが
検索はできるのですが、かなり時間がかかり困っております

ハッシュ系のコレクションフレームワークを使えとヒントをもらったのですが
100MBのデータをハッシュ化すると当然メモリがたりなくなりました

大量のデータをハッシュで高速に検索する方法をおしえていただけないでしょうか



0295デフォルトの名無しさん2008/02/15(金) 20:28:00
>>292
KY
0296デフォルトの名無しさん2008/02/15(金) 20:31:16
>>294
メモリ増設
てか、ヒープを256MBくらいにすればいいだろ
0297デフォルトの名無しさん2008/02/15(金) 20:34:56
>>294
普通にデータベース使え。
それが嫌ならその辞書ファイルにインデックスでも付けろよ。
0298デフォルトの名無しさん2008/02/15(金) 20:49:22
SAX パーサに Schema やなんかの Validator が設定できないみたいなんすけど
解析しながら ヴァリデーション ができるようには作れないんでしょうか。
0299デフォルトの名無しさん2008/02/15(金) 21:29:55
>>294
他の人も書いてるけど、
普通にJavaDBでEmbeddedでやれば何も考えずに楽勝だと思うんだけど。

辞書ファイルがテキスト形式絶対でも
nioだったらヒープ外にバッファが取られるから
それほど遅くならんと思うがなぁ。
コマンドライン引数指定はしないとまずいし、今やってないかもしれないしなぁ、
どの程度のレスポンスで遅いって言ってるか解らないし。
0300デフォルトの名無しさん2008/02/15(金) 23:46:17
アプリの中のデフォルトフォントを設定したい。
Label l = new Label("");
l.setFont(f);
をいちいちインスタンスごとにやるのではなくて、main()が始まったらすぐに
デフォルトフォントを設定して、Label l = new Label("");した時点で
そのフォントが適用されているようにはできませんか?
0301デフォルトの名無しさん2008/02/15(金) 23:49:50
Labelをextendsしたらあかんの?
自前の俺Label作ったらええやん
0302デフォルトの名無しさん2008/02/15(金) 23:52:16
>>300
Javadocには親のフォントを継承するかのように書いてあるから、
FrameにsetFontすればいいんじゃなかろうか
0303デフォルトの名無しさん2008/02/15(金) 23:52:59
Javaのソースコードを構文解析木に変換したいです。
たとえば
a = max(b,c/2);
だったら
  =
/ \
a   max
   / \
  b    /
     / \
    c    2
のような木を得たいです。出力のフォーマットはどのようなものでも構いません。
何かご存知の方いらっしゃいましたらよろしくお願いします。
0304デフォルトの名無しさん2008/02/15(金) 23:56:01
JavaCCでググれ。

BNFが有るのが前提だったら楽。
0305デフォルトの名無しさん2008/02/16(土) 00:34:55
>>301
Label.setFont()がありましたが、setDefaultFont()で解決しました。
0306デフォルトの名無しさん2008/02/16(土) 00:50:02
>>302
ありがとうございます。あきらめました。
public class OrigApp extends IApplication {
 public OrigPanel oPanel;
 public void start() {
  oPanel = new OrigPanel();
  oPanel.setFont(Font.getFont(Font.FACE_SYSTEM | Font.SIZE_SMALL | Font.STYLE_PLAIN));
  Display.setCurrent(oPanel);
0307デフォルトの名無しさん2008/02/16(土) 00:52:49
↑import com.nttdocomo.ui.Font;
が無いとFontのシンボルが解決でないというコンパイルエラーです。
Fontというクラス名が衝突しているのですか?
0308デフォルトの名無しさん2008/02/16(土) 00:55:39
iアプリかよ・・・・・。

>>307
いみがわからん。
インポートしちゃいかんの???
0309デフォルトの名無しさん2008/02/16(土) 00:59:36
>>308
import com.nttdocomo.ui.*
こう書けばFontが使えると思っていましたが、
>>306のソースでは
import com.nttdocomo.ui.Font;
でなくてはコンパイルできない理由が分かりません。
0310デフォルトの名無しさん2008/02/16(土) 01:09:57
なるほど。
じゃぁ、Fontというクラス名の衝突という認識で正しい。

import java.awt.*;
とかやってないかい?
そこのFontクラスがある。

つーか普通Fontっていうとjava.awt.Fontだとおもうんだが。

まぁ、ソースに明示的に
oPanel.setFont(com.nttdocomo.ui.Font.getFont(com.nttdocomo.ui.Font.FACE_SYSTEM | com.nttdocomo.ui.Font.SIZE_SMALL | com.nttdocomo.ui.Font.STYLE_PLAIN));
って書いてもいいけどなw

ま、Eclipseとか使えってことだ。
0311デフォルトの名無しさん2008/02/16(土) 01:17:23
java初心者です
Cだとif文で〜のときは変数○に値□を入れて
ーのときは変数○に値△をいれる

ってのができるのにjavaはスコープの関係上それができません><
一体どうやってやるんですか??
0312デフォルトの名無しさん2008/02/16(土) 01:18:04
>>310
import java.awt.Font;は、携帯用のコンパイラだからエラーでしたが
クラス名の衝突なんでしょうね。?
Eclipse使ってないことまでバレちゃうんだな。
Eclipse使えと言われているんだが。
0313デフォルトの名無しさん2008/02/16(土) 01:20:36
>>311
何を言っているんだ C のスコープも同じだろ (最近の ANSI C/C++ は違うのか?)。

String ○ = null;
if(〜){
 ○ = "□";
} else if(ー){
 ○ = "△";
}
0314デフォルトの名無しさん2008/02/16(土) 01:21:09
>>311
おそらくキャストが間違っている
0315デフォルトの名無しさん2008/02/16(土) 01:22:04
>>311
おそらく再起動したら直る
0316デフォルトの名無しさん2008/02/16(土) 01:23:22
>>311
おそらく激しく勘違い
0317デフォルトの名無しさん2008/02/16(土) 01:25:15
>>312
あーごめん。
おれiアプリとか書いたこと無いから「クラス名の衝突」に関してはウソかもシレン。

IDE使ってないのが解るのは
import java.awt.*;
とかでアスタリスクを使ってるから。
Eclipseだったら使ってるクラスのみをインポートするし
作法的にも衝突が起きないように省略するとかしない。

スタティックインポートとかつかえんよね?iアプリだと。

コンパイルする前からエラー教えてくれるし、俺は初心者であっても使うべきだと思う。
今ならEclipseじゃなくてNetBeansでもいいとおもう。

0318デフォルトの名無しさん2008/02/16(土) 01:26:58
なんか日本語むちゃくちゃだなorz.

まだ会社なんだ・・・・・許してくれ。
03193112008/02/16(土) 01:28:52
初期化してなかっただけでした\(^o^)/
0320デフォルトの名無しさん2008/02/16(土) 01:37:47
>>317
スタティックインポートって聞いたことがありません。
まだインポがうまく使いこなせていませんが、
「Java謎+落とし穴徹底解明」を読んで、クラス名の衝突なのでは、と思いました。
0321デフォルトの名無しさん2008/02/16(土) 01:45:24
Java5から導入されたんだが、
クラス名から書かなくてもメンバを参照できるってだけ。
この場合だと

import static com.nttdocomo.ui.Font.FACE_SYSTEM

って宣言しておけば
Font.getFont(FACE_SYSTEM ・・・
って書けるってだけ。
あんまり便利でもないし、積極的に使う場面でもないな。
0322デフォルトの名無しさん2008/02/16(土) 03:18:28
<? extends Hoge> と <? super Hoge> とかってどう違うの?
0323デフォルトの名無しさん2008/02/16(土) 03:20:57
Hogeのサブクラスに限定するか、Hogeのスーパークラスに限定するかの違い
0324デフォルトの名無しさん2008/02/16(土) 03:23:09
<? extends T> Tの派生クラスだったらなんでもいい
<? super T> Tのスーパクラスだったらなんでもいい
0325デフォルトの名無しさん2008/02/16(土) 03:58:46
class A{}
class B extends A{}
class C extends B{}

とした場合、

List<? extends B> には B, C が入れられ
List<? super B> には A, B (Object も) が入れられる

って事で良いの? スーパークラスに限定が必要性ってどういう状況で出るんだろ。
0326デフォルトの名無しさん2008/02/16(土) 04:04:25
別にクラスだけじゃなくて、インターフェースも指定できるから、
状況的にはあるとおもうが。
0327デフォルトの名無しさん2008/02/16(土) 04:08:26
ん? ゲネリクス の型チェックってコンパイル時の静的な奴だから
<? super B> としても A にキャストした C のオブジェクトは OK になっちゃうんじゃないの?
0328デフォルトの名無しさん2008/02/16(土) 04:15:07
>>325
たとえば、java.util.Collections#copyとか。
<? extends T>なListの要素を<? super T>なListにコピーするメソッド。
Tのサブクラスが入ったListはTのスーパークラスを入れられるListにコピー可能。
0329デフォルトの名無しさん2008/02/16(土) 04:35:17
List<? extends B> bext1 = new ArrayList<A>(); // エラー
List<? extends B> bext2 = new ArrayList<B>();
List<? extends B> bext3 = new ArrayList<C>();
List<? super B> bsup1 = new ArrayList<A>();
List<? super B> bsup2 = new ArrayList<B>();
List<? super B> bsup3 = new ArrayList<C>(); // エラー

↑これはまぁ分かりますと。

List<? extends B> bext = new ArrayList<C>();
bext.add(new A()); // エラー
bext.add(new B()); // エラー
bext.add(new C()); // エラー

↑何で全滅やねん!

List<? super B> bsup = new ArrayList<A>();
bsup.add(new A()); // エラー
bsup.add(new B());
bsup.add(new C());

↑B のスーパークラスってのは代入の時のみで、
実際に適用するオブジェクトの型を上位に限定するんじゃないのか。
0330デフォルトの名無しさん2008/02/16(土) 04:47:20
>>329
>List<? extends B> bext

List<? extends B> ってことは、たとえば List<D> だったら
add の引数は D でなければならないわけで、
その場合は A も B も C も add 出来ないことになる。
? が確定しない限り、安易に add 出来ない。

>List<? super B> bsup = new ArrayList<A>(); 

こっちは、? が D ではありえない。List<Object> か List<A> か List<B> しかない。
List<B> かもしれないことを考えると、A は add できない。
B だったら、List<Object> でも List<A> でも List<B> でも OK だ。
0331デフォルトの名無しさん2008/02/16(土) 05:06:04
>>330
前半、全て NG なら何のためにそういった書き方が出来るんでしょうか?
さらに別に参照を受け渡すためか class D extends C{} を作って
List<D> dlist = bext; とかしてみましたがエラーでした。

後半、言語設計する側の理屈で言えばそうですね。使う側の立場で宣言だけ見ると
B のスーパークラスだけ add できるリストなのかと思ってしまいそうですが。

何でこうゲネリックウsって消化悪いんでしょうか。誰ですか設計したのは。
0332デフォルトの名無しさん2008/02/16(土) 06:07:25
>>330
なるほど。ありがとうございます。(質問者じゃないけれど)
かなり理解が進みました。

// 代入文を見ると、ついつい右辺の型で考えてしまうのよね…
0333デフォルトの名無しさん2008/02/16(土) 10:25:49
独習Javaをやっているんですが、
本が厚すぎてコードを打っているうちにパタンと閉じてしまいます。
何かいい方法はありませんか?
0334デフォルトの名無しさん2008/02/16(土) 10:33:37
板違い
0335デフォルトの名無しさん2008/02/16(土) 10:55:08
章ごとに小分けして製本する。
0336デフォルトの名無しさん2008/02/16(土) 10:57:36
>>333
独習Javaをやらない。
0337デフォルトの名無しさん2008/02/16(土) 11:01:09
>>333
お買い上げありがとうございます。
ttp://www.amazon.co.jp/dp/B0001CQAAQ

ワニクリップか洗濯バサミか何かでもいいけど。
0338デフォルトの名無しさん2008/02/16(土) 11:25:58
独習Java読んでみたけどあれはひどいね。
J2SE5.0対応を謳ってるくせに、
実際は1.3以前の内容しか載ってない。
例えば、キーワードにassertやenumが無かったり。
よくあんな本が売れるもんだ。
03393332008/02/16(土) 11:26:25
>>337
今、購入しました。
商品が届くまでは本に「やさしいJAVA」を乗せておくことにします。
03403332008/02/16(土) 11:34:57
>>338
それを聞くとモチベーション下がるなぁ。まだ第2章だっていうのに。
このスレには独習にお世話になった人はどのくらいいるのだろうか。
0341デフォルトの名無しさん2008/02/16(土) 11:48:09
ノ
お世話になったよ。
5.0は対応しているだけで、5.0用ってわけじゃないからなぁ。
1.4系を独習するという事で割り切れば今でも良本。

そもそも5.0系でまともな入門本ってあるかい?
0342デフォルトの名無しさん2008/02/16(土) 12:09:23
>>331
Java言語仕様一通り読んだけど、Genericsまわりははっきり言ってわけわからん。
つか、理解を完全に放棄したw
何らかの数学的背景があって、その範疇で整合性を取っているような感じだったが……。
0343デフォルトの名無しさん2008/02/16(土) 12:18:37
>>341
assertが載ってないから1.3系だよ。
1.4系の独習なら、他にもっといい本があるだろう。
5.0系の入門書は知らないけど、
1.4系なら結城さんの本とかいいんじゃないの?
5.0に対応してたかも知れないし。
0344デフォルトの名無しさん2008/02/16(土) 12:22:00
java(TM)plug-inの致命的エラー

XP IE7 導入

JAVAの再インストール
すべてやってもエラーでみれません
対処方法教えていただけませんか?
0345デフォルトの名無しさん2008/02/16(土) 12:31:02
>>331
>前半、全て NG なら何のためにそういった書き方が出来るんでしょうか? 

それは、get の方を考えてみればわかる。
List<? extends B> の場合、保持してる要素は少なくとも B か
そのサブクラスであることがわかってるから、get は B を返すことができる。
List<? super B> の場合、List<Object> という可能性があるから、
get は Object でしか返せない。

>List<D> dlist = bext;

それは無理。
bext は List<A> かもしれないし。
List<D> の get は D を返すわけだから、A とか入ってたら困るだろう。
0346デフォルトの名無しさん2008/02/16(土) 12:39:20
javaVM1.2以降の時だけGraphics2Dを使いたいのですが、
バージョンをチェックして振り分けてもMSjava1.1だとランタイムエラーになってしまいます。
SUNjava1.1はキチンと振り分けられて動いています。

これって対処できますか?
0347デフォルトの名無しさん2008/02/16(土) 12:39:26
理由を聞けばもっともだとは思うが、あんだけ時間かけといて何でこんなgdgdなんだろうか。
まぁ誰の声が一番でかいかを争ってたんだろうというのは想像に難くないけど。
03483462008/02/16(土) 12:55:07
具体的にはClassNotFoundExceptionが出ます。
if文で1.1以下の時だけそのクラスを使わない処理にしたら、
sun-java1.1はエラーを吐かなくなりましたが、
ms-java1.1はエラーで止まってしまいます。
0349hage2008/02/16(土) 12:57:37
質問です。(コードは以下に連投します)
キャンバス上に JComboBox を混ぜたプログラムを作ってるのですが、
マウスドラッグ中に JComboBox がちらついてしまうのが嫌なのですが、
なんとかなりませんでしょうか?
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class Test extends JFrame{
private Image offs; private JComboBox cb; private Point mp;
public Test(){ init(); }
private void init(){
Container c = getContentPane();
c.setPreferredSize(new Dimension(300, 300));
c.setLayout(null); // レイアウト無し

// JComboBox の設定
String[] ss = {"hage", "hige", "huge", "hege", "hoge"};
cb = new JComboBox(ss); c.add(cb); cb.setBounds(30, 30, 100, 20);

pack(); repaint(); setResizable(false); setVisible(true);

// ドラッグで再描画
this.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent me){
offs = null; mp = me.getPoint(); repaint();
}
});
}
0350hage2008/02/16(土) 13:00:11
public void paint(Graphics g){
if (offs == null){
offs = createImage(getWidth(), getHeight());
Graphics g2 = offs.getGraphics();
g2.setColor(Color.BLUE);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.setColor(Color.RED);
if (mp != null) g2.fillOval(mp.x - 2, mp.y - 2, 4, 4);
cb.repaint();
}
g.drawImage(offs, 0, 0, null);
}

public static void main(String[] args){ new Test(); }
}
0351デフォルトの名無しさん2008/02/16(土) 13:01:23
>>346
Graphics2D を使う部分だけ別のクラスに分けておいて、通常のクラス名で new する代わりに
Class#forName でロードして Class#newInstance でインスタンス化すれば大丈夫かと思うが、、、
(Graphics2D を使うクラスの名前は Class#forName の引数以外には一切書かない)
そんな昔の、切り捨てたら?
0352デフォルトの名無しさん2008/02/16(土) 13:12:32
>>349
とりあえず、JFrameに直接描くな。
JComponentを派生して自前のキャンバスクラスを作り、そのpaintComponentで描け。
0353hage2008/02/16(土) 13:19:04
すいません。書き直しました。本来のプログラムのほうも、構成はこんな感じになっています。
(以下、連投)
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class Test extends JFrame{
public static void main(String[] args){ new Test(); }
public Test(){ init(); }
private void init(){
MyCanvas canvas = new MyCanvas();
getContentPane().add(canvas);
pack(); repaint(); setResizable(false); setVisible(true);
}
}
0354hage2008/02/16(土) 13:22:11
class MyCanvas extends JComponent{
private Image offs; private JComboBox cb; private Point mp;
public MyCanvas(){ init(); }
private void init(){
this.setPreferredSize(new Dimension(300, 300));
this.setLayout(null); // レイアウト無し
String[] ss = {"hage", "hige", "huge", "hege", "hoge"}; // JComboBox の設定
cb = new JComboBox(ss); this.add(cb); cb.setBounds(30, 30, 100, 20);
// ドラッグで再描画
this.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent me){
offs = null; mp = me.getPoint(); repaint();}});
}
public void paint(Graphics g){
if (offs == null){
offs = createImage(getWidth(), getHeight()); Graphics g2 = offs.getGraphics();
g2.setColor(Color.BLUE); g2.fillRect(0, 0, getWidth(), getHeight());
g2.setColor(Color.RED);
if (mp != null) g2.fillOval(mp.x - 2, mp.y - 2, 4, 4);
}
g.drawImage(offs, 0, 0, null);
cb.repaint();
}
}
と、途中で気づいたのですが、 paint を paintComponent にすると治りました・・・
paintComponent というのをはじめて知りました orz
勉強になりました。ありがとうございました
0355デフォルトの名無しさん2008/02/16(土) 13:22:14
>>351
Java 系のグループじゃそう言われてるけどなぁ、先日ニュース系の板から秘密で誘導して
統計とって見たら一番多かった Java 6 に続いて 5.0 と MS JVM 1.1 がほぼ同じだったよ。
もっとも、入れてもない奴がダントツだったけど。
0356デフォルトの名無しさん2008/02/16(土) 14:52:42
>>351
ありがとうございました。でもさっぱりわかりません。

>>355
ライバルが1.1サポートなんですよ(^^;

どうやらクラスローダーの挙動が違うのが原因なのかな。
0357デフォルトの名無しさん2008/02/16(土) 15:03:36
xmlをhttpでpostするサンプルをください!
0358デフォルトの名無しさん2008/02/16(土) 15:56:33
本みながらやってるんだけど
Iteratorとかvectorに<E>みたいなのをつけろって
eclipseでやると注意されるのですが
そこにIteretorでStringをあつかうとき<String>みたいに
やったら動きました。
本には書いてないので<>がなにかわかりません。
本だとIteratorでObjectにして好きなクラスを返すみたいになってるけど、
それはできないんですか?
0359デフォルトの名無しさん2008/02/16(土) 16:06:35
5.0で導入されたジェネリクス。
本に従ってやるならば、Eclipseでコンパイラレベルを1.4に汁
0360デフォルトの名無しさん2008/02/16(土) 16:37:08
正規表現で
hoge[0]=○○
という文字列を検索したいのですが
半角[]をどうやって表現すればいいのかわかりません><
0361デフォルトの名無しさん2008/02/16(土) 16:45:53
>>355
http://www.adobe.com/products/player_census/flashplayer/

Flashのアドビの発表でjavaの普及率が84.6%ってなってるけど?
これだけあれば個人的には十分。

2ちゃんねらは過去にFlashのリンクを何度も踏まされてるから
インストール率が高いとかかも。
0362デフォルトの名無しさん2008/02/16(土) 16:57:59
>>350
正規表現としては\でエスケープすればOK
Javaの文字列としては・・・
\\[で[にマッチするということになるな
0363デフォルトの名無しさん2008/02/16(土) 17:33:57
>>356
ClassNotFoundが出たら1.1だと判断すれば?

で、>>351が言うように、1.1に存在しないクラスを直接参照しないようにする。
0364デフォルトの名無しさん2008/02/16(土) 17:40:55
>>362
ありがとうございます!
てっきり\ひとつだけだと思ってました><;
0365デフォルトの名無しさん2008/02/16(土) 17:59:34
Derbyの使い方について教えてください
0366デフォルトの名無しさん2008/02/16(土) 18:23:57
>>365
このスレでDerbyの使い方講座を開講しろっていうのか?
Apacheのページへ行ってDerbyのドキュメントを読め。webで検索しろ。
ここで質問するならもっと質問を具体的にして絞り込め。
0367デフォルトの名無しさん2008/02/16(土) 18:35:23
>>365
(1) derby.jarファイルにクラスパスを通す
(2) Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); を呼ぶ
(3) DriverManager.getConnection("jdbc:derby:test;create=true") で Connection を取得する
(4) 好きなSQL文を実行する
(5) Connection を閉じる
(6) DriverManager.getConnection("jdbc:derby:;shutdown=true"); を呼んでシャットダウンする
■ このスレッドは過去ログ倉庫に格納されています