【初心者】Java質問・相談スレッド115【歓迎】
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。
6 :
デフォルトの名無しさん :2008/05/12(月) 04:36:14
javaを勉強するなかで、私はまずjavaで簡単なゲームを作ることにしました。 アプレットを作る方法を勉強すればいいと思うのですが、 javaでできるのはアプリケーションとかサーブレットとかもあるがそれはしないつもりなのか?と突っ込まれました まだ全然よくわからないのですが、アプリケーション用のjavaとかサーブレット用のjavaとかがあるわけではないですよね アプレットを作るプログラムの基本を学んでいけば、その応用でアプリケーションやサーブレットにも対応していけると予想しているのですが この考え方で問題ないでしょうか? いろんな本やサイト見ても、そもそもjavaで出来るのはこれこれで、それはこういうものだっていう説明は中々見つかりません いきなりプログラムの書き方について(クラスとかメソッドとか)ってのが多くてこの疑問がなかなか解決しなくて困っています
7 :
デフォルトの名無しさん :2008/05/12(月) 05:08:40
JDKのドキュメント見てわからないなら何見ても一緒 Sunの米国サイトに行っても概要は分かるはず jakartaなども覗いて見るといいだろう
>6 javaにはたくさんのクラス、メソッドがあり全てを覚えきって 使いこなすには今生では無理。java.utilパッケージを使いこなすのは必須事項だけど javaで何がやりたいか?(サーブレット、アプレット,swing etc)を決めて それのエキスパートになるのが良いと思うよ。
String[] allTokens = line.split(" "); for (String token : allTokens) この意味を教えてください。
10 :
デフォルトの名無しさん :2008/05/12(月) 11:11:42
age
11 :
デフォルトの名無しさん :2008/05/12(月) 11:40:03
>>1 乙です。
早速質問お願いします。
import java.util.regex.*;
public class TestRegex {
public static void main(String[] args) {
Pattern pattern;
Matcher matcher;
/* パターンマッチ */
System.out.println("<パターンマッチ>");
pattern = Pattern.compile("[^0-9a-zA-Z]+");
matcher = pattern.matcher(args[0]);
boolean b = matcher.matches();
System.out.println("match =[" + b +"] CD=[" + args[0] + "]");
}
}
実行時コマンド java TestRegex "a"
結果はtrueを期待していたのですが、falseになります。
なぜでしょうか?
12 :
11 :2008/05/12(月) 11:44:10
すいません、自己解決しました。 falseで合ってますね、失礼しました。
>>9 jdk5以降のjavadocの新機能の章、拡張for文のところを嫁
15 :
デフォルトの名無しさん :2008/05/12(月) 14:29:49
>>6 ただ漫然とエキスパート目指してもその類の人間はごまんと居る
君のように何が出来るのかを考え大枠を作り出す能力こそが非常に重要
16 :
デフォルトの名無しさん :2008/05/12(月) 16:51:17
javaでUSBバスパワーのON/OFFや 電圧制御などはできますか? USB扇風機をプログラムで制御できないものかと考えたのですが・・・
17 :
デフォルトの名無しさん :2008/05/12(月) 17:13:13
JavaUSB
18 :
デフォルトの名無しさん :2008/05/12(月) 17:40:55
質問なんですがjavaにもMSDNライブラリみたいなサイトってあります?
sunのページが山ほどあるだろ
22 :
デフォルトの名無しさん :2008/05/12(月) 20:05:05
>>19 ありがとうございます。
色々検討してみます。
import java.util.Scanner; class Les4_1{ public static void main(String[] args){ Scanner stdIn = new Scanner(System.in); int y; do{ System.out.println("整数を入力してください"); int x = stdIn.nextInt(); if(x == 0){ System.out.println("入力された値は0です。"); } else if(x <0){ System.out.println("入力された値は正です。"); } else{ System.out.println("入力された値は負です。"); } System.out.println("もう一度? YES=1 NO=2"); y = stdIn.nextInt(); }while(y == 1); } } ・・・というような参考書に載っていた読み込んだ整数値の符号を判定するプログラムを 作っていたのですが、utilのパッケージ、Les4_1のクラスでシンボルを解決できない、 というエラーが出てしまいます。 一行目をimport java.io.*;に変えるとutilのパッケージのエラーが消えました。 開発環境はJ2SE SDKです。長くなりましたが、どうか回答お願いします。
25 :
デフォルトの名無しさん :2008/05/12(月) 20:23:25
何の回答?
26 :
24 :2008/05/12(月) 20:30:28
正常に動くようだけど?ただし不等号が逆
java.util.Scanner Since: 1.5
29 :
24 :2008/05/12(月) 20:50:28
>>27 気付きませんでした。ありがとうございます。
>>28 今使ってるのが1.4.2でした・・・。
新しいバージョンのでやり直してみます。ありがとうございます。
質問です ArrayList型の変数に格納されてる値をString型の変数に代入して行きたいのですが C言語の配列だと最後に\0が格納されていて、終端の判断が出来るのですが ArrayListにもその様な終端の判断が出来る要素ってありますか? また無かったら、どの様にして終端を判断するのか教えてください
31 :
デフォルトの名無しさん :2008/05/12(月) 21:39:29
size()
ArrayListの長さならsize() Stringの長さならlength()
javaを勉強してる学生です。 win+ECLIPSEでやってるのですが、ECLIPSEがちょっと重たい。 いいツールないですか?オススメあったら教えてください。 私、普段macなんですが、macでjavaを勉強しようと思ったらどういう環境がいいですかね?やっぱりECLIPSEですか?OS10.5です。
vim + Makefile は軽いよ! 当然ながら。
>>34 個人的な意見だが、MacOSXのSWTはやたら遅いので、
MacでやるならNetBeansのほうがサクサク動いてお勧め。
>>35 ,36
vimは先生が使うなって言ってたんです。
なんでかわかりませんが。
MacだとNetBeansですか。。
ちょっとチャレンジしてみます!
vim 使いの俺に対する挑戦か・・・その先生はw まあ、初心者には敷居高いわな。
>>38 にゃはは。敷居が高いって言ってました。うちの先生。
NetBeansでいろいろしてからvimにチャレンジしてみます!
プログラムでも何でもないんだけど 良いスレ見つからなかったので 簡単な質問させて下さい。 私はローテクアニオタゲーマーでブロック崩しとか 好きなんですけど、JAVAのブロック崩しって マウス操作がおもくそ引っ掛かりませんか? ノートだろうがハイスペックデスクトップだろうが 同じような頻度で同じように引っ掛かって ちゃんと操作してるのにカーソルが動かなくて 玉をロストってのがめっさムカつきます。 これってJAVAゲーの仕様なんですか? どうしようもないことなんですか? それ以外は作り手さんが色々な工夫を し易いみたいで面白いんですが、アレだけは 本当に嫌なんです。どうにかなりませんか?
>>40 板違い
ここはプログラミングするひとの板です
そのゲームプログラムを
>>40 が改造してもっとよくしたいとかなら
>>40 が作成したソースを示すことで相談に乗れる人もいるでしょう
42 :
デフォルトの名無しさん :2008/05/13(火) 02:34:37
作り手の質の問題だよね そんなひどい品質のゲームを出すこと自体センスを疑う
43 :
デフォルトの名無しさん :2008/05/13(火) 04:48:09
Integerの配列のデータをintの配列のデータに入れようとしたらエラーがでます。 (int)でIntegerの配列のデータをキャストしようとしたんですが無理でした。 なんで?
44 :
デフォルトの名無しさん :2008/05/13(火) 04:54:57
43です。 自己解決しました。 Integer-int変換なんだから自動で処理してほしいですね
>>44 Integer[] i = ...;
int[] j = ...;
j[0] = i[0];
みたいにIntegerとintの間ならauto-boxing, auto-unboxingしてくれるはずだが?
どんな代入を行おうとしたんだ?
使ってるのが1.4以下だったならこの言語仕様はないから真面目に変換を書かないとだめだが
47 :
デフォルトの名無しさん :2008/05/13(火) 07:17:12
>>45 DataTableがInteger型です。
int [ ] DataOfSocialStudies= new int [ DataTable[2].length ] ;
for(int i=0;i<DataOfSocialStudies.length;i++){
DataOfSocialStudies[i]= DataTable[2][i].intValue(); ←この部分
}
ぷらっとフォームを確認したらJDK1.4だったんでJavaHotSpotClient VM1.6
ってのにしたんですけどエラーは変わらず出ました・・・
JDK1.6入れろよ
>>47 >ぷらっとフォームを確認したら
PCショップか。
あれはぷらっとホーム 昔、営団がホームドアを導入したとき、Home Doorと英表記してたのを思い出した。
swingスレか迷ったのですが、 コマンドプロンプトを起動+コマンド入力→実行 をJavaプログラム内から行いたいのですが、こういうのは可能なのでしょうか?
Runtimeクラスを調べてごらーん
53 :
デフォルトの名無しさん :2008/05/13(火) 22:14:05
Web系の仕事をしてまもない若輩者です。 最近、上司の教えにより、ようやくsyncronized構文を使ったサーブレットを作成する事が 理解できるようになりました。スレッドについては他にThreadクラス、Runnableインターフェイス等あるみたいなんですが、 とりあえずsyncronizedを覚えてといわれたので上記2つは勉強しておりません。 Web系開発をするにあたり上記2つ(Threadクラス、Runnableインターフェイス)は 必要でしょうか? よろしくお願いします。
54 :
デフォルトの名無しさん :2008/05/13(火) 22:47:42
もしかしてResultSetってクエリの結果をオブジェクト内に保持しているんじゃなくて getXxx()する度にDBに結果を取りに行ってるんですか?
1レコード取得するたびにRDBMのカーソルが動くと思っておけばいいんでない?
どうせでっかいがちがちのフレームワーク使うことになると思うよ。
58 :
53 :2008/05/13(火) 23:08:17
>>57 なんですか!?なにかおかしかったですか??
せっかくスレッドの本を1冊かったので、もし必要ならやっとこうかなとおもったんです。
だから、教えてくれればありがたいんですが。。
>>53 お前にはまだ早いというのが上司の判断だろう
____ __,,/ _, ----`ヽ / _ ___ 、\ / / i \ \\ ,'./ i ヽ:. ヽ:.:.. ヽ.ヽ ,'/ / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ |i .i i .i / ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ} |i .i l :N_, -弋 \弌弋ナ:}:.:} |i∧ ', :{ ,ィjモト \ イjミトイイV .| :メヽ.', `ozZ} izN。ハ::{ | :ヾ_! ゝ "゙゙ ' `゙ ハ.:', | :.:_イ .:.ヽ. (二フ , イ :.:.:!:.ヽ / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\ / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\ / .{. ',ヾ、ヽi .:.:.{ /(^` |.:.:.:.//: : :.}: . ヽ. / / ) ヽ ヾ、ヽ:.ハ ヤ{ ∧/.-‐'": : |:.:. i ', ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、 : : : l:.:.: .ハ ', { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.} V | .:.:/:.:|_,ィ' ̄ ヽ三{ `ー-ノ : イ : : :/:.:i.:{ リ ヽ:.:{、.:.V : : ヘ : : {: : :/:.::∧| ヽ! )人 : : :人 : : : / \! " ヽ : : : : :/イ{ :.ノ: : : :.\ \__///: :\______/: : : : : : : ヽ / //: : :|;|: : : : : : i: : : __: : : : ', / 、 {;{ |;| . : i/. : : : : : :| / `Y;{. . . .|;|. : : : /i: : : : : : : : :l なんですか!?なにかおかしかったですか?? せっかくスレッドの本を1冊かったので、もし必要ならやっとこうかなとおもったんです。
>>58 状況がよく分からんが・・・・・
そもそも、synchronizedを使うということは、
マルチスレッドが絡んでる領域だろう
一般論としてマルチスレッドプログラミングは、概念を理解した上で行わないと危険
しくじると簡単にデータの整合性を破壊したり、パフォーマンスを劣化させてしまう
おまけにバグが再現しにくいので修正も簡単じゃないことがある
単なる釣りだろ
まあJavaでWebならデフォでマルチスレッドだからな
サマータイムになったらどうすればいいの?おしえてちょ
何がしたいの?
質問です Javaアプリケーションで起動したときに フレームの上半分にあらかじめ指定していたファイルから 画像を読み込み表示するというプログラムを 作りたいのですがどう作れば良いのでしょうか? 調べてもAppletに関することばかりで困ってます
appletで出来るのなら 親をJFrameにすれば?
フレームにAppletを貼ったあとinitとstartを呼び出すのも忘れずに。
ということはここでアプリケーションに関する情報を得たとしても作れないってことだ 素直に宿題スレへ行け
申し訳ありませんでした もう少し勉強してきます
そういや
>>68 っていう手があったな。
アプレットなんてもう何年も使ってないから忘れてた。
74 :
51 :2008/05/14(水) 00:44:12
>>52 すいません、寝ちゃって返事が遅くなってしまいました!><
ちゃんと引数まで付けて実行出来るとは、正にやりたかったことです!
おかげさまで非常に助かりました、本当にありがとうございます!!
75 :
デフォルトの名無しさん :2008/05/14(水) 00:58:52
ぐぐればすぐ出てきそうなもんだろうに…<<66
76 :
デフォルトの名無しさん :2008/05/14(水) 01:02:34
宿題スレから誘導されて来ました。 乱数を利用して0〜53の値をランダムで配列に格納するプログラムなんですけど、 永久ループになってしまいます。値は一意です。 どなたか助けてくださいm(_ _)m public class XXX { public static void main(String[] args) { /* 変数宣言 */ int[] card = new int[53]; int nn, num; boolean frg = false; // 配列との比較用フラグ /* 乱数の発生と格納 */ nn = 0; while (nn != 52) { num = (int)(Math.random() * 54); for (int i = 0; i < nn; i++){ if (num == card[i]) { frg = true; break; } } if (frg == false) { card[nn] = num; nn++; }
/* 結果の表示 */ String buf; for (int i = 0; i < card.length; i++){ buf = " " + card[i]; buf = buf.substring(buf.length() - 4); System.out.println(buf); if (i % 10 == 0){ System.out.println(); } } }
>>76 while (nn != 52) {
num = (int)(Math.random() * 54);
for (int i = 0; i < nn; i++){
if (num == card[i]) {
System.out.println("num=" + num);
frg = true;
break;
}
}
でやってみたらどう?
>>78 やってみました、
num = で、1〜53までのランダム整数が永久ループで表示され続けます。
フラグ初期値falseがどんな数値でもtrueになってしまっているようで、
それでいてnnが加算されないのが永久ループの原因のようです。
うう、どうしてかわからない・・・。
シャッフルって普通こう書くんでは? public static void shuffle(int[] array) { shuffle(array, array.length); } private static void shuffle(int[] array, int size) { if (size == 1) return; int swapIndex = random.nextInt(size - 1); int temp = array[size - 1]; array[size - 1] = array[swapIndex]; array[swapIndex] = temp; shuffle(array, size - 1); }
>>80 すません、まだJAVAならいたてのど素人なので
そこらへんは・・・
(int)(Math.random(x + 1))で、0〜Xまでの数値のランダムというのを
ネットで発見したのでそれを使ってやろうと考えています。
82 :
80 :2008/05/14(水) 02:05:54
誤: int swapIndex = random.nextInt(size - 1);
正: int swapIndex = random.nextInt(size);
死にたい。
>>81 if (frg == false) {
card[nn] = num;
nn++;
} else frg = false;
ってしてみたら?
あとフラグの綴りはflagです。
buf = buf.substring(buf.length() - 4);
は何やってるのかわかりません。
if(frg == false)はif(!frg)でいいじゃん
83 :
53 :2008/05/14(水) 02:08:44
たびたびすみません。
>>53 です。みなさん、レスありがとうございました。
上司からデッドロックとかスレッドの概要はおしえてもらいました。データの整合性
とか同期とかも教えてもらいました。
スレッドクラスとかランナブルインターフェイスというのは、スレッドを専門にあつかうクラスであるみたいですが、
Webアプリやるならsyncronizedだけでいいといわれました。でも、せっかく本を買ったので
必要ならやってみたいとおもったりしたわけです。
概念的なものは理解したつもりです。後はクラスの使い方だとおもうんです。
ですから、それを勉強しといたほうが得なのか、Webアプリには必要ないのかを聞きたいんですが…
ぜんぜん、つりではなく、まじめな質問なので、よろしくお願いします。
具体的には、WebアプリでThreadクラスやらRuunableインターフェイスを使う事があるのかないのかを聞きたいです。
どうか、よろしくお願いします。
84 :
53 :2008/05/14(水) 02:10:08
上司の物言いが軽かったので、真偽のほどをおしえてもらいたいんです。 すみませんが、軽く答えていただければいいのでよろしくお願いします。
その辺のめんどくさいことはアプリケーションサーバがやってくれるので、 意識しなくてよいはずです。 そのためのアプリケーションサーバですから。 せっかく本を買ったのなら、アプリケーションサーバのベンダの人達は、 こんなめんどくさいことやってるんだなあ、と考えながら読みましょう。
明示的に使う使わないに関わらずjava技術者ならスレッド全般の知識はあって当然 目先のことに囚われて勉強しなくていいやなんて思っているなら死んだ方がまし
87 :
53 :2008/05/14(水) 02:26:06
>>85 まいど!やんなくていいですか。ありがとうございます。
せっかく買ったのでやってみようとおもいます。ありがとうございました。
>>86 スレッドってそんな大事なんですね。あちきは、単なる1部分くらいにおもってました。
じゃあ、やってみます。
みなさん、回答どうもありがとうございました。多謝です。
>>82 あーっ、なるほど。漸くわかりました。
一度既出の値が出たときにフラグがtrueになるのがそのままtrueのまま続いてしまっていたんですね。
どうもありがとうございます。精進します。
>buf = buf.substring(buf.length() - 4);
すいません、説明不足でした。表示する内容を右揃えする制約があったので、
substringを利用して右揃えをする部分ですこれ。
◆6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
http://system-trading.jp/news/index.php?cID=3 5月22日より登録受付開始、6月2日よりグランプリ開始の予定。賞金総額2000万円。
デモトレードの優勝者には賞金三百万円がプレゼントされます。
▼トレード部門
初期資産500万円で、デモ取引のトレード収益を競っていただきます。
http://www.fx-gp.com/about/ ▼賞金総額
■社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
90 :
デフォルトの名無しさん :2008/05/14(水) 05:35:57
すみません、別のプロジェクト内のクラスのインスタンスを作ることって可能なんでしょうか? 教科書にスタックの考え方を再現したJAVAプロジェクトと、前置記法のアルゴリズムを再現したJAVAプログラムがあり、 そのうち前置記法のプロジェクトが当然のようにスタックのプロジェクト内のクラスのインスタンスを作っているのですが。 エクリプス上でその部分に赤線が引かれており、実行してもエラーが出ます。 また、別のクラスを呼び出すために「Javaのビルド・パス>プロジェクト」と「プロジェクト参照」の設定」とやらも試してみたのですが、 そうすると赤線部分はなくなったのですが、実行しても何も起こりません。 前置記法のプログラムの最初にはimport java.io.*; とあるのですがそれが関係しているのでしょうか?
91 :
デフォルトの名無しさん :2008/05/14(水) 07:06:40
すいません。初歩の初歩でつまずきました。。。 実行すると Exception in thread "main" java.lang.NoClassDefFoundError: ↑はwikiで解決するんですが、 at java.net.URLClassloader$1.run(Unknown Sourse) at ・・・ at ・・・ と、at何とかが7個出てくるんですがあれはなんでしょうか? 教えてください。
92 :
デフォルトの名無しさん :2008/05/14(水) 11:42:50
エラー
>>91 スタックトレース
例外が投げられた時点でどういうメソッドが呼ばれていたのかの情報
下の行のメソッドが上の行のメソッドを呼んでいることを表す
その場合は例外は一番上のjava.net.URLClassloader$1クラスのrunメソッドで投げられた
2006年atex1003第XX回「hoge」(piyopiyo).avi ↑のようなファイル名のファイルが大量に入ったディレクリを引数に指定して、 中のファイル名を第XX回「hoge」.aviにしたいと考え以下のようなものを書いたのですが、 renameToの返却値がfalseになってダメです。 どうしたらちゃんとリネーム出来るのでしょうか?orz public static void main(String [] args) { File dir=new File(args[0]); String[] str=dir.list(); for(int i=0;i<str.length;i++) { File file=new File(args[0]+str[i]); String newfile=new cui().toRenStr(str[i]); System.out.print(file.renameTo(new File(args[0]+"/"+newfile))); } } public String toRenStr(String str) { Pattern pattern = Pattern.compile(".*第"); Matcher matcher = pattern.matcher(str); String renstr = matcher.replaceAll("第"); pattern = Pattern.compile("」.*"); matcher = pattern.matcher(renstr); renstr = matcher.replaceAll("」.avi"); System.out.println(renstr); return renstr; } }
>>94 renameTo()を呼ぶ前に、file.getName()とnew File(args[0]+"/"+newfile).getName()
を表示して確認。
96 :
デフォルトの名無しさん :2008/05/14(水) 20:11:53
質問です。 左右マウスホイールって使えないんですかね? (一般的にはチルトホイールという?) 少し調べたんですけど、全然出てこないですね。
97 :
デフォルトの名無しさん :2008/05/14(水) 20:51:21
JavaでWebサーバを作成中で、POSTリクエストの受付を可能にしようとしています。 POSTのHTTPリクエストは 「ヘッダ部複数行」 1空行 「データ部1行」なので、 BufferedReader br = new BufferedReader (new input StreamReader(socket.getInputStream())); でHTTPリクエストを取得。そのあとに while(br.readLine() != (""){ } String data = br.readLine(); とやれば、データ部をdataに入れられると思ったのですが、 データ部の後ろには改行コードのCRLFがないため、readLineで1行読み込む ことができないようです。同様にread()でもうまくいきません。 どうにかしてデータ部を取得することはできないでしょうか?
>>97 たいていの場合はヘッダにデータ部の長さが入っているので、そのぶん
だけ読めばよろしい。
他、気になるところ:
・HTMLからのフォームPOSTでも、データがMIMEで送られることがあるので、データが1行とは限らない
・データがバイナリのこともあるので、基本的にReader類は使ってはダメ
・chunked-encodingのこともあるので、以下略
private InputStream is; private InputStreamReader in; これらを使って文字列を読んでるんですが、ファイルが終端に達したかを調べる方法ってありますか?
スレチかもしれませんが教えてください。 いまSQL Serverとjavaを繋げる勉強をしています。 INSERTした時間を後で取り出し after()メソッドで比べたいのですが、そういった処理は可能ですか? もし可能なら詳しく教えてください。
System.currentTimeMillis() または System.nanoTime()
104 :
デフォルトの名無しさん :2008/05/15(木) 00:19:56
ガベージコレクションは必要なくなったオブジェクトを自動的に開放してくださるそうですが、ストリームも自動開放してくれるのでしょうか? また、どのタイミングでしてくれるのですか?
しません。
忘れてた。ファイナライザでクローズしちゃだめだよ
ストリームくらいちゃんと閉じろ、馬鹿者
void hoge() { InputStream input = null; try { // 略 } finally input.close(); input = null; // ← } } これが必要か?って話ならばイラネ
無駄にnull突っ込むのはC#でもよく見かけるんだが、何でこんなに 流行しちゃったの?何か歴史的背景とかあんの?
>>103 ちょっと難しそうですけど、ありがとうございました。
>>109 nullを入れたほうがGCの取りこぼしが少ないとか、即座にGCされるから効率的だとか、そういう勝手な思い込みから
input.close(); input = null; System.gc(); しても実際3行目でメモリ解放するかはGCの実装依存なんだよね。
113 :
デフォルトの名無しさん :2008/05/15(木) 11:47:37
バグの原因になるからだよ 処理しないでそのまま流してしまうコードを書くおっちょこちょいが多すぎて コンパイラがデフォでnullを入れてないコードをコンパイルするときにエラーをはくようになった
何言ってんだ?
115 :
デフォルトの名無しさん :2008/05/15(木) 14:52:45
public class A { public static void main(String args[]){ static int i = 0; // int i = 0;ならエラーにならないのはなぜですか?
116 :
デフォルトの名無しさん :2008/05/15(木) 15:10:35
>>115 ローカル変数には static つけられないって言語仕様で決まってるから。
public class A { static int i = 0; public static void main(String args[]){ これならいいんですね。
>>117 それだとiはローカル変数ではなくなる。
staticはインスタンスでなくクラスに属する変数であるという意味だから、
クラスやインスタンス個別でなくスレッドごとに存在しているローカル変数に付けると
意味不明になってしまう。単に、
>>115 でstaticを外したように書けば、
ローカル変数iとして使えるし、コンパイルも通るはず。
それともクラス変数にしようとして書く場所を間違っただけ?
型の静的変換について質問です。 とあるObject型のobj、Sting型のstrがあるとして ((String)obj).charAt(0); str.charAt(0): この二つでは、静的変換が入る上のほうが実行速度にペナルティーがあるのでしょうか? 以前やっていたCではペナルティがなかったと思うのですが、Javaだと「静的型変換に失敗した」という例外を投げてくれるようなので、おそらくなかでチェック機構が働いており、ペナルティがあるかなと思っているのですが
120 :
デフォルトの名無しさん :2008/05/15(木) 17:48:19
>>119 コードや実行環境によるとしか言えない。
例えばループ内で obj が再代入されないなら
JITコンパイラが String tmp = (String)obj; みたいなコードを
ループ外部に作成して、ループ内部では tmp.charAt(0) に変換、
みたいな事をする可能性はある。
121 :
デフォルトの名無しさん :2008/05/15(木) 17:49:55
>>119 あと、(String)obj は動的(実行時)型変換だよ。
静的(コンパイル時)型変換じゃない。
>>120-121 なるほど、最適化されるということは、裏を返せば型変換にはペナルティがあるってことですね。
>あと、(String)obj は動的(実行時)型変換だよ。
たしかに。書き方がCと同じだからって、同じものだとは限らないわけですね。
Javaには静的型変換はないようで。
ありがとうございました。
123 :
デフォルトの名無しさん :2008/05/15(木) 18:15:56
>>118 ありがとうございます。
int変数のiが5なのかを判定したくて
if(i == 5){
と書いてみたのですが、そのif以前にiが初期化されていなかったらiがnullかもしれないから
if(i != null && i == 5){
と書かなくてはならないのか調べたくて
int i;
if(i == 5){
とするとコンパイルできなかったから、
static int i;
if(i == 5){
と書きましたが、これもコンパイル不能でしたが、コンパイラがstaticを
解釈できていないようなメッセージを出しているみたいだったので質問させていただきました。
124 :
デフォルトの名無しさん :2008/05/15(木) 18:17:38
125 :
デフォルトの名無しさん :2008/05/15(木) 18:21:49
>>124 そうですね。nullになりませんが、プリミティプの数値型は0で暗黙の初期化がされるらしいので
int i;
を書いてから、初期化を書かずに
if(i == 0){
を実行して真となることを確認したいのですが、そのようなソースは書けませんか?
126 :
デフォルトの名無しさん :2008/05/15(木) 18:23:40
>>125 ローカル変数は暗黙の初期化はされない。
>>125 書けません。
必ずローカル変数はその値を参照する前に初期化されていることが求められています。
そして、ローカル変数は初期化を省略した際のデフォルト値のようなものはないので、
自分で初期化しなければなりません。
>>125 int i;
と書いただけではiの値は確定していないので必ず初期化が必要。
iに値を代入するのがそんなに面倒?
129 :
デフォルトの名無しさん :2008/05/15(木) 18:29:52
public class A { static int i; public static void main(String args[]){ これならiは暗黙の初期化で0ですね。 ありがとうございました。
なにがやりたいのかわからん ローカル変数とクラス変数では全然意味が違う 暗黙の初期化をしたいがためにローカルなものをフィールドに出したら プログラムそのものの動作が変わってしまうだろ
暗黙の初期化なんて百害あって一利ぐらいだわ。 一般的なJavaプログラミングには必要ない。 むしろプリミティブ型の値範囲と精度に注目して欲しい。
132 :
デフォルトの名無しさん :2008/05/15(木) 19:58:21
なんか、Seasar2っていうのがいいらしい。 おもしろかったらやってみたいんだけど、 家計がしんどいので2000円の本買うのためらってる。 Seasar2っておもしろい??
まず働いて2000円の本位買える家計環境にしよう
134 :
132 :2008/05/15(木) 20:50:48
>>133 働いています><; 一人暮らしでバイクのローンもあるから厳しいんです><; 原付にしときゃよかった><; Seasarのスレがあったのでみたら、閉店するそうなので やめます><;
2,000円の本を買うのためらうくらいならネットで調べろ
JSPでDBとやり取りするドライバ(のようなもの?)のクラスを作っているのですが、判らないことがあります。 ResultSet.nextをコールしないとSQLExceptionがスローされるようなのですが、なぜExceptionになるのでしょうか? statement.excute(SQL文)でSQLのカーソルをSQL文に対応するレコードに移し、 statement.getResultSet()でカーソルの指し示すレコードをResultSetとして渡す。 で、ResultSet.getString()なりなんなりでSQLの中身を取り出す。 複数のレコードを取り出すならばResultSet.next()を使うのが自然だと思うのですが、単独のレコードが期待される場合は使う必要がないのではないでしょうか? excuteじゃなくてexcuteQueryだと違うんでしょうか?
なぜExceptionの詳細を書かないんでしょうか? stacktraceくらい張ったらどうでしょうか?
>>136 ResultSet のカーソルは、初期状態では最初の行の前に位置付けられています。
メソッド next の最初の呼び出しによって、最初の行が現在の行になります。
2 番目の呼び出しによって 2 行目が現在の行になり、以降同様に続きます。
140 :
136 :2008/05/15(木) 22:49:57
英語苦手なんでアレなんですが… ResultSetのカーソル位置が最初0で、受け取ったデータは1から始まるって事でしょうか?
そう
把握しました。ありがとうございます。 <チラ裏> 言えない…ResultSetが単体のレコードを格納すると思ってたなんて言えない… </チラ裏>
Cursorとかいう名前だったらよかったのにな。
145 :
デフォルトの名無しさん :2008/05/16(金) 08:35:28
質問です、文字列からColorクラスに変換することってできないでしょうか?つまり、 String colorname = "red"; のような色名を表す文字列を使って、setBackgroundやsetColorなどのメソッドの引数をつくる方法はないでしょうか? 色名を全部並べてif文とかで条件分岐をすればできるですが、それだととてもコードが長くなってしまうので・・・
>>145 java.awt.Color#getColor(String)
147 :
145 :2008/05/16(金) 09:11:22
>>146 レスありがとうございます。やってみたのですが、たとえば
Color color;
color.getColor("red");
というふうにすると、コンパイルはできるのですが、ちゃんと色が出ませんでした。
redをblueやcyanに変えてみても、同じ黒っぽい色しか出ません。
どうしてなんでしょうか?
APIリファレンスすら読まないから。
149 :
145 :2008/05/16(金) 09:29:15
一応読んではいるのですが・・・
質問です 2次元の配列データを、csvファイルにして(デスクトップなどに)出力したいのですが、どのような方法があるでしょうか。
自前でやるのが面倒なら commons-csv なりなんなり使え。
152 :
150 :2008/05/16(金) 10:32:28
すみません、自前でできる方法をお願いします。
>>147 使い方としては、
Color color = Color.getColor("red");
だけど、ドキュメントを見るとシステムプロパティがどうとか書いてあっ
てよくわからんね。
>>152 自前でやるんなら、自分でCSV書き出すプログラム書くだけだよ。
>>152 for(data[] row : array){
for(data cell :row){
data.toString()と","をファイル出力
}}
>153 それはダメ。 その実体は new Color(int, int, int, int) の引数を結合した数値の文字列表現。 > 指定されたプロパティが見つからない場合、 > ***または整数値として解析できなかった場合***、null が返されます。 >145 の言う「名前から色」というのは、どこかで対応表を持つ必要があるから、 公開ライブラリには向かない、と私は思う。 要は、Map<String, Color> か何かで専門クラスを作りましょう、と。
>>145 javax.swing.txt.html.StyleSheet#stringToColor(String) とか?
159 :
デフォルトの名無しさん :2008/05/16(金) 18:00:57
アプレット初めて半年の初心者なんですが、 JToggleButton();で押下時のボタン色を変えるシンプルな方法はありますか? メソッドをネットで検索しても見つかりませんでしたので、 JToggleButton();を継承して、オーバーライドしたクラスを作ったんですが、 ボタンのイベントの"actionPerformed()"が、使用されるアプリのほうが 自分より早く呼ばれてしまう為、旨くいきませんでした・・・
160 :
デフォルトの名無しさん :2008/05/16(金) 18:05:23
こんな感じで作りました。 public class IToggleButton extends JButton implements ActionListener { private boolean isSelected = false; IToggleButton(String str){ super(str); addActionListener(this); if (this.isSelected) setBackground(Color.pink); else setBackground(null); } public void actionPerformed ( ActionEvent e ) { isSelected = isSelected?false:true; if (isSelected) setBackground(Color.pink); else setBackground(null); } public void setSelected(boolean selected){ this.isSelected = selected; if (this.isSelected) setBackground(Color.pink); else setBackground(null); } public boolean isSelected() { return(this.isSelected); } }
161 :
デフォルトの名無しさん :2008/05/16(金) 19:55:47
プログラミング初心者が最初に行き着く プログラム言語のスレはココですか?
いえいえ、アッセンブラ〜やCを長年経験した上での質問です・・・
163 :
デフォルトの名無しさん :2008/05/16(金) 22:35:26
若い女のプロ意識に脱帽編… 若い女の営業スマイル。よく出せるなと思っていました。 コンビニやスーパーでも俺みたいなきもいおっさんによくこうも にこやかな営業スマイルだせるなと感心しておりました。 こないだ、パチンコ屋に行きました。そこは町の中心部にあり自宅から 4,50分のところです。そこは、衣装もエロチックでミニスカートにスリットなる 切れ目が入っていて、店員さんもなかなかの魅力的な娘が多いです。 それも楽しみにときどきそこの店に行きます。 あまりでないので、自動販売機のところで一服してるとかわいい娘が コーヒーを配っています。あまりこの店までこれないので、ついミニスカートのスリットから見える 太ももを凝視して興奮してしまいました。かなり長い間エロい目つきで見てたはずです。 相手に気づかれました。さすがに、とってもいやな顔されるだろうとおもっていました。 最初はたしかにちょっといやな顔をしましたが、すぐにあのにこやかな営業スマイルにもどりました。 これはびっくりしました。いくら店員とはいえ、俺みたいなもてないブサ男に この場面で営業スマイルとは・・・ 恐れ入りました。パチンコ屋のあの店員。
164 :
163 :2008/05/16(金) 22:36:08
すまん。誤爆った。リロードされたら、プログラム板だった。すまそ。
クライアントの変更要求や追加要求に嫌な顔をして見せる奴は、パチ屋の 女性店員よりプロ意識が低いと言いたいわけですね?わかりますw
166 :
デフォルトの名無しさん :2008/05/16(金) 22:54:26
>>166 「実践的な練習」がどのレベルを指してるのか分かんない。
1.実用的なプログラムを、とりあえず動くレベルで書けるようになりたい。
2.動けばいいレベルなら既に書けるから、より良いコーディングを学びたい。
1なら言語本(Javaそのものを説明してる類の本)はやさしいJava1冊で十分。
それよりも実際に何か書いてみる方に注力して、書きながらその都度必要
な情報を検索する、それでもみつからないなら本を探して買うってやり方の
方が経済的だし効率いい。
言語本を何冊も買うのは意味ないし、言語本を2冊読む時間があるなら1
冊だけ読んでもう1冊読む分の時間で実際にコード書く方が効率いい。
あと、1のレベルに達してない人が2を求めるのは非効率。先ずは1から。
もし2ならJavaの鉄則とJavaの格言は良い本だよ。読みやすいしね。
168 :
デフォルトの名無しさん :2008/05/16(金) 23:27:34
>>167 こんな時間にどうもありがとう!
明日その2冊を立ち読みしてみる
169 :
デフォルトの名無しさん :2008/05/17(土) 00:21:32
初歩的な質問ですみません javaプログラミングをするのに優れたフリーのテキストエディターを教えて下さい。 できれば文字の色を変えてくれて、Tabで列を揃えてくれるやつがいいです。 OSはWindows XPです。 よろしくお願いします。
java.util.Collections#synchronizedList() の使い道(使い方)がわかりません。 java.util.List は同期化されませんが、以下のようにすれば、list はスレッドセーフになって帰ってくるのですよね。 List unsyncList = new ArrayList(); List list = Collections.synchronizedList(unsyncList); ○質問1: マルチスレッド環境において、 Collections#synchronizedList() が返した list に対しては、 synchronized ブロックでくくらずに add() や get() しても、スレッドセーフが保たれるという理解でよいですか? ○質問2: javadoc の Collections#synchronizedList() のところに、 以下のように書いてあるのが気になります。 >返されたリストの繰り返し処理を行う場合、ユーザは、次に示すように手動で同期をとる必要があります。 > >List list = Collections.synchronizedList(new ArrayList()); > ... >synchronized(list) { > Iterator i = list.iterator(); // Must be in synchronized block > while (i.hasNext()) > foo(i.next()); >} >これを行わない場合、動作は保証されません。 これは、list の add() や get() は質問1:で同期化されるようになったが、 list.iterator() が返すイテレータへのアクセスは同期化されていないので、 イテレータでグルグルまわすときは、synchronized 文で自分で同期化してね、という理解でよいでしょうか?
>>169 いくつもあるし相性があるって人もいるので、
ぐぐって出てきたのを使ってみれば?
あるいはEclipse、NetBeans等の統合開発環境とか
文法ミスを指摘してくれたり、デバッグ用の機能がそろってたりと何かと便利
大規模な開発にも耐えうるし、ひとつ持っておくのをお勧めする
172 :
デフォルトの名無しさん :2008/05/17(土) 00:48:44
>>171 なるほど、ありがとうございます。
早速ぐぐってみます。
>>168 Effective Javaがいいよ!
>>170 sync-List は、単にsynchronizedメソッドでラップされたインスタンスを提供してるだけ。
必要とされる同期化の手続きが、著しく改善されるわけではない。
iterator で返されるインスタンスは、ラップされたものとは違うので、
生成前に必要な手続きを行う必要がある。
>>170 >質問1
はい。
ただし、例えば以下のようなことをしたい場合は、containsやaddがそれぞれ単体で同期されてても
間に割り込まれる可能性があるので、全体をsynchronizedで囲まないと望む結果にはならない。
if ( list.contains(x) == false ) list.add(x);
>質問2
はい。
どのみち、iterator、hasNext、nextをそれぞれ単体で同期したところで、
間にaddが割り込まれたらConcurrentModificationExceptionが起きるから、使い物にならないと思う。
ところで、CopyOnWriteArrayListという便利なものもあるよ。
状況によってはおすすめ。
>>145 Color c = (Color)Color.class.getField(colorname).get(null);
要try-catch
177 :
デフォルトの名無しさん :2008/05/17(土) 07:49:46
JSPの質問なのですが、ここでしてもいいものでしょうか? スレ違いなら誘導をお願いします。 DBから読み込んだ内容をテーブルとして表示し、レコードごとにボタンを置いて押すとそのレコードの詳細を表示するものを作っています。 レコードをテーブル表示するのはwhile(ResultSet.next())で<tr>〜</tr>を繰り返して実現できそうなのですが、詳細を表示するボタンに迷っています。 というのも渡すパラメータが10個あり、しかもそのうち9つがレコードの内容に依存しない共通の項目です。 ボタン一つ一つにformを作ってhiddenで10個のパラメータを付加してwhileで回すのも考えたのですが、例えば20個のレコードに対して200のhiddenが生成されるのはいかがなものかと他の手段を探しています。 buttonを押したときにonclickで遷移することも考えましたが、buttonに直接パラメータを付加できる属性はないものでしょうか?
178 :
デフォルトの名無しさん :2008/05/17(土) 08:27:13
HTML(リンク)からJAVAサーブレットに情報を与えるにはどうすればいいのでしょうか。 リンク"A href=恐らくdoPostの値></A"で データをJAVAサーブレットに送信したいのですが方法がわかりません。 リンクにdoPostの情報を与えるのもわかりませんがリンクからの情報をサーブレットに値を与えデータを返す方法もわかりません。 本にも載ってないのでどうすればいいかわかりません、教えて君になってしまいますがよろしくお願いします。
179 :
178 :2008/05/17(土) 08:52:14
すみませんdoPostのところはdoGetです。
180 :
デフォルトの名無しさん :2008/05/17(土) 09:55:43
質問です。 現場のソースで、 List list = new ArrayList();と記述し、ArrayListのメソッドを 使っているソースを見かけたのですが、 ArrayList list = new ArrayList()とのメリット上での差異が分りません。 良い点があるから、List list = new ArrayList();と記述するのでしょうが、 その良い点が分りません。よろしくお願いします。 一応、sjc-p1.4の資格は持っていて、SJCPに合格するだけのインターフェースの知識は あります。
どっちかというとHTMLの話になるわな。 そもそも、一覧から詳細にいくのに10個もパラメータいらんだろ? なんかおかしな設計ではないのか? POSTで送信する(Formを使用する)場合、 >9つがレコードの内容に依存しない共通の項目 レコード(繰り返し処理)の外側に配置すればいい 各列のハイパーリンクをクリックしたならば、JavaScriptで各行のキーをhidden項目に設定。 その後、隠しボタンにした「詳細」ボタンをJavaScriptでクリック ってのが1つの方法。 詳細がボタンであっても同様。 GETでいいならば、URLのパラメータに10個のパラメータを付ければいい。 POST/GETとFORMあたりがよく解っていないならば、まずはHTTPの勉強を汁。
>>180 ぶっちゃけて言えば、半端な知識のマが書いた中途半端なコードなだけ。
意図としてはListで定義されているメソッドしかlist変数では使えないって効果しかない。
これがメリットとなるか?というならば、ほとんどの場合は否。
これがメリットとなるケースは、一般的にいって定義されたクラス外からlistの参照を持つ場合。
つまり、あるクラスのフィールドとして、
private final ArrayList list = new ArrayList();
と書いてあっても、
public List getList() {
return list;
}
とアクセサを定義しておけば、
private final List list = new ArrayList();
とする必要は(ほとんど)ない。
クラス内でArrayListをLinkedListに変更したり、配列に変更しても、List getList()さえ仕様通りの動きをすればいいわけだ。
ローカル変数でやるならばもっと意味はない。
あと、当然な話だけど、List list = new ArrayList();と書くよりもArrayList list = new ArrayList()と書くほうが、実装上の選択(メソッド)は増える。 極端な話、LinkedListなんて専用メソッドを活用しなきゃいらない子。
184 :
デフォルトの名無しさん :2008/05/17(土) 10:25:11
質問です。 swingでゲームを作ろうとして勉強しているものです ゲーム中(ループ中)にJPanelを実装したクラスのコンストラクタでボタンを配置 別スレッドでループ処理する。このときアクティブレンダリングして描画命令 してるのですが、なぜかボタン隠れた状態で更新されてしまいます。 下にコードを書きますので、どなたかご教授ください
>>180 「選択肢があるなら、抽象データ型を使え」という指針がある
Listとおけば実装の詳細がより隠蔽される
例えば実装を交換したいという状況になっても、new ArrayList();の部分だけを取り替えてやればいい
・・・・一応、理論上はそういうことになってるようなのだが、
listのスコープが狭い場合はデメリットにしかならんような?使えるメソッド減るし
186 :
デフォルトの名無しさん :2008/05/17(土) 10:26:48
//必要パッケージをインポート import java.awt.*; import javax.swing.*; /***************************************** * パネルクラス(中間コンテナ) * *****************************************/ class MainPanel extends JPanel implements Runnable{ //パネルサイズ public static final int WIDTH = 500; public static final int HEIGHT = 500; private Thread thread; //コンストラクタ public MainPanel(){ //サイズの設定 setPreferredSize(new Dimension(WIDTH,HEIGHT)); thread = new Thread(this); thread.start(); JButton btn = new JButton("OK"); add(btn); }
187 :
デフォルトの名無しさん :2008/05/17(土) 10:28:14
//ゲームループ public void run(){ while(true){ SwingUtilities.invokeLater(new Runnable() { public void run() { gameRender(); paintScreen(); } }); try{ Thread.sleep(200); }catch(InterruptedException e){ e.printStackTrace(); } } }
188 :
デフォルトの名無しさん :2008/05/17(土) 10:29:03
/*** ダブルバッファリング ***/ // ダブルバッファリング用 private Graphics dbg; private Image dbImage = null; //バッファにレンタリング public void gameRender(){ //初回時の呼び出しならばダブルバッファリング用のオブジェクト作成 if(dbImage==null){ //バッファイメージの作成(領域) dbImage = createImage(WIDTH,HEIGHT); if(dbImage==null){ System.out.println("no dbimage obj!"); return; }else{ //バッファイメージに図や画像を書き込むために必要なGraphicsオブジェクトも作っておく dbg = dbImage.getGraphics(); } } //バッファをクリアする dbg.setColor(Color.WHITE); dbg.fillRect(0, 0, WIDTH, HEIGHT); }
189 :
デフォルトの名無しさん :2008/05/17(土) 10:29:39
//バッファの内容を画面に転写 public void paintScreen(){ try{ Graphics g = getGraphics(); if(g!=null && dbImage!=null){ //バッファイメージを画面に描画 g.drawImage(dbImage,0,0,null); } //システムのtoolkitオブジェクトを返し、画面を強制的に更新させる Toolkit.getDefaultToolkit().sync(); if(g!=null){ //グラフィックオブジェクトの破棄 g.dispose(); } }catch(Exception e){ e.printStackTrace(); } } }
190 :
デフォルトの名無しさん :2008/05/17(土) 10:33:02
public class MPN extends JFrame{ //コンストラクタ public MPN(){ //タイトル setTitle("ウィンドウ"); setResizable(false); //ContentPaneにパネルを貼り付ける MainPanel panel = new MainPanel(); Container contentpane = getContentPane(); contentpane.add(panel); //フレームサイズをパネルに合わせて設定 pack(); } private static void createFrame(){ MPN game = new MPN(); game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); game.setLocationRelativeTo(null); game.setVisible(true); } public static void main(String[] args) { //イベントディスパッチスレッドにフレームを作成させる SwingUtilities.invokeLater(new Runnable() { public void run() { createFrame(); } }); } }
191 :
デフォルトの名無しさん :2008/05/17(土) 10:35:21
上記ソースを投稿したものです。 長くなりすみません。 どうもダブルバッファリングするとボタンがうまく配置しません。 paintComponentメソッドを使った描画処理ではうまくいきました。
>>180 trimToSize() も clone() も使う必要ない場合だと、5文字削れてラッキーとか。
メソッド境界以外では抽象型に拘る必要がないってのもわかるけど、
ArrayList と List にも拘るほど違いないから、ぶっちゃけどうでもいい。
自分でボタンを描画したいの? それとも親(JPanel)にボタンを描画させたいの?
>>180 俺は、後でプロファイルを取ってListの実装を最適化する予定の時、よくそう書いておく
195 :
デフォルトの名無しさん :2008/05/17(土) 12:03:04
>>193 JPanelに描画させたいっす。
コンストラクタでやってるように
なのになぜか裏にいってしまうんだああああ!なぜだあああ!
dbImageのgraphicsを取得してJButtonのpaintに渡してdbImageにボタンを書き込む dbImageを描画した後にrepaintして親を再描画させる 適当に考えてみたので見当違いだったらごめん
197 :
186 :2008/05/17(土) 12:44:26
パネルにボタンを配置したあと パネル上に描画処理をほどこすと、かぶるものなのでしょうか ダブルバッファ処理をしないでpaintComponentを使った描画はかさならず描画されました ダブルバッファ処理は別スレッド処理なのでイベントディスパッチスレッドで 処理させているのですが、そこらへんがおかしいのでしょうか うむうむ・・・・
ダブルバッファリングって書いてあるけど、バッファ1つだけじゃん……
199 :
186 :2008/05/17(土) 13:07:34
>>188 描画する領域と、描画する前のサブ領域でダブルバッファリングでは?
参考サイトにはそうかいてあった
>>199 その参考サイトが間違ってるだけじゃね?
例えば、そのプログラムだと gameRender() と paintScreen() を
マルチスレッドで並列動作させたらチラつくでしょ。
チラつかないようにgameRender() が使う描画用の領域と、
paintScreen() が使う、既に描画完了してる表示用の領域と
二つ持つのがダブルバッファリング。
paintScreen() 相当の処理が十分速ければダブルでいいけど、
遅い場合はトリプルバッファリングが必要になったりする。
まぁ、いまどきは Window#createBufferStrategy() 使えば済む話だから
自前でダブルバッファリングする必要はあんましないはず。
JtextAreaに対して入力キー制限したいです つまり、左右方向キーは入力を受け付けて上下方向キーは無視、のような ただJtextAreaに直接KeyEentリスナーを加えてもダメみたいだたし 何かいい方法があればご教示下さい
202 :
201 :2008/05/17(土) 14:26:47
言葉足らずだったので補足します 左右キーでカーソルを左右に移動、上下キーでは何も処理をいない、 というテキストアリアを実現したいと考えています
コンポーネントは描画されて表示している部品だから その上から塗りつぶしたら見えなくなるよ
>>201 何が真っ先に呼ばれるんだろう
protected void processKeyEvent(KeyEvent e)かな・・・自信ない
上手くいったら報告プリーズ
205 :
186 :2008/05/17(土) 14:49:13
>>203 ありがとうございます。
とすると、上のコードではどうなるのでしょうか
私も考えているのですがいまいち・・知識がたらず・・すみません
C:\MixIDE-1.4rc6>java -jar MixIDE.jar Exception in thread "main" java.lang.UnsupportedClassVersionError: mix/ide/MixID E (Unsupported major.minor version 50.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source)
207 :
206 :2008/05/17(土) 14:57:03
間違って、送信してしまったorz
javaのプログラムをコンパイルしたいのですが・・・
http://mixide.sourceforge.net/ mixideというプログラムです
jar形式で配布されてるので、それをcmdで実行すると
C:\MixIDE-1.4rc6>java -jar MixIDE.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: mix/ide/MixID
E (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
となってしまいます・・・アドバイスください
gameRenderの dbImage = createImage(WIDTH,HEIGHT); 以降で自身にaddされたコンポーネントを自分で描画する
>>201 Keymap 使って、VK_UP や VK_DOWN に何もしない Action を結び付けてみるとか。
TextAction noaction = new TextAction("noaction") { public void actionPerformed(ActionEvent e){} };
textarea.getKeymap().addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), noaction);
>>204 本当ありがとう、processKeyEventメソッドを
オーバライドしてやったら上手くいったよ
昨日1日奮闘してダメだったことを30分で解決してくれるとは、、
もっと精進せねば
211 :
201 :2008/05/17(土) 15:15:27
>>209 Keymapなんて使ったことなかったので勉強になります
この方法でも上手くいきました。ありがとうございます
212 :
186 :2008/05/17(土) 15:41:54
>>208 なるほどなるほど。
画面に描画するときに一緒に描画するんですね
ボタンのようなコンポーネントの描画に関してちょっと知識不足です
ぱねるにaddすればはりつけられることはわかっているのですが
一緒に描画というところがまだわかりません
自分で調べてみますが、よろしかったらご教授お願いします!
213 :
180 :2008/05/17(土) 15:50:16
>>182 ,185
質問に答えていただいてありがとうございます。
以下のプログラムで「booleanの結果を戻す必要があります」と コンパイルエラーがでるんですが、なぜでしょうか?? returnでbooleanを返してるんですが??? tryの外からbooleanを返すとうまくいくのですが、何故なのか理由がよくわかりません。 public boolean DBDelete(int formVal[]) { try { Connection con = getConnection(); Statement smt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE); ResultSet rs = smt.executeQuery("SELECT * from kyuuyo WHERE 社員番号="+formVal[1]); if (rs.next()) { if (rs.getInt("社員番号")==formVal[1]) { rs.deleteRow(); return true; } else { System.out.println("該当する社員番号がありません"); return false; } } } catch(Exception e) { e.printStackTrace(); } }
>>214 全てのケースにおいて return するか例外投げるかしないとダメ。
具体的には rs.next() が true にならないケースと、
catch(Exception e) で例外捕捉したケースが漏れてる。
booleanの結果を戻すか、例外投げる必要がある。
KeyMapを使うのと、InputMap + ActionMapを使うのはどっちがいいんだろ。 KeyStroke a = KeyStroke.getKeyStroke("ctrl A"); for (InputMap im = t.getInputMap(); im != null; im = im.getParent()) { im.remove(a); } とか。
218 :
214 :2008/05/17(土) 16:44:04
>>215 あ、catchにもreturn書かないといけないんですね
なるほど!ありがとうございました!!
>>218 if (rs.next()) {
}
//ここじゃね?
221 :
214 :2008/05/17(土) 17:40:53
例外の握りつぶしでググレ
>>180 List list = new ArrayList();
は、List としての機能が必要だが、インスタンスを生成するには具象クラスが必要なので
とりあえずArrayList を使ったということ。
すなわち、それ以降は単に List の機能が必要なだけという、
プログラムの書き手から読み手への強い意思表示が含まれている。
これを、半端な知識のマと言ってしまうと、書き手は哀れw
>>223 無駄に短いスコープで抽象化するのは俺も反対だな
そもそもListに関して言えば、何も考えずにgetListとか作る方が問題となるわけで。
225 :
186 :2008/05/17(土) 19:10:01
>>186 のコードのものです
gameRenderの
dbImage = createImage(WIDTH,HEIGHT);
以降で自身にaddされたコンポーネントを自分で描画する
とアドバイスをいただいたのですが、まだ理解できずボタンが隠れてしまします
gameRender内でaddで追加してもだめでした。
どなたかご教授お願いします
最初に具象クラスで書いておいて 「お、ここ、List で十分じゃん」と書き換えるのは抽象化って感じだけど、 List でロジック組んでみたけど、その List のインスタンスも生成しなくちゃならない というような場合は、むしろ具象化って呼ぶのが適当じゃね? (そもそも、はなっから List でなく ArrayList で考えるような場合がどれだけあるのだろうか) そのような場合、生成部分は仕方ないけどそれ以外を わざわざ List から ArrayList へ置き換えてやる必要があるのかどうか。 いくらスコープが狭くても面倒だし
227 :
デフォルトの名無しさん :2008/05/17(土) 19:21:18
eqlipseのページからEMF build 2.2.0が落とせない どこか落とせるところ無いですか?
228 :
227 :2008/05/17(土) 19:36:02
お騒がせしました、できました。
button.paint(dbg)
230 :
186 :2008/05/17(土) 19:47:52
>>226 むしろ最初からListではなくArrayListで考えれば充分で、Listとして考える必要もないような気がする。
>生成部分は仕方ないけどそれ以外をわざわざ List から ArrayList へ置き換えてやる
宣言と初期化は普通は同時に行うわけで、書き換える必要もないと思うけど?
233 :
186 :2008/05/17(土) 20:13:31
>>229 ボタン表示ができたのですが、ボタンとしての機能がなくなっていました!
コンストラクタでボタンをADDで貼り付けて、別スレッドでpaintで描画した結果、
addで貼り付けたボタンは結局うしろにいって、paintで描画したボタン(ボタンとしての機能なし)
が画面はじにでるだけでした!
こういうものなのでしょうか?
そりゃ下のコンポーネントにボタン置いてその上のコンポーネントにボタンのグラフィック描画しただけだから クリックしたイベントが伝達されてないだけだと思う。 設計が悪い。
ボタンが押されたら押された状態を描画すればいい バッファイメージを自分で作るってのはそういう事だよ。 ゲームなんだよね? JButton使わずにパネル上のマウス位置とマウスイベントを拾ってボタンは画像にしたらどうだろう。
>>232 それは順序が逆だ。使う側が必要とするのは本来はListという概念を実現している何かであって、その実現手段は知ったこっちゃない。
しかし、Listの実体を生成するためには、具体的なモノを明示的に指定する必要があって、諸々の取捨選択の結果としてArrayListを用いることになるわけだ。
だから、ListでなくArrayListを型として用いるということは、利用側が必要としているのは「Listを実現した何か」ではなく「ArrayListという実装」である、という意志の表明になる。
>>232 まあ、どうでもいいんだけど
例えば、本来、ローカル変数で十分なところに(ループのイテレータとか)フィールドを割り当ててて、
「できることが多いからいいじゃないか」
「クラスの外からは隠蔽されているからいいじゃないか」
「最初からフィールド変数で考えれば十分じゃないか」
と言われるくらい気持ち悪い(※)
ましてや、これを、
「イテレータにフィールド変数を使わないのは、半端な知識がマが書いた云々」
とか非難され始めたら、ちょっと一言いいたくなる。
(※)それぞれ、以下から脳内変換
「ArrayList は List よりメソッドが多いからいいじゃないか」
「外向けのメソッドをつくる場合に、List にすればいいじゃないか」
「最初から ArrayList で考えれば十分じゃないか」
>>生成部分は仕方ないけどそれ以外をわざわざ List から ArrayList へ置き換えてやる
>宣言と初期化は普通は同時に行うわけで、書き換える必要もないと思うけど?
考えてみれば、仮引数とかに使うとかしなければ、そうそう必要ないねぇ。
でも、まあ、人間の頭の中では List を操作しているつもりなのに、
プログラムの中では操作している変数は ArrayList である
という剥離は気持ち悪い。プログラムは、人間が読むためのドキュメントであるべきなのだから。
>>236 その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
現実ではListとして考える≒ArrayList、諸所の取捨選択なんてほとんどない。
メソッド内とかクラス内で閉じるものに対して、「使う側」を意識するんか?
実体をつくるのも使うのも自分だろ。
そりゃ外部とのインターフェイスとしてはListが望ましいけどね。
まあどっちでもいいと思うのは確か Listでも構わんし、ArrayListでも気持ち悪くもない。 >232も必要がないとしか言ってないわけでどっちでもいい的立場なんじゃね?
>>238 > その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
ある意味yes. 実装レベルでclassとinterfaceに分離するか否かは、モノの性質、作業工数、管理工数などを考慮して決めるけど。
あと、「使う側」って言うのは「List/ArrayListを使用しているコード」のこと。
それから、「表明」する主語は「コードを書いた人」で、「表明」している先は「そのコードを読むモノ(人だけじゃなくコンパイラも含む)」のこと。
つまり、List でなく ArrayList と書いたなら、そのソースコードを書いた人はそれを読むモノに対して、「ここでは (List ではなく) ArrayList である必要があるのだ」と主張しているのに等しい。
241 :
177 :2008/05/17(土) 22:46:21
>>181 確かに詳細にいくだけならプライマリキーを渡せばいいのですが、
詳細からまた一覧に戻ってくる際に同じ条件で検索する必要があるので一覧画面が受け取ったパラメータをまるまる渡してやらなければいかんのです…
ユーザインターフェスはformとボタンを使用する事を考えています。
コードとしては
<table>
<% while(ResultSet.next()){ %>
<tr><td>-----テーブル内容-----</td><td><form action="URL" method="POST"><--hiddonいっぱいとsubmit--></form></tr>
<% } %>
というのが思いついてはいるのですが、それだと生成されるレコードごとにhiddonがたくさん書き込まれてしまうなぁと思いまして…bottunタグにパラメータを埋め込めたら便利なんだけどなぁと思っているのですが…
242 :
177 :2008/05/17(土) 22:47:30
hiddenのスペル間違えてる…お恥ずかしい…
>>241 行ごとにformを作るな、ページに1つでいいだろ
どこまでも検索条件を持ちまわすのか?
検索条件が増えたとき困らないか?
なんでもセッションに値を突っ込むのは奨励されないが、2画面以上遷移して値を保持しなければならない場合、セッションに積んだ方がいい。
244 :
デフォルトの名無しさん :2008/05/17(土) 23:04:57
List と ArrayList だとわかりにくいかもしれないけど、 Map と Hashmap では、体感しやすい経験があった。 最初のソース: マスタ取得部品みたいなクラスがあって、 Hashmap map = new Hashmap(); で定義されていて、この map オブジェクトを外部からさわれるようになっている。 当然、呼び側からは Hashmap 型でアクセスしていた。 後日、Map の一覧をソートされた状態で表示する必要が発生し、Treemap に変えたくなった。 けれども呼び側では、すべて Hashmap にしているため、呼び側を、結局 Map で 取得するよう、すべて書き換えた。 部品側は、Map map = new Treemap(); にしておしまい。 こういうことがあると、呼び出し側ではインターフェースで取得すべきと思うようになった。 List においても、後日データ量が増えた、チューニングの問題で、ArrayList から LinkedList に変えたくなった ときに、呼び出し側は List にしておけば、部品側だけの修正ですむと思うのだけど。
いがぴょんに聞けば良いじゃん。 ま、現状だと資料とか実装例とか豊富なaxis2でいいと思う。 チャレンジャーならばJAX-WS使ってみれば?
>245 問題は「当然、呼び側からは HashMap 型でアクセスしていた」ところ
248 :
244 :2008/05/17(土) 23:19:44
249 :
245 :2008/05/17(土) 23:20:49
>>247 その部品は、以下のようなメソッドが外部向けに定義されていた。
public Hashmap getMasterMap() { }
たしかにこのままでも、呼び側は Map map = HogeUtil.getMasterMap();
すればよかったんだけど、Javadoc に返却値の型が Hashmap と書かれていたので、
みんな Hashmap 型で取得していたよ。
ちげーよw × public HashMap getMasterMap() { } ○ public Map getMasterMap() { } あとHashMapだよ、Hashmapはないわ
>>243 ページに一つでformにしたいんですが、複数のSubmitを作ったら全部のHiddenを渡してしまうのが…というのが悩みでして。
submitを押したときに特定のパラメータを渡す動作をsubmitの中に書ければいいのですが…
検索条件は検索結果と詳細の間だけで持ちまわす物です。
普通は悩まない
254 :
170 :2008/05/17(土) 23:49:21
>>174-175 レスどうもありがとうございます。
より詳しく理解できました(とくに
>>175 の前半)
いま、マルチスレッドとパフォーマンスについて勉強していて、
(Map のほうが今の仕事に必要なのですが、
>>170 は、わかりやすくするために List で質問しました)
Hashtable - Hashmap - ConcurentHashMap
にたどりつきました。
CopyOnWriteArrayList も、同じ java.util.concurrent パッケージですが、
copyOnWriteArrayList の javadoc をみると、ArrayList のスレッドセーフなもの、とあります。
なんで CopyOn・・・なのかわからない。
CopyOnWriteArrayList は、変更時にコピーを作るとあるが、ふつうの ArrayList は、
そうじゃないときにもコピーを作るということ?
また、なぜ「変更時にコピーを作る」がスレッドセーフに寄与するのか?
255 :
デフォルトの名無しさん :2008/05/17(土) 23:51:14
やさしいJavaの本理解したら、会社で通用する?
>>252 JavaScript使って問題ないなら、
・必要なパラメータはhiddenで1組分だけ用意する。
・submitボタンは使わない。
・onClickハンドラで、hiddenのパラメータを書き換えてsubmit。
やさしいJavaの本理解したら、会社で通用しないことが理解できる
>>256 なるほど、
<Button onClick="">をwhileの中に入れて、JavaScriptの関数の中でhiddenを書き換えて渡せばいいということですね。
関数の引数で書き換えるデータは渡せそうだし、あとはhiddenの書き換えをどう実現するかですね。もしくは関数の中でパラメータを渡す処理をしても同じ動作いけそうです。
この路線で調べながらやってみます。ありがとうございました。
>>254 普通のArrayListは、サイズがキャパシティよりも増えるときにしかコピーはしない。
同じ配列を操作するので、複数のスレッドから同時にアクセスすると危険。
CopyOnWriteArrayListは、いかなる変更操作を行うときも元の配列のコピーを作ってそっちを操作し、最後に参照先を指し替える。
元の配列は決していじらずに捨て置くので、iteratorは変更操作に影響されず古いものを参照し続けることができるし、getなどの取得操作も影響を受けない。
変更操作同士は衝突することになるが、参照先の指し替えをAtomicReference#compareAndSetで実行し、失敗したら最初から(コピーを作るところから)やり直す、という方法でスレッドセーフを実現している。
>>254 てか、その辺のクラスでスレッドセーフを保証するよりも、Mapを持つクラスを作ってそのクラスが同期制御を管理する方が良い。
どんだけ排他制御が利いたMapにしたところで、Mapの参照を公開してしまうと一気に制御が難しくなる。
逆にHashMapでもあるクラスから外に参照を渡さず、HashMapにアクセスする公開メソッドの同期とれば良い。
並行処理の話ならば新APIの件もあるから、Java並行処理プログラミングって本を読むと良いよ。
Win98SEでjavaの勉強をしてるんだけど、コマンドプロンプトをもっと簡単に入力できるようにする設定方法を教えて 会社のPCだと「↑」キーで今まで入力したコマンドやファイル名を20個ぐらい出せるのに、家のPCだと会社と同じWin98SEなのにできない 「→」キーを押したら直前の入力だけなぞれるけど不便過ぎて困ってる
262 :
170 :2008/05/18(日) 00:51:41
レスどうもありがとうございます。
>>259 なるほど、 CopyOnWriteArrayList の仕組みとメリットが理解できました。
ということは、あるスレッド(A)が CopyOnWriteArrayList#iterator で
iteratorを取得し、それをずーっと保持するとしたら、別スレッド(B)が add() しても、
スレッド(A)が保持する iterator の中身は、スレッド(B)が add() する前の List の内容の
参照を持っているわけですね。なんか DB の分離レベルの話みたいだな。
>>260 Map ですが、実際の現場では Map オブジェクトをそのまま外部にさらすことは無いと思いますが、
(map = null で消されたらお終いだし)
・ラップするクラスを作り、map は private にする
・ラップするクラスには、put と get のメソッドを作る
このとき、map の実装を
・Hashtable にすると、get もロックがかかるので、
・HashMap にしておき、ラッパクラスの put メソッドは、内部で synchronized (myMap) { } ブロックで囲み、
get メソッドは synchronized をつけなければ、取得時の同時並行性は確保できると思いました。
・でもこの場合、Map の実装を ConcurrentHashMap にして、put メソッドの synchronized を
はずしても同じなのでは、と考えました。
多分その先は Java並行処理プログラミング を読め、って感じだと思うので、読んでみる事にします。
新APIとは、J2SE5 で導入された、java.util.concurrent.* のことですか?
263 :
261 :2008/05/18(日) 01:21:29
doskeyで自己解決できた 下らない質問すんませんでした
>>260 >・ラップするクラスには、put と get のメソッドを作る
putとgetだけを提供する場合、
>if ( list.contains(x) == false ) list.add(x);
のような問題は相変わらず回避できないことに注意。
まぁ用途次第かもしれないので、わかってればかまわない。
>・HashMap にしておき、ラッパクラスの put メソッドは、内部で synchronized (myMap) { } ブロックで囲み、
>get メソッドは synchronized をつけなければ、取得時の同時並行性は確保できると思いました。
それはだめ。
変更(put)中のデータを参照(get)すると不正な結果を得たり死んだりする可能性がある。
もっと不可解なことが起きる可能性もあるけど、詳細は件の本でも読んでください。
要するにgetにもsynchronizedは必要。
同期の対象がMap1個で済む状況なら、ConcurrentHashMapは便利。
2個以上のMapを同時に更新しなければならない場合とかには無力。
>>262 やっぱり理解不足。
putもgetもsynchronized (myMap) { } にしておく、が正解。
getだからといってつけないと、痛い目にあう(ヒント:Atomic性)
>Map の実装を ConcurrentHashMap にする
正しいといえば正しい。
だけど、並行処理で品質を高めるには1箇所で必要最低限の同期を取るのがポイント。
例えばMapとなにか別の要素もあわせて同期を取りたいとする。
すると、Mapで同期をとってさらにラップクラスで同期を調整して・・・と複雑になる。
そんな場合は同期を取るクラスは1箇所にしたほうが楽。
また、全てのメソッドを同期を取る必要があるか?という点も重要。
とはいえ、そのような要素がなければ簡単に実現できるConcurrentHashMap を使うのは正しい(シンプルこそ正義)。
予断だが、外部にさらしてもmap = null では何の影響もないぞw
map.clear() 等はマズイのでオシマイには変わらないけど。
もろに被ったな、読み比べて補完してくれw
267 :
170 :2008/05/18(日) 01:51:25
>>264-265 レスどうもありがとうございます。
理解したつもりが理解不足といわれて&レスの内容をみて、自分のレベルの低さを実感しました。
>>264 で、put だけを synchronized にしても、
ラッパクラスで contains() も提供した場合、contains() と put は同期化されないことを理解しました。
あと、get と put の atomic 性というのも理解しました(つもりです)
>>265 さんの、ロック処理はシンプルに、というのも、以前不必要に synchronized をつけまくって
パフォーマンスを落としたことがあるので実感したことがあります。
どこを同期化して、どこは不要化、というのが大切ですね。
今回の複数の Map をスレッドセーフに更新するというのは、DB の複数テーブルを更新する際に
どこからどこまでを transaction にするか、と似ています(マルチスレッドと同期化、とは違うけど)
もっと勉強します。
>>267 >以前不必要に synchronized をつけまくってパフォーマンスを落としたことが
Java 6 からVMの改良でsynchronized自体のパフォーマンスが上がってるので、
もしかしたら許容範囲になってるかもしれない (なってないかもしれない)。
不必要なsynchronizedを付けないに越したことはないけれど、
必要なsynchronizedを付け忘れてバグるよりはマシ、と思う。
synchronizedを外す (あるいは付けずに済まそうと企む) ときは、慎重に。
get で重要なのは(まあどっちも重要だが)原子性より可視性だろ。 VMの最適化で、まだ変数に入れてない値が既に他のスレッドから見えるとか、 そんな奇妙なことが起こりうる。 同期化によるパフォーマンスの劣化は、スレッド間の競合が起こる場合に著しい。 競合で生じるコンテキストスイッチのオーバヘッドは大きく その場でオブジェクト100個作ってもお釣りが来る。 synchronized 自身は、それほど重くはない。 「Java並行処理プログラミング」は誤訳が酷いね。訳本はみんなそうなのかもしれないけど。 特に最後の happens-before の説明、なんじゃありゃ? 半順序を定義しているだけなのに、ご丁寧に余計な脳内補完をしてる。 意味の通じないロジックや日本語が書いてあったら、無視するか原本を見た方がいい。 英語ができるなら、原本を読んだ方がいいのは言うにあらず
> 英語ができるなら、原本を読んだ方がいいのは言うにあらず 最後の一文が……
翻訳が〜ってのは解らないでもないが、英語が読めてもスラスラと読める人間は少ないわけで。 非難するならお前が翻訳しろと。
いや、普通の感想だろw 金出して買ったものが酷いもんだったら文句いう権利はある。
Rubyで書かれたクラスを利用したいのですが、どうしたらよいでしょうか?
JRubyの存在をすっかり忘れてました とりあえずはなんとかなりそうです ありがとうございました
>>277 API docs をちゃんと読んでください。特に java.awt.Graphics を。
279 :
170 :2008/05/19(月) 02:20:36
>>268-273 レスどうもありがとうございます。
>>273 の URL とか、「Java並行処理プログラミング」を呼んで勉強します。
これまでのいただいた情報を理解するのに精一杯で、しばらくここに質問をする
ことはないと思いますが、ひとまずお礼させていただきます。
280 :
デフォルトの名無しさん :2008/05/19(月) 07:51:52
JAVAを勉強中の者です。 GUIを使ったサンプルコードで、 final JLabel label=new JLabel(""); というようにlabelやTextFieldにfinalとついているものがありました。 このfinalというのはどういう意味合いでくっついているんでしょうか? フィールドにfinalが付いている場合は「変更できない」ということですよね。 私が見たサンプルコードだとfinalのついたlabelやTextFieldは表示内容を変更したりしているので、 「変更できない」というのとは違う意味でくっついてるのかなと思ったのですが・・・
>>280 final ついてたら単に再代入不可能なだけ。
Mutableなオブジェクトなら状態は変更できる。
>>280 final の上書き(再代入)はコンパイルエラーになるので、コーディングミスを減らせる。
メソッド引数やローカル変数にも適用でき、上書き禁止を明示することができる。
クラスやメソッドに適用しても、上書き禁止(継承禁止)の意味になる。
メソッド内で生成したクラスからの参照を保証する為に、当該ローカル変数を final にすることも。
ぐち。 クラスをfinalにするとユニットテストが書きにくくて困る。
そりゃそうだろうな
285 :
デフォルトの名無しさん :2008/05/19(月) 13:11:07
javaで作るゲームの本に、vistaでゲームを作るとき1/60秒に一回書き換える ループを作ると誤差がでるから1/10秒で書き換えなさいとか書いてあるけど 1/10秒はカクカクして嫌なので、誤差を出ないように1/60秒で書き換えたいのです。 それなので、そのループを教えてください。
286 :
280 :2008/05/19(月) 13:11:24
>>281-283 レスありがとうございます。
代入と状態の変更をごっちゃにしてしまっていたということなんですね。
すっきりしました!
どうもありがとうございました。
腹が減っていたらどうぞ
すみません。質問させてください。 コマンドプロンプト上でjavaファイルをコンパイルしようとしても pathが通っていないらしく、処理ができません。 今設定しているpathを書かせていただきますので、 どなたかご教授下さい。お願いします。 pathです C:\WINDOWS\system32; C:\WINDOWS; C:WINDOWS\System32\Wbem; C:Program Files\pcdNavi\bin; C:\Program Files\Common Files\Roxio Shared\DLLShared\; C:\Program Files\Softex\OmniPass; C:\Program Files\Fujitsu\sadata\fsaax; C:\j2re1.4.2_17\bin ちなみにローカルディスクCのProgram FilesのJavaの中に jre1.6.0_05フォルダがあり、そのbinフォルダにもjava.exeが入っているのですが・・・。 これは何か関係あるのでしょうか?
JRE=j2re1.4.2_17=jre1.6.0_05=実行 JDK=コンパイル+実行
>>289 んむ。
>>290 の言うようにJDKへのパス通せ。
つかそういうJava以前のことは初心者用の本とかサイトに書いてないか?
テンプレに誘導が書いてある
すみません、質問お願いします。 今、JAVAの勉強でサーバとクライアントのプログラムを作っていて(クライアントからコマンドを送り、コマンドに応じてサーバから答えを返すプログラム)、 その中でサーバーから送られた文字列をクライアント側で表示する部分がどうしてもうまくいかず、原因がわからず困っています。 下記がおおまかなコードです(はしょりまくってますが) ・サーバ側 ServerSocket ss; Socket s; PrintWriter out; 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 out = new PrintWriter(s.getOutputStream(),true); for(;;){ <ここにコマンドを受け取ってそれに応じた文字列を返すコードが入ります> (例) out.println("aaaa\nbbbb\ncccc"); }
294 :
デフォルトの名無しさん :2008/05/20(火) 12:35:33
javaアプリのmainの変わりにjavaappletのinitにしても appleが動きませんでした どうしたら動くのか教えてください
・クライアント側 Socket s; BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 〜〜〜〜〜〜〜〜〜〜〜〜〜 for(;;){ <ここにコマンドを入力してサーバへ送るコードが入ります> String message; while((message = in.readLine()) != null){ System.out.println(message); } } クライアント側の、while文がうまくいかないみたいなんです。どうもnullになったら抜けるというのがだめみたいで、 例えば送られてくる文字列を2行にしておいてwhile文の条件を2回繰り返すというようにするときちんと文字列が2行出るのですが、 それを任意の行数にしたくて「 != null 」という条件にすると全部の行を表示した後になぜかクライアントが落ちてしまうのです。 質問がわかりにくかったらごめんなさい、何かわかる方がいましたら教えていただけないでしょうか。
>>295 落ちてしまうって何か例外でも出てるの?
それ捕まえてスタックトレース表示してみれば?
297 :
295 :2008/05/20(火) 12:51:01
>>296 コマンドプロンプトでやってるんですが、落ちるっていうか全部の行を表示した後に何も表示されなくなるんです。
適当にキーを押しても一切反応せず、でもCtl-Cで終了すると何も表示されなくなったあとに入力したキーを実行しようとした形跡がバーッと表示されるんです。
・・・すみません、わかりにくいですね。こんな感じです。
C:\>java aaa
command : bbb
>>"ccc"
>>"ddd"
ここで本来なら再度command : と出るはずなのですがそれが出ず、ここで適当に「a」とか入力しても何も起こらず、
Ctl-Cを押すと
C:\>a
'a'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
c:\>
となるんです。
>>297 readLineで次のデータが送られてくるのをずっと待ってるだけでは?
サーバ側でSocketをcloseするかshutdownOutputすれば通信終了(EOF)になるのでreadLineがnullを返すはず
ちなみに while ((message = in.readLine()) != null) でループするということはストリームが閉じられるまで繰り返すとい うことだから、このwhileを抜けるともうinから読むことはできない。 コマンド-レスポンスを繰り返したいなら、このwhileでメッセージの終 了判定はできないよ。
300 :
デフォルトの名無しさん :2008/05/20(火) 13:13:07
javaアプリのmainの変わりにjavaappletのinitにしても appleが動きませんでした どうしたら動くのか教えてください
javaアプリのmainの変わりにjavaappletのinitにしても りんごが動くわけありません りんごは手で持って動かしてください
>>300 具体的に何をどう変更したのか書きなさい。
リンゴが動かないとは何なのか。
万有引力が働かない異世界だからです
javaアプリのmainの変わりにjavaappletのinitにしても appletが動きませんでした どうしたら動くのか教えてください
>>305 アプリとアプレットは別物なので、mainをinitに変えただけで動くわけはない
アプレットとして動くように作られていないのなら、アプレットとして動くように最初から作り直す必要があるかもしれない
>>300 アプレットをアプリケーションとして動作させたいってことなら
initはあくまでも初期化処理のみ
メインの動作はstartで行うようにオーバーライドされていることが多いので
インスタンスの生成→コンテナに追加→initによる初期化→コンテナの可視化→startで開始
の順で行う
ああ逆か mainをinitに名前を変えてアプレットとして動作させようとしているのか 無茶な
おまえらそんな餌に食いつくなよ
アプリもアプレットも分からん人間には食いつきようもない餌だもんな。
311 :
デフォルトの名無しさん :2008/05/20(火) 19:29:22
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77fcd989, pid=1392, tid=2524
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode)
# Problematic frame:
# C [ntdll.dll+0x4d989]
#
# If you would like to submit a bug report, please visit:
#
http://java.sun.com/webapps/bugreport/crash.jsp #
何これ
JVMのクラッシュ
313 :
デフォルトの名無しさん :2008/05/20(火) 19:38:45
設計根本的に変えたほうがいいのかしら
マンガlovemakeの画像ってどうしたらコピーできますか?
Javaのデスクトップアプリでデータをローカルで持ちたいとき、 Windowsアプリで言うリソースみたいなかたちで埋め込むにはどうしたらいいの?
>>293 >質問お願いします。
いや、質問してるのは君だから。
「回答お願いします」か「質問させて下さい」だろ。
main(String[] args){ try{ HashMap<String , String> hashMap = new HashMap<String , String>(); putData(hashMap); System.out.println("HashMap(bb) : " + hashMap.get("bb")); System.out.println("HashMap : " + hashMap); } catch(Exception e){ e.printStackTrace(); } static void putData(Map<String , String>map){ map.put("da" , "Five"); map.put("db" , "Four"); map.put("bb" , "Three"); map.put("bc" , "Two"); map.put("aa" , "One"); } } これの実行結果が HashMap(bb) :Three HashMap :{db=Four, da=Five, aa=One, bb=Three,bc=Two} こんな感じになるんですが、これと同じように出力されるプログラムをHashSetで書くことはできますか? もちろん、HashMapなので出力した際の順序まで一緒には出来ないのはいいんdねすが
>318 DataEntry(String, String) というコンストラクタを持つクラスでも作って頑張ってください。
HashSet クラスには get だの put だのいうメソッドはないから無理。
HP-UXで稼動するWebシステムの保守を担当することになり Java未経験ながらいきなり画面の追加をやらされることになりました。 (Webサーバ:SunOneでアプリサーバ:WebOTX、DB:Oracleです) Javaは過去に勉強したこともありJavaDocなど使えば、何とかソースは読めるのですが、 ソースを格納するディレクトリの構成がイマイチよくわかりません。 なぜこのファイルはここのディレクトリに入れるのか? とか、 このディレクトリに入れなければならないってのはどこで定義づけられているの? というようなことです。 ソースの読み方のような入門書じゃなくて、 Webサーバのディレクトリ構成などJavaでのサーバ構築についての 書籍やアドバイスがあれば教えていただきたく。 「UNIXでJava使ってサーバ立てるならこれは基本書だろ!」 というようなものがあれば、ぜひ読んでみたいのですが。
そんなんプロジェクト毎のルールだろ? 仕様書嫁よ。
WEB-INFとかマニフェストファイルのことじゃないの? いままでの開発をどうやってたのか知らないけど、 最近のIDEとかだと配備までやってくれるよ
アプリケーションサーバのマニュアルを読め、で済む話。
325 :
デフォルトの名無しさん :2008/05/21(水) 14:15:58
特定の文字列が、作成可能な『ファイル』を示しているかどうかを判定するにはどうすればいいでしょう? ……いえ、以下のようなコードを書いてみたんですが、「a:\backup\」がtrueになるんですよ。 public boolean check(String fileName){ File tempFile = new File(fileName); try{ tempFile.createNewFile(); if(tempFile.exists() == false || tempFile.isFile() == false){ return false; } tempFile.delete(); return true; }catch (IOException e){ return false; } } EclipseのデバッガでcreateNewFileまでで止めてみると、tempFileの中身は「a:\backup」として表示されています。 どうやら最後のパス区切りは無視されてるようなふいんき(……素でtypoした(汗))です。 これは「文字列の最後の一文字がパス区切りではないこと」で判定するしかないのかな?
>特定の文字列が、作成可能な『ファイル』を示しているかどうか イミフ。ファイル名の事? OS依存。 それとも任意のファイル名でファイルが作成できるかって事? OS依存。
>>325 javadoc で createNewFile を確認しましたか?(特に戻り値を)
File は単純ではないクラスですし、扱い方自体を確認した方が良いと思います。
328 :
:2008/05/21(水) 18:43:41
パソコン買おうかと思ってるんだけど、QuadのCPU買ってマルチスレッドのプログラミングをJavaで組んだら WindowsXPでもマルチコアに対応したプログラムになってくれるんですか?
javaのマルチCPU(コア)対応って具体的にはどこら辺まで対応してるんだろうね。
330 :
325 :2008/05/21(水) 20:25:07
>>326 失礼しました。つまり「a:\backup\」と指定されたら「backup\なんて名前のファイルは作れない。\はファイル名には使えないし、ディレクトリ名じゃなくファイル名を指定しろ」というチェックをしたかったのですよ。
>>325 のコードにすれば、ファイル名に使える文字だけが含まれているかと「実際に書き込めるか」が一緒にチェックできると思ったのですが。
最後の「\」を無視して「a:\backup」と「a:\backup\」を等価に扱ってしまうのは、Javaの(WindowsのOS依存の部分の)仕様なのでしょうか?
>>327 はい、trueなら作成成功、falseが帰ってきたら既に存在する、ということですよね?
既に存在する場合の処理はもう少し詰める必要があると思いますが(canWriteを使えばいいかな?)、まずはファイル名の問題をお聞きしようと思い、あのようなコードにした次第です。
ステップ実行をさせると(
>>325 で書いたとおり)createNewFileの後にa:\backupが作られてしまっているのです。
これは(デバッガの表示どおり) new Fileした時点で最後の「\」を無視して「a:\backup」としてFileのインスタンスが作られてしまっている、ということではないのでしょうか?
ちなみに、他の不正な文字(backup*など)を指定すると、意図したとおりにIOExceptionで落ちるようです。
331 :
325 :2008/05/21(水) 20:31:51
……失礼。 書き込んだ直後に気が付いたのですが、Fileの仕組みだと、「a:\backup」と「a:\backup\」を等価に扱ってもかまわないのですね。 Fileが扱うのはあくまでパスであり、(まだ存在しない場合)そのパスがディレクトリを示すのかファイルを示すのかは、mkDirするかcreateFileするかによって(後で)分かれる。 よって両者は区別する必要は無いので、「a:\backup」と「a:\backup\」は等価に扱ってよい、という理解でかまわないでしょうか?
Point型に文字を四つ格納したいんだけどどうすればいいの?
334 :
デフォルトの名無しさん :2008/05/21(水) 22:49:35
質問です。 JScrollPane を使って、エクセルのように動的にサイズを変えるようにしたいんですけど どうしたらいいでしょう? JScrollPane のスクロールバーが端の状態で左右のボタンを押したら 自動でサイズが拡張する感じです。 JScrollPane つかうと無理なんでしょうか?
335 :
334 :2008/05/21(水) 23:10:21
JScrollPane から JScrollBar とってこれるんですね。 でも、JScrollBar のノブが端にあるときにボタンを押しても AdjustmentEvent は投げないみたいなんで、だめそうですね・・・
すみませんアノテーションについての質問です クラスとかフィールドとかメソッドにつけたアノテーションは リフレクション使って取り出すのはわかったのですが ローカル変数につけたアノテーションの取得方法がわかりません ご存知の方お教えください、お願いします
無理っす
339 :
デフォルトの名無しさん :2008/05/22(木) 01:51:31
javaからMySQLに接続し、任意のテーブルの列数を取得したいのですが PHPみたいにmysql_num_rows()みたいなメソッドはありますか? javadocのjava.sql.*の項を参照したのですが見つからなかったので。
select countすれば?
341 :
339 :2008/05/22(木) 02:01:19
>>340 javaでってことに考え過ぎてそっちの方をすっかり考えてませんでした
試してみます。ありがとうございました。
342 :
:2008/05/22(木) 04:41:06
344 :
デフォルトの名無しさん :2008/05/22(木) 14:52:37
おい、おまえら。俺様が、Java入門者向けに環境変数自動設定ツール作ってやったんだけど、 Vectorにうpしようか迷ってる。まんどくさいんだけど、うぷしたらダウソする人いるかな?
入門者に自動で設定させんな
ていうか作らなくても既にそういうバッチがあった気がする。
っていうかNetBeansとか入れれば環境変数なんて 設定しなくていいし
JSPでDecimalFormatを使うために下のような指定を行い、 <%@ page import="java.lang.Object.*" %> 下記を書いたのですが、下のようなエラーになってしまいます。 DecimalFormat form = new DecimalFormat(); form.applyPattern("#,###"); int i1 = 20000; out.println(form.format(i1)); DecimalFormat cannot be resolved to a type どなたか解決策を教えていただけないでしょうか。 もしかしてインポートするクラスが間違ってたりするのでしょうか?
お騒がせしました、、import java.text.*;で行けましたorz
java のプロファイラで、「今はこれを使うのがベスト」ってなんだろう。 お勧めがあれば教えてください。 自分がググって見つけたこと ・Eclipse プロファイラプラグインは、開発が止まっていて Eclipse 3.3 に対応していないと聞いた。 ・Eclipse TPTP のプロファイラは、重すぎてうんこ というのを ぐぐると見かける。 ・NetBeans 6.1 のプロファイラがいいらしい。 IDE 統合型でない場合は、HPjmeter があるが(これはつかったことがある)、 これくらいでしょうか。
351 :
デフォルトの名無しさん :2008/05/23(金) 00:16:20
インターフェースを実装したクラスのメソッドに継承もとのコメントを転写したいのですが 何か簡単な方法はないでしょうか?
Ctrl+C V
353 :
デフォルトの名無しさん :2008/05/23(金) 00:54:32
>>352 何個もあるのでツールとか使って1回でさくっとできる方法でお願いします。
コピペは最も代表的なアンチパターン
>351 何も書かないこと。Eclipse3.3.2 は確認。 どうしてもコメントを書きたいなら、javadocに察知されないように気をつけて。 そういうことではない?
前スレで20桁以上の計算をしたいと相談したとき、BigDecimalやBigIntegerを使うようにアドバイスをいただいた者です。 今度はiアプリで20桁以上の整数の計算をしたいのですがどういう風にすればいいでしょうか? ググってみるとDoJaではBigIntegerが使えないという記述を見つけたので相談しました。 よろしくお願いします。
自分で実装するしか
>>356 BigIntegerのソースそのまま使うとかw
そしてGPLに感染、と。
OpenJDKはクラスパス例外付きだろPhoneMEがクラスパス例外なしだ。
java.mathパッケージのままだとライセンス上問題でるだろうし パッケージ改変したり部分的にパクった場合はクラスパス例外適用されんだろ。
362 :
デフォルトの名無しさん :2008/05/23(金) 16:24:29
とっても基本的なことなんだが、 なんで int i=2; String k; String l; k="a8"; l="a" + i; とすると、なんで、k!=lになるんでしょう。
363 :
デフォルトの名無しさん :2008/05/23(金) 16:25:32
間違えた。 int i=2; String k; String l; k="a2"; l="a" + i; こちらです。 よろしくお願いいたします。
364 :
デフォルトの名無しさん :2008/05/23(金) 16:25:59
間違えた。 int i=2; String k; String l; k="a2"; l="a" + i; こちらです。 よろしくお願いいたします。
この違いを勉強しろ k.equals( l ) → true k == l →false
367 :
デフォルトの名無しさん :2008/05/23(金) 16:29:39
ちなみに、こちらだと、str1==str2になり、ほかは等しくなりません。 2=3なら気持ちが分からんでもないけど・・・ String str1 = "aaa1"; String str2 = "aaa" + 1; String str3 = "aaa" + String.valueOf(1); if (str1==str2){System.out.println("str1=str2");} if (str1==str3){System.out.println("str1=str3");} if (str3==str2){System.out.println("str3=str2");}
368 :
デフォルトの名無しさん :2008/05/23(金) 16:34:18
初心者の質問なんですけど 2次配列に値を入れたいのですが、 例えば・・・ int a[][] = new int[10][10]; a[][] ={ {1,1,0,1,1,1,1,2,1,1}, {1,3,1,1,1,4,1,1,1,1}, {7,1,1,5,1,1,1,6,1,1}, ・ ・ ・ { } }; こんな感じで 要素の殆ど同じ数が占めている データを2次配列に入れたいんです。 どうやったら綺麗に力技じゃなく入力できますか?
数字に規則性があるならできるけど、それ以外はしらね
370 :
デフォルトの名無しさん :2008/05/23(金) 16:36:42
>>365-366 ありがとうございます。
勉強したが、やはり、
>>367 が理解できん。
リテラル値をそのまんま突っ込んでいるから実体に反映されてるんかなぁ。
>>367 javac様はコンパイル中に「"aaa" + 1」を見て「両方とも定数だからい
ま1つの文字列にしちゃおう」と考える。「"aaa" + String.valueOf(1)」
は「なんか関数呼び出しがあるからコンパイル時にはどうしようもない
よね」と考える。
>>370 定数式とかString#intern()でぐぐれ。
>367 定数としてコンパイル可能な String のうち、同値になるものが同じインスタンスとされてるだけ。 >363 の例なら、int i=2 を final int i=2 とすれば、k==l は true となる。
374 :
デフォルトの名無しさん :2008/05/23(金) 16:48:42
>>369 隣接行列を2次配列にしたいんですけど
ノード数が100個以上あって、
エッジが繋がっている部分に重みがあって
エッジが繋がっていない部分を無限大の重みを付けたいんです。
規則性はあんまりないです。
ちなみに駅間の最短距離を求めるプログラムで利用したいんです。
データは隣駅までの距離です。
>>368 何をもって綺麗とか力技とかと評価するのか知らないが、
ほとんどを占めている数を配列全体に(Arrays.fillとかで)入れておいて、
配列内の位置とその値のペアで(配列やコレクションで)持っておいたものを代入するとか。
>368 java.util.Arrays.fill >374 規則性が無いものを "計算機" で処理しよう、とな。 そこに妙な説明が書けるんだから、その通り実装すれば良いでしょう。
>>374 隣接行列はそういうスパースなグラフでは表現時にメモリの無駄が多いので、
他の表現方法で接続データを持っておいて(隣接リストとか)、
それをプログラム内で隣接行列に展開するようにするとか。
メモリの無駄が多い→同じ情報が繰り返し出てきてもたつき感がある
379 :
デフォルトの名無しさん :2008/05/23(金) 17:22:18
380 :
デフォルトの名無しさん :2008/05/24(土) 00:00:25
enum ってなんて読むのですか?
>>380 コミュニケーションする相手とのコンセンサスが取れているのならどんな読み方でもどうぞ。
enumはenumeration(またはその派生形)の略なので元の言葉の発音を基にするか、
enumそのものの綴りを連想できるような読み方にするかすればいいと思うよ。
382 :
デフォルトの名無しさん :2008/05/24(土) 01:11:12
ファイルに入力されてるなら そこから読み取るっていうこともありえるけど・・・
AWTのTextFieldで右詰めにするのってできないんでしょうか?? どうやったらいいのか調べてもさっぱわかりません。。。 SwingならsetHorizontalAlignment使えばいいんですが、AWTでのやりかたをどなたかご教授願えませんかm(_ _)m
384 :
デフォルトの名無しさん :2008/05/24(土) 02:05:43
LayoutManagerを無効にしたらTextField(5)とかいう風に列の幅を指定しても 結局そのサイズが0になっちゃうんですが、、、 座標指定できるLayoutManagerとかないですよね?? 列の数を指定して(Dimensionではなくcolum数で)、 座標を指定してコンポーネントを配置することってできないんですかね??
386 :
デフォルトの名無しさん :2008/05/24(土) 03:05:52
class C2 extends C1 {... C1 c1 = new C1(); C2 c2 = (C2)c1; これは可能ですか?
>>i386 C1を型に変換できません
>>385 TextFieldを子孫コンポーネントとしたFrameを一旦表示してやると、
そのコンポーネントの推奨サイズが有効な値として取得できるようになるから、
推奨サイズをコンポーネントのサイズとして設定してやり、
その後、Frameを再描画すればいい。
一旦表示して設定後、再描画とかの流れが面倒なら、行儀の悪いものになるが、
コンポーネントを加えた後でFrameをネイティブスクリーンリソースに接続すれば、
Frameを表示することなくコンポーネントの推奨サイズを得ることができるようになる。
>>385 なるほど。。。
ありがとうございます!!
arraylistで値を追加する際genericsで型を指定していると処理の時間が多少短いような気がするのですが これは偶然の誤差なのでしょうか?それとも速くなるものなのでしょうか?
ならねぇ
オートボクシング/アンボクシングが働いて若干のパフォーマンス低下ってのならある。 けどもしそこがネックになってるならJITで最適化されるから気にしない。
arraylistとlinkedlistの要素の追加に5倍ほどの時間差があるのですがこれはどういう理由なのでしょうか? 先頭の削除はarraylistが遅い ランダムアクセスはLinkedListが遅いっていうのはわかるんですけど intを1〜8000000 ArrayList追加 : 2385 LinkedList 追加 : 11095
395 :
デフォルトの名無しさん :2008/05/24(土) 13:36:11
>>394 そりゃあ、最後の要素までたどりつくまで時間がかかるからじゃないの?
>>394 追加し続けるだけ? それなら、
ArrayList→1回のaddにおける代入回数は1回。配列の末尾に要素を代入する(これで1回)だけ。配列のサイズが足りなくなると、元の1.5倍のサイズの配列を確保して元の要素を全部コピー。(このときだけ遅い)
LinkedList→1回のaddにおける代入回数は5回。要素を入れるEntryをnewして要素を代入(これで1回)し、前後のリンクを繋ぎ直す。(前、後、前の後、後の前で計4回)
あとは、どちらにもサイズのインクリメントとConcurrentModificationException判定用カウンタのインクリメントがあるけど、数字を見ると大きな要因ではなさげ。(最近のCPUだと並列処理されるのかな)
また、ArrayListは配列の拡張にペナルティがあるけど、LinkedListも1要素毎にnewするからか、ある程度相殺されてるっぽい。
>>395 すいません説明が足りませんでした
>>396 さんの通り末尾に追加です
>>397 リンクを繋ぎなおす処理で問題が出ていたわけですね
詳しい説明ありがとうございました
>>395 LinkedListは頭と尻尾を知ってるから、わざわざそんなことしないぞ。
(間にsentinelを挟んだリング状になってる)
つか、適当なこと言う前にソース嫁。
プ ロ フ ァ イ リ ン グ
401 :
デフォルトの名無しさん :2008/05/24(土) 18:18:39
keytoolの-validityで指定可能な最大値は何日ですか?
javaでチャットを作ってます swingのテキストエリアにメッセージを表示しているのですが、一行ずつフォントや色を変える方法はあるのでしょうか? テキストフィールドを複数使ってテキストエリアのようにするぐらいしか思いつきません
0か-1で無期限じゃなかった?
>402 検索用ワード「JTextComponent スタイル」
createImageに関しての質問なのですが extends ComponentしたクラスでcreateImageをすると nullが返りgetGraphicsすることができません ググってみたところextends FrameしたクラスでaddNotifyをオーバーライドすればいいと ありましたがcreateImageを利用する上で何をextendsするのがセオリーなのでしょうか どうでもいいようなことかも知れませんがお願いします
>>406 まだ表示されてないコンポーネントはcreateImageできない
BufferedImageをnewして使うといい
>>406 Toolkit#createImageを使う手もある
class GenericsTest<T> { private T data; public void copy(T newData) { data = new T(newData); // error } } このnew T(newData)のところ、 C++のテンプレートなんかだと コンパイルできるんですが、javaではできませんでした Tのメンバが全くわからない場合 どのようにmemberwise copy (deep copy)すべきでしょうか?
>>409 interface CopyFactory<T> { T copy(T object); }
みたいのを定義&実装してやって、
コンストラクタ使わずにそっちで生成。
>
>>409 ・リフレクションでcloneを呼び出す
・リフレクションでコンストラクタを呼び出す
・serializeしてdeserializeする
それが出来上がったら、俺だったら迷わずシングルトンなインスタンスを入れてみる
414 :
FF :2008/05/25(日) 20:20:00
キャラクター画像の背景の透過処理の仕方を教えてください。
・もともと背景が透明画像用意する。 ・IndexColorModelだったら透明色指定しとく。そうじゃなければ色置換。
ArrayListをさらにList化することは出来るのですか?
417 :
デフォルトの名無しさん :2008/05/25(日) 23:09:17
何をしたいのかもう少し詳細に説明してください
こうか? ArrayList<ArrayList<Object>>
>>417-418 レスありがとうございます。java宿題スレとマルチになってしまうんですが、とりあえず分からないなりに
解決してみようと思ってるんですが結局思いつかなくて、ここで聞いてるしだいです。
if (bean.getSql().startsWith("select")) {
// iはループ用のカウンター;実行結果を取得する
for (int i = 1; i <= fileColumns; i++) {
columnNames.add(rsmd.getColumnLabel(i));
}
// フィールドの変数NameListに取得した文字列を入れます。
bean.setNameList(columnNames);
// 獲得したデータの格納
while (rs.next()) {
ArrayList date = new ArrayList();
for (int i = 1; i <= 3; i++) {
date.add(rs.getObject(i));
}
bean.setResultList(date); ←このResultListを、さらにList化したいです
session.setAttribute("access", bean);
}
}
SQLを実行してデータベースから結果をとりだして格納するんですが、上のプログラムだけだと
上書きしている状態で、最後に取得した情報しか表示されないのです。
すべて表示させるにはResultListをリスト化して、リスト化したところに個々の情報を入れていけば
全て表示できると言われたのですが、どうやってResultListをリストすればいいのか検討がつかないのですよ。
マルチは首つって市ね
421 :
デフォルトの名無しさん :2008/05/26(月) 01:07:29
>>419 commons-collectionsのMultihashMapとかどう?
>>420 ごめんなさい。
>>421 HashMapちょっと調べてきます!!
ご助言ありがとうございます。
423 :
デフォルトの名無しさん :2008/05/26(月) 12:39:28
お世話になっております。 今2つの内部クラスを作っています。ゆくゆくは内部クラスを別ファイルにでも切り離したいのですが、まだ先の話です。 現在は2つの内部クラス内のメンバー変数を内部クラス同士で参照させています。 下記のコードだと、eclipseはエラーを吐きませんが、 実行するとjava.lang.NullPointerExceptionエラーになります。 インスタンスもできていると思うし特に問題はなさそうです。 質問なのですが、なにか根本的に間違っていますか? class M{ Initialize initialize; Disp disp; class Initialize{ private void once(){disp.isVal = true; } } class Disp{ boolean isVal; } private Initialize mkInit(){ return initialize; } private Disp mkDisp(){ return disp; } public static void main(String[] args){ M m = new Majang(); Initialize initialize = m.mkInit(); Disp disp = m.mkDisp(); initialize.once(); } }
m.initializeに誰も何も代入していない (初期値nullのまま)
425 :
423 :2008/05/26(月) 13:08:14
早速の返答ありがとうございます。 ってことは Initializeのコンストラクタでなにかの値を指定すればOKなのでしょうか。 //getClass()を使ったほうが可読性が高いですね。すみません。
>>425 Initializeオブジェクトを生成してinitializeに代入しないといけないだろうということ
要するに
× Initialize initialize;
○ Initialize initialize = new Initialize();
427 :
423 :2008/05/26(月) 13:38:20
>>423 ねぇアレやっていい?アレ
ガッ!やっていい?
>>423 内部クラスにするのはそれなりの設計理由があってすることで、
分離することが決まっているのなら、最初からきちんと分けて設計すべき。
クラス間の依存度が高いまま単に分けるだけなら分ける意味はあまりないし、
依存度が低くなるように最初の設計でインタフェースをきちんと決めて別々にした方がいい。
あとから制約を増やすのは面倒事になることが多い。
430 :
デフォルトの名無しさん :2008/05/26(月) 19:20:09
失礼します. クラスからインスタンスを配列で作った際,Ins[0],Ins[1]… Ins[n]内のメソッドから,Ins[n-1]内の変数をいじりたいのですが,どのようにすればよいでしょうか?
JavaのGuiツールの中でボタンを押したらシェルを起動するという処理を行いたくて Runtime rt=Runtime.getRuntime(); try{ rt.exec("cmd.exe"); }catch(Exception e){ e.printStackTrace(); } こういうのをactionPerformedメソッドの中に入れた所何故か起動しません。 プログラムをnotepadとかにすると起動するのにこれだと起動しないのは何故なのでしょうか? またcmdまでのパスも通っているし、念のためフルパスでやったけれどダメでした。
俺以外誰も423の5行目に反応すらしない・・・とは思わなかった今ではガッしたことに反省している
433 :
423 :2008/05/26(月) 21:04:41
>>429 ただ単純に、一緒にしてしまうとコードが複雑になるので、
表示系と処理系を分離したいと。
できれば、最終的には表示系は処理系から隠蔽してメソッドで呼び出すだけにしたいかな、と。
ただ、いっしょにしている方がコードを書くのには明らかに簡単でとりあえず動くことから目標にしているんですよ。
プログラムはズブの素人で経験はCP/M86上のFBASIC位・・・
>>432 本来のぬるぽですからねぇ。ふふふ
文字が半角カタカナであるか判断する方法はありますか?
文字コードで調べる。
436 :
デフォルトの名無しさん :2008/05/26(月) 21:53:11
使用メモリーの増加に伴ってスレッド処理速度が落ちてしまうのはどうすれば回避できるでしょうか
使用していないメモリを開放する
438 :
デフォルトの名無しさん :2008/05/26(月) 22:05:02
おおっ 少し感動 どうやればいいですか
439 :
デフォルトの名無しさん :2008/05/26(月) 22:07:17
GC弄るの?
440 :
デフォルトの名無しさん :2008/05/26(月) 22:09:00
nio のBufferとかどうかなと思ったんだけど
newをできるだけ減らす(できるだけオブジェクトを使いまわす)とか、 アルゴリズムを工夫するとか
442 :
デフォルトの名無しさん :2008/05/26(月) 22:15:23
それは 既にやってあるなあ
使用メモリの増加に伴う速度低下がオブジェクトの生成にあるのなら 使用するオブジェクトをスタートアップの段階で全て準備してしまい 擬似的に静的に使用メモリを準備する もちろんすべてひもつきのままにして破棄させない 一時的なオブジェクトの破棄に伴うGCの頻発による速度低下なら メモリを積み込めるだけ積み込んでGCを停止する
設計がうんこなんだろ
メモリを積み増せば解決
てst
Oracle の JDBC ドライバ (V9.2.0 ) で Oracle DBMS に接続してるんだが。 クエリ投げて、SQLException 投げてきたときに、クエリのどの部分が違うのか、 あるいは、どの列が制約条件に違反してんのか、どうしたらわかるの? 教えてエロい人。
448 :
デフォルトの名無しさん :2008/05/26(月) 22:46:04
>>443 サンキュ
ただ原因はスレッドがやってる作業そのものがデータの吸出しにあることだと思う
6000個のスレッドをpool使って逐次で動かしてるんだが作業が進むに従って重くなるんで
このデータを一時的に何とかしないといかんかも
6000個のスレッドwww
どんなマシンでまともに動くのか教えて欲しいwww
>>447 SQLのエラーコードを取得して、Oracleのマニュアルを参照汁
getErrorCodeとかそんなメソッドある
6000個もスレッドを使ってる時点で 何かがおかしいと思わざるを得ないのだが コンテキストスイッチのコストだけでもバカにならないんじゃ
6,000・・・Thredのコストだけでも500Mくらいつかってそうだな、おい。 どうせpoolの管理も自分でやっているんだろ ExecutorServiceとか使えばサクサク動く予感
6000台のPCに分散処理させれば解決(・∀・)イイ!!
453 :
デフォルトの名無しさん :2008/05/26(月) 22:59:29
つかってる
6000! スレッドダンプが終わらん!
public class Test { public static void main(String[] args) { char[] a = { 'ア', 'ア', 'あ', 'A', 'A' }; for (char c: a) { System.out.println(Character.UnicodeBlock.of(c)); } } } そりゃ、アもAも HALFWIDTH_AND_FULLWIDTH_FORMS に分類されちゃうよなー。
本当に6000もスレッドを使わなければいけないのか、 よく考えるべきである
>>453 減らすべし。大抵は多くても数十で十分のはず
他の言語なら大量に作って大量に捨てるような設計でも問題ないこともあるけど
Javaのスレッドは、基本的にそんな使い方はしない
タスクが6万あったとしても、スレッドは数十で充分だろうな、たぶん。
必要だから作っているんです それにpool使って逐次動かしていますから問題はありません データの吸出しを修正してみます
>>449 サンクス。 getParameters() とかいうのがあるので、ちょいと試してみる。
煽りとかじゃなしにプログラマとして6000個のスレッドがどういう状況で必要になるのか興味がある
意味も解らず調べもせずに実装しているという状況なんだろう
スレッド6000個ってnewするだけでもコスト高そうだな。
464 :
デフォルトの名無しさん :2008/05/27(火) 00:08:16
ごめんタスクが6000で稼動してるのは10ほど そっか言い方間違えたな しかしボロカスだなあw
465 :
デフォルトの名無しさん :2008/05/27(火) 00:11:35
もう少し詳しく言うとHTMLパースをMozillaJavaHTMLParserつかってさせるためのもの
全部並列でって話ならば、そりゃ負荷かけすぎ IOのように比較的長く待たされる処理がほとんどならば、6000タスクを並列にやって硬貨出るけど、HTMLのParseじゃ逐次処理の方が早いかもよ
467 :
デフォルトの名無しさん :2008/05/27(火) 00:19:36
かもしれんねPoolサイズ3に絞ってやったら少し改善した
468 :
デフォルトの名無しさん :2008/05/27(火) 00:21:56
このサイズをメモリーの状況に応じて自動変更できるとさらにいいなあ
469 :
デフォルトの名無しさん :2008/05/27(火) 00:27:49
申し送れましたが 皆さん有難う
HTMLのパースに10スレッドも使うか? パースに1、JS実行に1、画像読み込みに1で3くらいじゃね?
471 :
デフォルトの名無しさん :2008/05/27(火) 00:37:35
ページ数が多くて
sageを覚えようね
ああ 下げたほうが良いのか 了解
javaの実行時間で質問です。 ある処理をSystem.currentTimeMillis()の差で調べたのですが forで100回ぐらいまわした平均をとったほうが正確になるかと考えました。 すると1回のときとだいぶ違う時間になったのですがなぜかわかりますか?
具体的にどう違ったのさ?
何度も実行されるコードは高速化の価値があると判断&最適化されたりする。
ほんまかいな
最近の香具師はHotSpot知らんのか?
481 :
デフォルトの名無しさん :2008/05/27(火) 15:02:12
昨日のスレッドの件有難う 大分よくなった でも6600ページダウンロードしてパースする作業だけで15分はかかりすぎだよねえ 何とかならんものか
ごめん下げだったよね ついでにいいかな Matplotlibって視覚化ツールがあるんだけど これをjavaからコントロールした人居る?
そうそう そのためにスレッド数は絞るようにはしてるんだけどね ダウンローダーと基本的には接続の部分は一緒だから 嫌われるプログラムではあるよね
XMLの読み込みなんですけど、xmlnsを読み込むのってどんなメソッド使ったらいいんですか?
xmlns属性は普通報告されない
xmlns属性の値を引っ張ってきて別のメソッドで使いたいんですけど・・・
じゃあパーサーから出るDocumentのelementひっぱってきてatributeを見れば良いんじゃね
若しくはHTMLの文字列をindexof(xmlns)で位置拾って""でくくられてるところをStringで拾うとか てかあそこ値変わるのか
ごめんなさい普通に
>>488 でできました。
ありがとうございました
491 :
デフォルトの名無しさん :2008/05/27(火) 17:34:52
やっぱ 半値押しで粘りそうな感じもしないではないな 買い方逃げるとしたら次のリバだろうね
誤爆ごめん
誰かグラフ描写のJGraphというソフトを使ったことある人いませんか? ダウンロードはできたんですが、そのあとのjarファイル等の操作がよくわかりません。 わかる方いれば、よろしくお願いします。
JFreeChartのほうが機能多くていいぞ
JFreeChartですか・・・ 僕がやりたい(やらなければいけない)のは、「グラフ理論」なんです。 有向グラフとかノード、アークといったやつです。
だったらJSCIのほうがいいかも
JGraphを使えっていう指示があったんです(泣)
そっかあ わかんないなあ 誰か助けてあげてえ
ディスクイメージなどのisoの中身を確認したり、抜き出したりするライブラリはありませんか?
>>499 あまり知識がないもんで・・・
よくわからないです。
501 :
デフォルトの名無しさん :2008/05/27(火) 19:08:09
WINRARをDllフックしてJINIでつなぐ
>>501 そういうライブラリは存在しないのですかね?
ネイティブにしたくないので仕様書探します。
503 :
デフォルトの名無しさん :2008/05/27(火) 19:12:43
あい
504 :
デフォルトの名無しさん :2008/05/27(火) 19:22:34
webアプリ構築してます。 strats+hibernateです。マスターテーブルの存在チェックを複数件(1〜300)行いたいのですが一件づつselectしチェックを行うのと全件selectしてmapに格納して存在チェックするのではどちらがよいでしょうか マスタの件数は150件ほどです
>>481 あんまり馬鹿やってるとIPではじかれる
>>505 そうなんか?
別にクラッキングじゃねえけど
ご質問させて頂きます。 余りを出す演算子で%があると思うのですが %以外で余り値を出す演算子とかはあるのでしょうか? 何か方法があれば教えて頂ければと思います。 宜しくお願い致します。
まあいいやはじきたきゃはじきやがれ 脆弱サーバー入れて客の責任にしたきゃすればいい
>>508 宿題を出された→%禁止→でも、あまりを使うアルゴリズムしか思いつかない→%以外に何かあるはずだ→質問しよう
と、エスパーしてみる
あまりを出す演算子って言われたら%しか思いつかない
511 :
デフォルトの名無しさん :2008/05/27(火) 21:06:20
むかしBasicであったなMIDだっけ覚えてねえや あれのこと?
%っじゃなくても出せるような。 一桁ずつ2で割ってけばいずれ余りが出る。 ナベアツプログラム検索してるときにこの手の考え方が出てたよ。
>>510 自分も%しか思い浮かばないので質問させて頂きました。
>>511 うーん、多分違うと思います。
すいません。
>>512 それは奇数なら大丈夫だと思うのですが偶数なら・・・。
と言うか、1桁ずつ2で割るという意味がちょっと自分は理解出来ないのですが
どういうことでしょうか?
%以外の演算子があるのでしょうか?
ちょっとナベアツプログラムでぐぐってきます。
ていうか、質問は演算子だったんだろ。演算子なんて数が知れてるだろうに
二つの整数値、8 と 3 の 『和』 『差』 『積』 『商』 『余り』 を計算して表示してください。(結果はすべてint型) 尚、『余り』に関しては 余り演算子 % を使用する場合と、しない場合の2通りの方法を考えてみましょう。 又、3ではなく、0で割るとはどうなエラーメッセージなのかも確認してみましょう。 という課題で出された為です。 自分は%以外の演算子を知らない為、質問させて頂きました。
小学生なら余りを出すときは割られる数から商と割る数を掛けたものを引くだろうな
大学の先生に聞け
終了。次の質問どうぞ
%以外の演算子は使っていいんだから-と/と*でできるじゃないか
てか割り算できない人いるか
馬鹿は際限がないということだ
523 :
デフォルトの名無しさん :2008/05/27(火) 21:32:04
Modだったな 一文字違いじゃねえか
皆様、お答え頂きありがとうございました。
>>506 ファイナンス系は厳しいぜ
IPからプロバイダに垢停止迫ったりは普通
あまりしつこいと自宅に直接電話かかって来るからなw
たった3スレッドでか? ありえねえだろ
あと普通は嫌ならロボットはじくスクリプト入れるよな
あと普通はレイプされるのが嫌なら錠付き貞操帯を着けて鍵を飲み込んでおくよな
プログラムの実行時間計測してるんですが毎回時間がばらついてしまいます。 なぜでしょうか??
rdtscとかQueryPerformanceCounter()を使う
運悪くGCが働いたか、何かの最適化が起こっている可能性がある
>526 HTTP1.1 では、同時接続数上限は 2 ですよ、と。 さらに言えば、連続して接続するなら、単一接続にした方が良いと思います。 過ぎたるは及ばざるがごとし。てか、鯖にも許容量があるので。 HTTPヘッダに、Accept-Encoding: gzip を追加しましょう。 対応していれば、テキストが5分の1ぐらいに圧縮されます。 java.util.zip.GZIPInputStream で解凍できます。
533 :
デフォルトの名無しさん :2008/05/28(水) 01:40:24
>532 どうせapacheを使うのだから、apacheでやらせた方が良くない?
534 :
ume :2008/05/28(水) 04:13:44
>>516 8.0-(int)(8.0/3.0)*3.0 CとJavaでも。
>>508 a%b=a-(a*(a/b))
※/演算子の結果が小数を返すものならintで丸める
または自作で余りを求める関数を作れ
っていう意味では?
>>533 >>526 (のさらに元ネタの、スレッドを起こすプログラム書いている人)は、
Httpクライアント側じゃないの?
そうだよ クライアント側 2でいいなら2にして見るかな 何ももめるつもりで書いてるものでは無いからな あと6600はひとつのサーバーに対してじゃないから その辺は如何なのかなって気もするけどな 良くあるループの理論速度計算みたいに スレッドの計算できる式ってあるのかな
で 話全く変わるけどマルチっぽくてすまんが OOOSDKのことで聞きたいんだが たとえばJPanelにCALCのインスタンス貼るのはUNO使えば良いんだろうか
539 :
デフォルトの名無しさん :2008/05/28(水) 16:44:11
final で宣言した変数にcloneで初期値を代入できんのやね。 そんなもんなのかなぁ。
普通はできると思う。どういう初期化の仕方をしてできなかったの? public class A implements Cloneable { private final C c; public A(C c) throws CloneNotSupportedException { this.c = (C)c.clone(); } public static void main(String[] args) throws CloneNotSupportedException { C c = new C(); A a = new A(c); final C b = (C)c.clone(); System.out.println(c + ", " + a.c + ", " + b); } } class C implements Cloneable { public Object clone() throws CloneNotSupportedException { return super.clone(); } }
あ、Aの方のimplements Cloneableは余計
こういうことをしたいんじゃないかと思う public class A implements Cloneable { private final ArrayList list = new ArrayList(); public Object clone() throws CloneNotSupportedException { A a = (A) super.clone(); a.list = a.list.clone(); // ← できない return a; } }
それは普通に再代入だから 再代入を禁止したいからfinalを付けるのに付けた意味がないような 本当のところは実際にやろうとしたことを聞かないと分からないけど
アプレットを表示するHTMLを作りたいのですが、 赤いXとアプレットのサイズの灰色の枠のみ表示されて、中身が表示されないんですが、 何が悪いのかわかりません。
コードを書けコードを こっちにだって何が悪いか分からん
546 :
544 :2008/05/28(水) 17:43:00
<html> <head> <title>11_4</title> </head> <body> <h1>11の4</h1> <applet code="s11_4.class" width="500" height="500"> </applet> </body> </html>
>>546 そのHTMLと同じディレクトリにs11_4.classは存在するか?
他に必要なクラスファイルもすべて存在するか?
何か例外が発生していないかコンソールを確認してみたか?
s11_4のソースコードを見せてみれば何かわかるかもしれない
.class 削ってみること。
549 :
544 :2008/05/28(水) 18:32:38
>>547 上三つはだいじょぶでした
アプレットビューワで見れてもHTMLに引っ張ってきただけじゃだめなんですね、、、、
550 :
548 :2008/05/28(水) 18:42:52
焦った、すまん。
>549 appletviewer の引数って htmlファイルですよ、と。 他は大文字小文字とか。
552 :
544 :2008/05/28(水) 18:50:20
>>551 その意味がわからないのは申し訳ないです。
appletviewerとブラウザでセキュリティ面で違いがあったりするから
それが原因かもとも思ったがブラウザでも例外は発生していないらしいからこれは違うか
>>552 どっちの意味が分からないのか分からないが
appletviewer hoge.html
で実行するものじゃないの?
またはコメントにappletタグを記述したソースファイルで
appletviewer Hoge.java
とか
大文字小文字を区別する環境なら合わせてやらないとクラスファイルを発見できない
S11_4.classでサーバに上げたのにs11_4.classを指定しているとか
554 :
544 :2008/05/28(水) 19:17:05
>>553 エクリプスで三角形おして動作を見てたから、ぴんと来ないです。
ほかの人のパソコンで見れたら委員だけど、エグゼファイルみたいなのに
することもできずテン
jarファイルにエクスポートすればいいんじゃないか appletタグもjarファイル使って <applet archive="hoge.jar" code="s11_4.class" width="500" height="500"> みたいな感じで
556 :
548 :2008/05/28(水) 20:04:20
>アプレットビューワで見れてもHTMLに引っ張ってきただけじゃだめなんですね C:\>dir s11_4.class hoge.html 2 個のファイルが見つかりました。 C:\>appletviewer hoge.html と、入力してみる。三角ボタンじゃなくて。
557 :
デフォルトの名無しさん :2008/05/28(水) 20:35:28
Swing とかで youtubeの外部プレイヤー(小さいやつ)の音量設定のような、 マウスのせたらスライドバーがでてきて調整できる GUI 部品ってないんですかね? もしくは作れるんでしょうかね?
作れないものなどない
だが、お前には作れない
つまらん煽り
タイマーで、描画を3秒ごとに進めようとしてるんですけど、 配列が保管されないんですけど、こういうものなんでしょうか。 java初めてです。
ローカル変数にしてるオチの予感・・・
配列の宣言位置がおかしいんじゃないでしょうか
564 :
561 :2008/05/29(木) 01:06:14
クラス …メイン クラス …タイマー …グラフィックフレーム クラス …画像描画 …パブリック イント 多次元配列 …描画のメソッド …配列に、値を入れる。 ↓ タイマーでロードされると 配列の値が残っていない…。
>564 私なら、配列の生成、変更箇所をたどっていく。 大体は、生成に問題がある。 配列でなければ、それを含むクラスの生成と運用に問題がある。
566 :
デフォルトの名無しさん :2008/05/29(木) 01:58:34
import java.awt.*; class R6_2 { public static void main( String [] args ) { R6_2_image window = new R6_2_image() window.setSize(400,600); window.setTitle("R6_2"); window.setVisible(true); }} import java.awt.*; class R6_2_image extends ExitFrame { public void paint( Graphics g ) { Toolkit toolkit = Toolkit.getDefaultToolkit(); Image image = toolkit.getImage("image.jpg"); g.drawImage(image,50,50,this); }} windowsVista、CPad for Java2 SDKの環境でjavaしています。 上のプログラムがR6_2.java,下がR6_2_image.javaです。 R6_2.javaファイルを実行すると、シンボルが解決されていないとエラーが出て、コンパイルできません。 image.jpgとExitFrameは同じディレクトリに入れてます。
567 :
デフォルトの名無しさん :2008/05/29(木) 02:33:01
誰か来て…
>566 ExitFrame は同じパッケージで、Frameを継承してるとして、 R6_2_image window = new R6_2_image()セミコロン抜け
if(hairetu[j][i]==0 && hairetu[j][i+1]==0 && hairetu[j][i+2]==0){ … をすると、なぜか例外になってしまいます。 if(hairetu[j][i]==0 || hairetu[j][i+1]==0 || hairetu[j][i+2]==0){ … では起こらないんですが… 何が違うのでしょうか?
範囲外参照の例外だろ? &&だったら全て満たさないといけないから条件全て実行する。||だったらどれか満たせばいいから一つでも満たしたら以降は確認しない。
571 :
569 :2008/05/29(木) 12:39:55
つまりその三つを満たしている場合がないから例外が出てるってことなんですか
572 :
569 :2008/05/29(木) 12:42:02
あ、いや、ちゃいますね。 配列の外をってことですね。
>571 例外とは何か。条件を満たさないと起きる物なのか? 570 は、貴方の質問に答えただけで、貴方の疑問には答えていない。 それでも、十分に答えを見つけるだけのヒントは出ている。 というか、表示された例外クラスの事をちゃんと調べましたか?
574 :
569 :2008/05/29(木) 13:57:48
助かりました。arigatouございます
swingプログラムを作ってるのですが、 Javaで多重起動防止する方法ってどういったものがあるのでしょうか? WIn32APIのミューテックスみたいなのの他、 実行中のプロセス名を全部取得して自分のプロセス名があれば表示前に終了する みたいなのを考えたのですが、Javaでのこういうのの実現方法が分かりません。
ないからlockfile作るのが一般的じゃない?
仮想マシン単位なら、createNewFile - deleteOnExit の連携かな。試してないけど。 何らかの理由で削除されない事に対応するには、 ロックファイル内容の書式に更新時間を記録するようにするか、ね。
起動中は特定のポート握りっぱなししておいて、 起動時に特定のポート開けなかったら起動させないとか。
579 :
デフォルトの名無しさん :2008/05/29(木) 16:16:30
よろしくお願いします。 VBで言うところのErr.RaiseしてOn Error Gotoに飛ばすようなことをしたいのですが 意図的にSQLException等の例外を引き起こすメソッドみたいなものはありますか? というか考え方が間違っていますか? try{ //処理1 if(!hoge()){ 例外に飛ばす処理 } //処理2 : }catch{ //ここに飛ばす }
>>575 起動するときファイルに自プロセスIDを書き込む
多重起動チェックのときそのIDのプロセスが生きていればエラー
JNI使うことになりそうだけど
>>579 throw new SQLException()
ただしgotoを実現するために例外を使うのは良くない
581 :
579 :2008/05/29(木) 16:38:40
>>580 物凄い勢いで答えていただきありがとうございました。
例外を使用しない方向で考えてみます。
イベント駆動型アプリケーションて概念もあるけどな
584 :
579 :2008/05/29(木) 17:14:54
>>582 ,583
レスありがとうございます。
よくよく考えてみましたが、やはり仕様上例外である必要があるため
前言撤回で、throwを使わせていただきます。
リンクありがとうございます。今読んでいます。
>イベント駆動型アプリケーション
勉強します!
585 :
デフォルトの名無しさん :2008/05/29(木) 19:46:41
preparedStatementを使ってて、 SQLのログ出力する時に、「?」部分に実際に値が入っている状態で出したいんだけど どうすればいいですか?別々に出力させるしかないのでしょうか?
586 :
デフォルトの名無しさん :2008/05/29(木) 21:06:52
JSpinner の中身を左詰で表示させたいんですけど 設定がわかりません orz set〜 を探してもそれっぽいのないのですが。。。
>>586 ((JSpinner.NumberEditor) spinner.getEditor()).getTextField().setHorizontalAlignment(SwingConstants.LEFT);
590 :
デフォルトの名無しさん :2008/05/29(木) 23:11:33
>585 ?の部分にバインドするのはDBサーバだから簡単な方法はない気がします。
バインドしたやつってDBサーバ側のクエリログとかはどうなん? 自分で確かめてないけど、バインドした結果のが残ってないん?
>>590 String#formatを使えるなら、それほど難しくない気もする。
594 :
590 :2008/05/30(金) 01:44:29
>593 それだと、DBで実行しているものと同じとは言えないと思うのですが。。。 簡単かどうかは人によって違うとは思うのですが、JDBCのパラメータをいじるだけでは出来そうもないという意味で、簡単ではないと書きました。
JGraphについてです JGraphはsourceforgeからダウンロードしましたが(初心者なんで)使い方がわかりません。 環境はVistaでj2sdk2.4です。 どなたかJGraph使い方わかる人はいませんか?(ファイルの移動、コンパイル方法など)
j2sdk2.4?
>>596 すみません、眠たくてぼけてました
j2sdk1.4.2_17です。
>>590 ,593,594
ありがとうございました。
ざっとString#formatも調べてみましたが、
これはこれで使いこなすのに時間がかかりそう・・・
でも参考になりました。ありがとうございました。
599 :
585 :2008/05/30(金) 12:05:14
>>591 すいません、抜けていました。
レスありがとうございました。
Hoge [] array = new Hoge[100]; for( int i = 0; i < array.length, ++i ) { array[i] = new Hoge(); } このようにしてメモリを確保した場合 for( int i = 0; i < array.length, ++i ) { array[i] = null; } array = null; ってやるのが正しい方法でしょうか? それとも array = null; だけでOKなんでしょうか?
>>600 何もしなくてOK
nullを代入する必要は通常ない
null代入イラネ
exec("explorer")を呼び出す際に引数を付けて任意のディレクトリを開くようにしたいのですが、 他のプログラムのようにexec("explorer C:/")というようにやっても シェルからexplorer C:/と入力するような動作はしません。 これって何が問題なのでしょうか?
exec("explorer C:\\") としないとダメとか?
>604 XP です。シェルが何か分かりませんので cmd で確認。同じ動作をします。 単なる入力ミスor確認不足じゃないですか? もちろん、意図した動作は 605 でしょうけど。
607 :
604 :2008/05/30(金) 14:49:27
>>605 で出来ました、レスありがとうございます。
Javaの中のパス指定は/でいいけど外部プログラムに渡す時は\じゃないとダメなんですね。。
java.sql.SQLNonTransientConnectionException: バッチエレメント # のエラーです0: 通信エラーが検出されました: Software caused connection abort: recv failed。 これって何が原因ですか 対処方法も分かったら教えてください
609 :
デフォルトの名無しさん :2008/05/30(金) 18:02:07
>>609 「みたいな物」 が欲しいだけで 「同じ物」 が必要じゃないなら、別にちょっとくらい結果が違ってもいいんでないの?
611 :
デフォルトの名無しさん :2008/05/30(金) 20:40:46
randomの乱数生成ですが 0から乱数が始まるみたいですが 最低値と最大値を 5〜10 のように指定した乱数の出し方がわかりません。 教えてください。
>>611 new Random().nextInt(6) + 5;
613 :
デフォルトの名無しさん :2008/05/30(金) 20:58:29
インスタンスを生成したときの内部のメモリ状態について質問です。 クラスは、変数とメソッドで構成されていると思うですが、 インスタンス生成の度にメモリ上に確保されるのは、 変数だけなのでしょうか? それとも、変数とメソッドなのでしょうか? 私は前者だと思っていたのですが、 会社の先輩が後者だと言って譲りません。 恐い先輩なので、私が悪いことにしてその場を治めましたが納得できません。 どちらが正しいのでしょうか?
メモリ状態なんてJVMの実装依存でしょ
>>614 OpenJDKのソースを斜め読みした限りじゃインスタンス変数だけと思われ。
一般的なJVMの実装ならば変数だけだろ メソッドはどのインスタンスでも同じ振る舞いするわけで、わざわざインスタンス毎に作成するメリットはほとんどないわけだから メソッド変数という意味ならば変わるけどな
>>614 > 恐い先輩なので、私が悪いことにしてその場を治めました
これは正しい。
> が納得できません
これは正しくない。
619 :
614 :2008/05/30(金) 22:50:13
>>615-617 レスありがとうございます。
やはり常識的に考えて、生成されるのはインスタンス変数だけですよね。
恐い先輩に頭ごなしに否定されたので、自分が間違っているような気になっていました。
620 :
デフォルトの名無しさん :2008/05/31(土) 00:26:19
GUIでウェブブラウザ作ってるんですが・・・ 下のif文の中に入ってくれません。 どなかか考えうる理由など教えていただけると嬉しいです。 必要であれば、ソースすべて載せます。 はじめて質問するので、なにか不束な点があると思いますが、 許してください。。。 JButton ret; //戻るボタン public void actionPerformed(ActionEvent ae) { Object obj = ae.getSource(); //この条件の中に入ってくれません if(obj == ret){ System.out.println("test4"); System.out.println("test4"); System.out.println(address.getText()); list.removeLast(); this.setUrl(list.getLast()); } else if (obj == address) { System.out.println("test2"); System.out.println(address.getText()); list.add(address.getText()); //ジャンプするURLを格納 this.setUrl(address.getText()); }}
retをローカル変数で定義しているとか? 下のelse if は入るんだよね?
printデバッグするにしても、"test4"とか固定文字列を表示するんじゃ なくて、ifの前にobjとかretを表示してみるとかー。
623 :
デフォルトの名無しさん :2008/05/31(土) 01:13:40
二つの文字列を表示する時 一つめの文字列を表示させたあと 2秒ほど間を開けて 二つめの文字列を表示するにはどうすればいいですか?
>>623 簡単に言うと、間に Thread.sleep(2000); を挟む。
JNIでCと連携してるんだけど、特定のnativeメソッドを使用した時に UnsatisfiedLinkErrorが投げられてしまう。 環境変数は通っているし、 ヘッダファイルが最新の状態で問題なくビルドできたのに、 そのメソッドだけ蹴られる。 ためしに問題の部分をコメントアウトして実行したら、問題なく動いた。 だから他のnativeメソッドは、たぶん普通に呼び出せてるんだよね。 DLLの中身をのぞいて見ても、件のメソッドは他のメソッドと同じようにちゃんと存在している。 これはいったいどういうことなんだろう…?
626 :
620 :2008/05/31(土) 01:30:52
>>621 ローカル変数では定義してませんね・・・
下のelse if文には入ります
>>622 obj表示してみました。
今もうその文字列のcontainsメソッド使ってごり押しでif文に入りました!
ただなんで前の状態じゃ入れないか疑問に残って仕方がない・・
627 :
デフォルトの名無しさん :2008/05/31(土) 01:40:57
>>626 ありそうなのは、JButton ret;と、実際に追加されているボタンが異なるケース。
同名のローカル変数が追加されて、メンバのretに値が入っていない。
JButton ret=new JButton();とかやってないか?
629 :
620 :2008/05/31(土) 02:42:15
>>628 ぁぁぁ・・・ご名答です・・
コンストラクタでやってしまってました・・・
わざわざありがとうございます。
今ブラウザの戻る、進む、ホームに戻るが作成できました。
あとは履歴とブックマークくらいしたいなー。
他なにか機能ないかなー。
なんか学校の課題とはいえ、がっつり便利なブラウザ作ってみたいなー。
>>629 > がっつり便利なブラウザ作ってみたい
ってことは今使っているブラウザに不満な点があるということだから、
その不満を解消する機能をつければいい。
既にあるものを再生産するのは詰まらんだろう。
>>629 そういうミスを防ぐために、メンバ変数に特殊な命名規則を導入するス
タイルもある。
m_ret
mRet
f_ret
fRet
ret_
または常にthis.retで使うとか。
short と byte[] の相互変換ってどうやるんですか? private byte[] ShortToByte( short s ) { byte [] b = { (byte)((s >> 8) & 0xFF), (byte)((s >> 0) & 0xFF) } ; return b; } private int ByteToShort( byte []b ) { return ((b[0] & 0xff) << 8) | (b[1] & 0xff); } こんなのを作ってみましたけど 上手く行きません short s = -1; System.out.println( s ); System.out.println( ByteToShort( ShortToByte( s ) ) ); 結果 -1 65535
633 :
デフォルトの名無しさん :2008/05/31(土) 04:10:17
>>632 それshort返してねえよ int返してる
あ^^;色々変更して試しにint返してみてそのままでした private short ByteToShort( byte []b ) { return (short)((b[0] & 0xff) << 8) | (b[1] & 0xff); } でも同じ結果です
private byte[] convertShortToByte(short s) { byte[] b = new byte[2]; ((ByteBuffer)ByteBuffer.allocate(2).putShort(s).rewind()).get(b); return b; } private short convertByteToShort(byte[] b) { return convertByteToShort(b, 0); } private short convertByteToShort(byte[] b, int offset) { return ByteBuffer.allocate(2).put(b, offset, 2).getShort(0); }
そんなややこしい方法でしか無理ですか?
ここでエスパー参上 short 返してねえよ。int 返してる
639 :
294 :2008/05/31(土) 12:09:33
Aクラス=(appletをextendsしたクラス)でBクラス=(frameをextendsしたクラス)ではなく Bクラスを使用しないでAクラスでBしたクラスがする処理をしたらappletとしてうごきました。 ところでappletではファイルの読み書きとかが出来ないらしいけど、 何が出来て何が出来ないかということはどうやって解るんですか
>>640 ありがとうございます。
とてもよく知ってますね。
そういう知識はどこで覚えたんですか?
なんでそんなに詳しいんですか?
どこかで習ったりしたんですか?
>>636 static short ByteToShort(byte[] b)
{
return (short)((b[0] << 8) | b[1]);
}
static byte[] ShortToByte(short s, byte[] b)
{
b[0] = (byte)((s >> 8) & 0xFF) ;
b[1] = (byte)(s & 0xFF) ;
return b;
}
public static void main(String[] args)
{
short s = -1;
byte b[] = new byte[2];
System.out.println( ByteToShort( ShortToByte( s, b )));
}
君のメモリー(思い出は((無い
644 :
デフォルトの名無しさん :2008/05/31(土) 14:51:39
synchronizedブロックだとメソッドから復帰するとモニタも解放になりますが、 メソッドから復帰してもロック・オブジェクトのモニタを持ちつづけるにはどうすればいいのでしょうか?
>>644 それ用のスレッドを作ってモニタを持ち続けさせるか、
特にオブジェクトのモニタである必要がないなら java.util.concurrent.locks.ReentrantLock あたりを使う
646 :
デフォルトの名無しさん :2008/05/31(土) 15:08:02
やはり少し手間がかかるんですかありがとうございます。
>>645 イテレーションが目的であって、要素が途中で変更されると困るときはどうするんでしょうか。
例えばjava.util.Vectorのsynchronizedは取得時のみでイテレーション中は変更される可能性があるわけで、これとは少し意味が違いますよね。
>>647 使う側が必要なだけsynchronizedかける
例:
Vector v = ....;
synchronized (v) {
Iterator i = v.iterator();
while (i.hasNext()) {
...
}
}
ああ、そうですね。
650 :
デフォルトの名無しさん :2008/05/31(土) 15:30:06
先頭のスーペースはもしかしてnbsp;をタイプしてるんですか?
専ブラが変換してくれるので自分でタイプしてはいない
>>648 それだと違うインスタンスのロックにならないから、
例えば別のVectorインスタンス(クローンとか)から内部を変更されてしまい、
要求する仕様を満たさないよ。そういうのは見つけにくいバグになるんじゃないの?
>>652 違うインスタンスって何
内部って何の内部
要求する仕様とやらをはっきりさせてくれ
654 :
デフォルトの名無しさん :2008/05/31(土) 15:42:13
↑自分が答えられる範囲を超えるとこのように暴走しますw
655 :
デフォルトの名無しさん :2008/05/31(土) 15:43:12
パッケージについて質問します。 デスクトップ上にTestフォルダを作成し その中にメインの "Test.java" と "DirTestA.java" を置きました。 別階層からTest.javaのオブジェクトを作るため Test.javaに package Test; と書いてimportして作成できたのですが そうするとTest.javaで 同じ階層内にいるDirTestA.javaのオブジェクトを作ろうとしたら DirTestAのシンボルを解決できません。とでます。 試しに DirTestA.javaにも package Test; と書いて Test.javaで import Test.DirTestA; と書いても 解決しません。 どうすれば、同じ階層内でも参照できますか?
656 :
デフォルトの名無しさん :2008/05/31(土) 15:43:39
なんだ。
>>653 は親切そうだったけど実はすぐ発狂するキチガイだったのかww
>652 良く分からないなら無理に指摘しなくても大丈夫です。 問題が起きてから騒いでください。 >655 コンパイルする場所が間違ってるかも Testフォルダがあるフォルダでコンパイルしてますか? (パッケージ名は小文字推奨です。クラス名と区別が付かない等の為) あとは、変更前のclassファイルが残ってる可能性も。
658 :
653 :2008/05/31(土) 15:58:45
別に暴走も発狂もしてないけど・・・ 質問に答えるために必要な追加情報を求めてるだけだよ (言い換えると質問が意味不明)
>>655 ひとつ上のディレクトリから
javac Test/Test.java
ってやってみるとどう?
Hoge{ private int n; Hoge( int i ){ n = i: } } Hoge hoge = new Hoge( 10 );: これに新しい値を入れたい場合 hoge = null; hoge = new Hoge( 100 ); でないとダメですか? null代入せず上から直接 hoge = new Hoge( 100 ); した場合はどうなりますか?
>>660 直接入れても一緒。
null代入は不要。
ですよね、ありがとうございます
C++のnewのイメージとごっちゃになりました たしかC++だと落ちますよね?
C++のnewはdeleteしないと落ちはしないけどメモリリークになる JavaのnewはGCが自動的に解放してくれる
>>658 確かに不明部分があるけど、やってれば分かるようなこの程度のことを詳細に書いてもらったとしても、君程度の技術じゃ答えられないでしょうにww
ところで君はその質問にちゃんと答えられる自信はあるんですか?
666 :
デフォルトの名無しさん :2008/05/31(土) 16:55:43
教えてください。 以下のようなソースを書いたのですが、 ☆のところで怒られてしまいます。 [アクセス可能な型 Swing_main のエンクロージング・インスタンスがありません。 型 Swing_main のエンク ロージング・インスタンスで割り振りを限定する必要があります (たとえば x.new A() で、x は Swing_main のインスタンス)。] ★は怒られないのに何で☆はだめなのというところが知りたいのですが、 public class Swing_main extends JFrame{ public static void main(String[] args) { //コンストラクタでFrame作成 new Swing_main("test"); //メソッドでFrame作成 Swing_test(); } //コンストラクタ Swing_main(String title){ super(title); ★addWindowListener(new WindowEventHandler() }; //メソッド public static void Swing_test(){ JFrame frame = new JFrame("Jframe1") ; ☆frame.addWindowListener(new WindowEventHandler()); } //WindowListener class WindowEventHandler implements WindowListener{ public void windowActivated(WindowEvent e) ・・など } }
>>666 WindowEventHandlerはstatic classじゃないので、外側のクラスSwing_mainのインスタンスが必要
★はコンストラクタ内なのでthisが存在するが、☆はstaticメソッド内なのでインスタンスが存在しないからエラー
669 :
デフォルトの名無しさん :2008/05/31(土) 17:19:39
>>667 さん
回答ありがとうございます!
WindowEventHandler をstaticにしたところ怒られなくなりました。
ただ、☆にはframeというインスタンスがあるんですが、
これだと駄目という部分が理解できません。
そもそもこういうつくりは駄目だということでしょうか
>>669 そのframeはJFrameであって、Swing_mainじゃないし。
もし
Swing_main frame = ..... ;
であるなら、
frame.new WindowEventHandler()
のように書ける。
JAVAにはOpenCVのような画像処理を扱うAPIはありますでしょうか。 OpenCVの移植があれば最高なのですが、ぐぐっても出てこないということは無いのですかね。。
672 :
デフォルトの名無しさん :2008/05/31(土) 17:29:21
駆け出しのプログラマなんだけど、休日とか、書類作成メインの日とか、コーディングしない日があるのが怖い コードを書かないと実力が落ちそう そこで、将棋でいう「詰め将棋」みたいに、シンプルなプログラミングの問題を掲載したサイトとか本とか無い?
>>652 そのVectorに関しての質問です。
cloneで生成したインスタンスから、clone元のインスタンスを操作する方法を教えてください。
よろしくお願いします。
675 :
デフォルトの名無しさん :2008/05/31(土) 17:39:38
Vectorの質問というよりもJavaコレクションフレームワークの全体像から勉強しなおした方がいいんじゃないの?
>>677 paintは、そのコンポーネント自身だけでなく、ボーダーや子コンポーネントも描かないといけないのだけれど、
オーバーライドするとそれが行われなくなってしまうのでマズイ。
swingでは、代わりに protected void paintComponent(Graphics g) をオーバーライドしてください。
679 :
678 :2008/05/31(土) 19:53:30
あぁ、ただし JApplet には paintComponent はありません。 paintComponent を持ってるのは JComponent の子孫だけ。 JApplet に直接描きたい場合は paint をオーバーライドするしかない。 普通は中に swing コンポーネントを配置したいから JApplet を使うのであって、JApplet に直接描くのはあんまりしないと思う。
じゃ、なんでJAppletをswingのパッケージに入れたんでしょうか。混乱しませんか?
Cよりjavaから先に勉強した方がいいの?
興味がある言語からやればいい
685 :
デフォルトの名無しさん :2008/05/31(土) 22:15:20
JFrameにJAppletをaddすべきかどうかいつも悩むんですけど・・ AWTでは全く問題ないのにswingはpaint関連を知っていると、少し変な設計なんですがどう思いますか?
>>685 まぁ別にいいんじゃない?
気になるならFrameの上にJAppletを置けば
てか、JAppletの上にJPanelを引いてなにかするべきだろ? そうすれば同じようにJFrame上でも動作可能になる。
>>686 そうするとSwingのUIから外れちゃいませんか?
JPanelにLinkedList<JLabel>を配置したい場合はどうしたらよいでしょうか?
690 :
689 :2008/05/31(土) 23:13:42
スイマセン、やっぱりもうちょっと自分で考えてみます。
691 :
689 :2008/05/31(土) 23:16:52
自己解決しました。スレ汚し&連投失礼致しました。
>>688 そういう細かいことが気になるんなら、687 の言うように JPanel 上にすべてを構築して、
アプレットの場合はそのパネルを JApplet の中に置き、
アプリケーションの場合はそのパネルを JFrame の中に置くようにすればいいよ
正規表現を使ったプログラムを作っているのですが、 pattern = Pattern.compile("^Java.*"); matcher = pattern.matcher("JavaでHello World"); boolean b = matcher.matches(); System.out.println(b); pattern = Pattern.compile(".*World$"); matcher = pattern.matcher("JavaでHello World"); boolean c = matcher.matches(); System.out.println(c); このとき同じ文字列に1回1回compileとmatcherを使ってしまいます この場合ならPattern.compile("(^Java.*|.*World$)");とまとめれば済みますが これをもっと多数(50とか60とか)に増やすときにはものすごく長くなってしまうと思います なんとかスッキリまとめる方法はないですか?
正規表現はそれだけで1冊の本が出るように別の言語と思え
50個追加していき
"ab"+"cd"+"ef"...
とやればよい。
そのUIってのは、Menuとかがswingらしくなくnative依存という事だと思うんだけど。
で、
>>687 はそういうことを言ってたのか。オレの強力なエスパー使っても分からなかった・・
>>695 つまりPattern.compile("^Java.*"+".*World$");というように記述すればいいのですか?
>>693 その質問内容だと、「愚直に|で繋げ」、としかアドバイスできないと思
う。長い正規表現の記述が長くなるのは当たり前。
やりたいことをもっとハイレベルに書けば、正規表現とは違ったスマー
トな解決方法もあるかもしれない。
>>693 ふと思ったのだが、文字列を1行にしようとしてないか?
"(^Java.*"
+"|.*World$)"
って2行にして書いてもコンパイル時にまとめられるから"(^Java.*|.*World$)"と同じ事だぞ。
用途を拡張したいということだろ ただつなぐだけなら誰でも分かる話
700 :
693 :2008/06/01(日) 02:18:15
やりたいのはテキストファイルを読み込んで1行ごとにパターンマッチしてるかを 判定していくプログラムですね ただ、パターンが大量にあるのでそれをソースコードの中に全部書いていくのは 無駄が大量なのではないかと疑問に思ったしだいで チェックしたいパターンを別のファイルに記述しておいて そのファイルを読み込むという方法も考えましたが、改行文字の処理が面倒そうですし
ほとんどの場合に最初の方のパターンでマッチするから、後のパターンは無駄になる事が多いって事かな。 なら、 >チェックしたいパターンを別のファイルに記述しておいてそのファイルを読み込む でもいいと思うけど。配列にした方が早いかも知れんが。 >改行文字の処理が面倒そう これが良くわからん。BufferedReader#readLine()で1行ずつ読むだけだと思うのだが、何かまずいのか?
そこまで考えてやることもないだろう。
>>702 1行ごとに
^Java.*
みたいなのを書いていったファイルを読むと考えていますが
readline()は改行文字を読まないんでしたっけ?
それなら1行呼んでそれに+していく方法に問題は無いんですが
APIドキュメントを読むのは基本 基本が出来ないやつはいつまでたっても馬鹿
>>705 申し訳ございません
このような愚行でスレを汚してしまったことを深くお詫びします
>704は無視していただいて構いません
ファイル名とかは含まず、画像内容そのもののダイジェストを求めたくて、
↓作ったけど、もうちょっと最適化できないでしょうか?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30326 ファイル名とかパスを除くための、
特に46〜50行目ぐらいの↓が無駄な気がするけど、いい案が思い浮かばないです。
// (1)Normalize
BufferedImage bimg = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_3BYTE_BGR);
Graphics g = bimg.createGraphics();
g.drawImage(icon.getImage(), 0, 0, null);
ImageIcon normalize_icon = new ImageIcon(bimg);
パス or URLが示す(画像)ファイルに含まれるデータのハッシュを使わない理由は?
>>708 圧縮形式の違いは無視したい。
PNGやBMPとか、クリップボードから取り込んだイメージとかとか
デコード済みの画像から作りたいです。
どういう最適化を望んでいるのかによる。
無駄なコードや、性能とか ImageIconからシリアライズ可能なイメージ情報だけ取得したり できないのかなと思ったのだが、無い?
>>709 java.awt.image.PixelGrabber つかって画素データ取り出してから
画素データのハッシュ値計算すりゃいいんでは?
>>707 これでどう
static byte[] getImageHash(String path) { return getImageHash(ImageIO.read(new File(path))); }
static byte[] getImageHash(URL url) { return getImageHash(ImageIO.read(url)); }
static byte[] getImageHash(BufferedImage image) {
int[] pixels = new int[image.getWidth() * image.getHeight()];
image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth());
return MessageDigest.getInstance(HASH_ALGORITHM).digest(pixels);
}
714 :
デフォルトの名無しさん :2008/06/01(日) 13:50:51
型変換についてなんですが スーパークラスA, それを継承しているサブクラスBがあるとして 明示的なキャスト変換以外に 型をスーパAからサブBに変換する方法はありますか?
>>714 Visitorパターン、またはダブルディスパッチ
717 :
デフォルトの名無しさん :2008/06/01(日) 23:26:06
testフォルダをルートとして その中にtestaとtestbのフォルダを作って testaフォルダの中にあるjavaファイルから testbのフォルダの中にあるファイルデータaa.textを ロードする場合の指定は testb/aa.textでいいでしょうか? 実行すると java.lang.NullPointerException Exception in thread "main" java.lang.IllegalArgumentException: input == null! という例外が出るんですが
フォルダ云々じゃなくてまずはパッケージの概念と実行する時のクラスパスに関して勉強して来い お前の質問じゃ、それでもいいともそれではダメともどちらでも取れる
>>717 説明の文章だけ読むと ../testb/aa.txt
* Returns a shallow copy of this <tt>ArrayList</tt> instance. (The * elements themselves are not copied.) public Object clone() { ArrayList<E> v = (ArrayList<E>) super.clone(); v.elementData = Arrays.copyOf(elementData, size); これ、ディープ・コピーじゃないんですか? 以前のソースがないので分かりませんが、clone()の実装がバグってるんでしょうか。
>>721 6のArrayListの実装?
どうみてもシャローコピーなんだが。
super.clone()
は継承元ではオーバーライドされていないからObject#clone()呼び出しと同義だし、
v.elementData = Arrays.copyOf(elementData, size);
は単に各要素への参照値をクローンしたArrayListの方にコピーしているだけでしょ?
コメントにも要素自身はコピーされないって書いてあるやん。
v.elementData = Arrays.copyOf(elementData, size); これでしょ問題なのは。 v.elementData = this.elementData シャローコピーといえば、普通はこうじゃないの? オブジェクト(クラス)がArrayListだから、クラスの意味からすれば オブジェクトのフィールドにある配列の内容の方もコピーするってのは分からなくもないけど、 シャローコピーは配列の参照だけコピーで内容はやんないんじゃなかったか。
> v.elementData?=?this.elementData > > シャローコピーといえば、普通はこうじゃないの? コピーになっとらんがな。
>>723 そもそも
> * Returns a shallow copy of this <tt>ArrayList</tt> instance.
をわざわざ引用していたり
> clone()の実装がバグってるんでしょうか
などと言っているところからみて
> ディープ・コピーじゃないんですか?
は配列のコピーうんぬんの話でなく
ArrayList#clone()のことを質問してるんじゃないの?
>>724 要素が変更されたらおかしくなるし、確かにコピーになってない。
そうするとコレクションに限っては、cloneの仕様を満たすのは、やっぱこれでいいじゃないの?
727 :
デフォルトの名無しさん :2008/06/02(月) 08:10:54
これだとコンストラクタと同じだし、cloneを実装したSUNの意図がイマイチわからん。 継承しても、cloneを再実装しようかどうか迷うじゃん。
>>727 インスタンスメソッドである事に意味があるんじゃね?
コンストラクタは型わかってないと呼べないし。
>>728 インスタンスなら、キャストしないといけないから結局はキャスト先の型がわかんないとダメでしょ。
リフレクト使うのもいいけど、そうれなら全て継承元の(ArrayList)のキャストになってしまう。
型分かってんなら、継承していてもいなくても、ArrayListのコンストラクタでいいでしょ。
イマイチわかんないな。
cloneが実装されている標準のクラスはあまりないから馴染みないけど、どういうときに使うんだ?
>>729 (T)arraylist.clone() のキャスト先の型Tは
T extends Cloneable & List みたいちょっとだけでも抽象化できる。
コンストラクタ呼ぶ時ほど具体的な型名は必要ない。
>>727 配列の clone() と似た動作を目指しただけだと思うが。
片っ方を変更したら、もう片方も変更されるようなものが欲しければ
List#subList(int, int) 使えって言われるだろうし。
インスタンスメソッドでArraylListであることは最低限保証できるってことだと思う。 それなら、cloneじゃなくてdupとか別の名前でもいい気がしたけど Vectorのころにcloneを実装しちゃったからその名残かな。
733 :
デフォルトの名無しさん :2008/06/02(月) 15:10:46
Appletが起動したらTextFieldにカーソルが点灯している状態にしたいのですが 教えてください。FrameやWindowはつかってません。
734 :
デフォルトの名無しさん :2008/06/02(月) 15:53:18
>v.elementData = this.elementData シャローコピーならこれでコピーされてるでしょ。 どうせコピー元が変更されたり追加されて内部の配列の参照が変更されても、 コピー先はその時点での状態がコピーできればいいんだし。 コピーになってないとかいって、意味わかんないな。 v.elementData = Arrays.copyOf(elementData, size); でも実質同じだから冗長と言えなくもない。
736 :
デフォルトの名無しさん :2008/06/02(月) 17:24:05
sample.jsp <%@ page contentType="text/html;charset=Shift_JIS" %> <%! String a=""; %> <% //↓これを書くとjsp:paramで何故かエラー request.setCharacterEncoding("JISAutoDetect"); a=request.getParameter("nam"); %> <html> <head> <title>sample</title> </head> <body> <jsp:include page="include.jsp"> <jsp:param name="param" value="<%=a %>" /> </jsp:include> </body> </html>
737 :
736 :2008/06/02(月) 17:26:02
include.jsp <div align="right"> <%= request.getParameter("aaa") %> </div> 実行結果: org.apache.jasper.JasperException: An exception occurred processing JSP page /sample.jsp at line 16 (16行目は<jsp:include page="include.jsp">の行です) 何故かjsp:includeでUnsupportedOperationExceptionになるんですが。 <jsp:include page="include.jsp" />と閉じると何事も無く実行され、 request.setCharacterEncoding("JISAutoDetect");をコメントアウトしても実行できます。 なぜでせう?
super.clone();使ってるから v.elementData = this.elementData の代入すら必要ないんじゃないの?
何かアプリケーションを作りたいと思ってJavaで開発用エディタを作ったのですが、 これを個人毎に文字の色とかコンパイラのURIとかの各種情報を保存して 起動時に設定するようにしようかと思ったのですが、 こういう設定の保存ってどういう形式で行うのが普通なのでしょうか? 「設定.txt」とかいう形で保存するのも何か変な気がします。
サンプルプログラムでは、*.propertiesが多いね
742 :
デフォルトの名無しさん :2008/06/02(月) 19:11:39
そのclone()についてなんですけど、java.lang.NumberやStringなどはclone()実装されてないのがよく分からないんです。 コレクションの方はclone()あるのに、値の方はなんでないんでしょうか。 それもthis用のコンストラクタとでも言うのか、それ用のコンストラクタすら用意されてないのもあり、 もしコピーするならかなり遠回りな操作をしなければならないですよね。 イミュータブルだとしても、classもfinalのも多く、設計上に意図としてはインスタンスのコピーはするなってことなんですか?
> イミュータブルだとしても、classもfinalのも多く、設計上に意図としてはインスタンスのコピーはするなってことなんですか? Immutableなオブジェクトのコピーとって何したいの?
744 :
デフォルトの名無しさん :2008/06/02(月) 19:31:05
内部が変更できるかどうかじゃなくて、インスタンスのコピーの話なんですけど、ごっちゃにしてませんか?
何したいとかじゃなくて、そもそもそのAPIがないなら何も出来ないでしょw
>>742 cloneを実装してないのは、たぶんイミュータブルなインスタンスをコピーできても、うれしいことが特に無いからじゃないかな
finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない
748 :
デフォルトの名無しさん :2008/06/02(月) 20:02:07
>finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない こういうこと平気で書いちゃうあたりが、イミュータブルとかextendsとかを分かってないんだろうね。 インスタンスとcloneも同じく、ごっちゃにしてるんだろうw
>>742 もし仮にNumberやStringをコピーできるとしたら、それがどんな場面で役に立つ?
>>741 ありがとうございます!
propertiesをキーワードにググって実装してみたところ出来ました!
>>746 すいません、やっぱり.txtで保存するのはおかしいですよね;
直感的に変なのは分かるのですが、テキストファイルだとデータと値の関係がないとか、
そういうことが.txtを用いない理由なんでしょうか?
751 :
デフォルトの名無しさん :2008/06/02(月) 20:29:52
>>749 仮にも何も、もう設計上出来ないんだよ。
まあ書いてもいいんだけどね(笑)
インスタンスをコピーするってことはどういうことなのかをよく理解すればいいんじゃないの?
752 :
デフォルトの名無しさん :2008/06/02(月) 20:30:47
>finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない こういうこと平気で書いちゃうような人だしなぁw
>>751 俺がバカだからか、よくわからないので教えてほしい。
インスタンスをコピーするってことはどういうことなんだ?
コピーなんかせずに同じインスタンスを使えばいいじゃないか?
>>750 いや、スゴい事ってのは
>Javaで開発用エディタを作ったのですが、
の部分。
質問するより答える立場の人でしょ。
>>721 に戻ると、
・これは普通shallow copyと言わないのでは?
という話だよね。たしかに「オブジェクトのshallow copy」とは言えない。
フィールドにぶらさがったものを複製しているからね。
でも、「(このオブジェクトが表している/保持している)配列のshallow copy」ではあるでしょ。
参照の羅列としての配列を複製しているだけで、配列の要素をいちいち複製していないから。
〜 完 〜
てことじゃないのかい
> 配列の要素 配列にぶらさがっているオブジェクト と言った方がいいか
757 :
デフォルトの名無しさん :2008/06/02(月) 21:21:20
clone()したくローン先の方で変更したら、クローンもとのオブジェクト でも変わる事が期待されるでしょ。 o2=(...) o1.clone (); o1.set (1,val) シャローコピーって書いてあるなら、このときo2, o1の保持してるvalは同じであってほしいよね。 今さらだから、APIドキュメントの方をそう書き直せばすむんじゃないの? 確かVector.clone()の記述はそんな風に書いてあった(jdk 1.5だけど)。 ドキュメントにうそ書いてあると、実装するとき困るんだよ。
>>757 > clone()したくローン先の方で変更したら、クローンもとのオブジェクト
> でも変わる事が期待されるでしょ。
クローンを殴ったらクローン元も痛みを共有するわけですね、わかります
>>721 > (The elements themselves are not copied.)
って但し書きの意図を汲めば、まー、まず迷わないと思うんだけどどうよ。
でも、ここで「elements」を「参照」ではなく、「参照先のインスタンス」だと解釈しなければならないってのが、
微妙といえば微妙なのかな。ふつうわかるんじゃね?名前を書き写さずに何が名簿のcloneなのかっていう。
>>757 > シャローコピーって書いてあるなら、このときo2, o1の保持してるvalは同じであってほしいよね。
全然思わない。(一応言っておこうw)
760 :
デフォルトの名無しさん :2008/06/02(月) 21:58:51
ああ、わりい。飯食ってた >clone()したくローン先の方で変更したら、ローンもとのオブジェクト 気がつかなったかけど笑えるね。たぶん自己破産の相談なのかな? >全然思わない。(一応言っておこうw) 長年使ってると、全然思うのが、まあ普通なんだけどw その挙動がArrayListにふさわしくないなら、clone実装すんなってこと。もしくはAPI DOCのバグを書き直せ。 どうせ翻訳の人も見てんだろうしSUNに言っといてよ。頼むよ。
761 :
デフォルトの名無しさん :2008/06/02(月) 22:03:40
>>754 >Javaで開発用エディタを作ったのですが、
実はTextAreaをaddしただけでも、偉そうに言えばこうもいえるんじゃないの?
どう凄いのかわかんないんだけど。
>>760 一応言うだけ言ってみるけど、トリップつけてくれないかな
763 :
デフォルトの名無しさん :2008/06/02(月) 22:27:39
なんで?
無視したいから
>>760 >長年使ってると、全然思うのが、まあ普通なんだけどw
悪いけど風呂入ってくるから、全然思わないにもう一票入れておいてよ
>>754 ,
>>761 開発用「エディタ」なので、ホントIDEみたいに立派なもんじゃないです><;
インテリセンスとかキーワード色分けとかオートインデントとか
IDEの中で自分が欲しい部分だけ取って軽く書きたいときに使う用に作った程度です。
普段はC/C++畑でJavaは全然なので、勘違いさせてすいません。。
質問です。 Component.createImage(int width, int height); でcreateImageしたのですが、これに透過色を設定したgifファイルをdrawImageすると透過される(ハズ)の部分が白で塗りつぶされた状態になってしまいます。 試しにcreateImageを使わないでただgifファイルをdrawImageすると透過はされていたのでgifファイルには問題がないように思います。 また、createImageしたImageにgifファイルを書き込まずImageをdrawImageしても白で塗りつぶされてしまっています。
>>767 component.getGraphicsConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
でイメージを作って、gifを乗せる前に
((Graphics2D)g).setComposite(AlphaComposite.Src);
するといいよ
>>757 > clone()したくローン先の方で変更したら、クローンもとのオブジェクト
> でも変わる事が期待されるでしょ。
期待されない。
> 確かVector.clone()の記述はそんな風に書いてあった(jdk?1.5だけど)。
書いてない。
> Returns a clone of this vector. The copy will contain a reference to a clone of the internal data array,
> not a reference to the original internal data array of this Vector object.
>>768 ご丁寧にどうもありがとうございます。
無事透過したまま書き込むことができました。
それにしても他のソースで使ってるコードなのに突然動作が変わるなんてなんだか怖いです。
精進します・・・。
>>757 > clone()したくローン先の方で変更したら、クローンもとのオブジェクト
> でも変わる事が期待されるでしょ。
それをしたいなら、o2=o1;でいいよーな。
charにnullが代入できない。 納得いかない。 char test1 = ''; char test2 = null; どっちも駄目なんだよな。
納得いかないかもしれないが、そういうものだと思って使うしかない。
新しいプログラミング言語が生まれることを期待したい!!
新しいプログラミング言語はすでに色々あると思うけど・・・ C#などはいかが?
>>772 > char test1 = '';
これはないでしょw
Unicodeだっつってんだからその範囲内でなんとかしようよ
Character c = null;
778 :
772 :2008/06/03(火) 01:13:41
返信ありがとう。 int型にもnullを代入できないや・・・。 昔は代入できたよね? 勘違いかな?
>>772 あそうか、「何charにnull突っ込んでんのww」と未熟者に突っ込む機会喪失問題か
違ったらしいなw
␀
782 :
デフォルトの名無しさん :2008/06/03(火) 01:32:05
web.xmlの<servlet>タグでサーブレットのクラスを指定すると、それまでアクセスできてたjspにアクセスできなくなるんですけど、、なんで!?
>>778 nullは参照型のリテラルであり参照型からプリミティブ型への暗黙の型変換は
プリミティブ型のラッパークラスからのauto-unboxingによるもの以外にない
784 :
778 :2008/06/03(火) 02:37:23
>>783 暗黙の型変換を使えば、プリミティブ型にnullを代入出来るって言ってるのかな?
ちょっと判り難かったから・・・すみません。
とりあえず有難う。
もう寝なきゃ・・・。
785 :
デフォルトの名無しさん :2008/06/03(火) 02:39:33
>>769 君、しつこいよ。荒らしと同じだよ。
そういう君独自の解釈はもういいから、早くSUNの翻訳担当の人に言っといてよ。
>>783 場を和ませたい人がいるのか、たぶん釣りだと思うんだがww
788 :
デフォルトの名無しさん :2008/06/03(火) 02:59:29
>>787 一日中2CHに張り付いてんですか…邪魔する気はありませんけど、ホント、ご苦労なことですね…
>>784 釣りじゃなくてマジ?
プリミティブ型にはそもそもnullという概念自体存在しない。
もしSQL流のNULLがJavaにあったらキッツイ気がするな
>>772 charに無効な値を入れたいなら、U+FFFFというソレ用のコードポイントがある。
792 :
784 :2008/06/03(火) 11:35:32
>>789 大マジまんだけど、でもようやく理解できた。
int型にnullへのポインタ突っ込むのは無理があるもんな。(遠い昔C言語をやっていた頃の記憶を呼び起こした。間違ってるかも。)
>>791 それ使える。
int(Unicode補助文字)ならU+FFFFFFFFって訳ね。
793 :
784 :2008/06/03(火) 11:43:15
nullは-1でいいのか?0がいい感じの気がするけど。
j
一貫してれば具体値は何でもイイよ。
質問させてください。 Eclipseの使用を考えています。 そのためには、どの程度のPC性能が必要ですか? 現在使用中のPCは、 CPU Pentium4 3.0GHz MEM 1Gbyte です。
どなたかご教授願います。 ------------------------------- class sample1 { public static void main(String args[]) { double ans3 =(double)5/3; System.out.println("5÷3は" + ans3 + "です。"); } } --------------------------------- 上のようなソースがあるとして、 5/3の前に(double)の表記を入れる理由というのはなぜなんでしょうか? すでにdouble ans3 のところでdoubleと書いてあるのでans3には、 ちゃんと小数点が含まれた答えが表示されると思うのですが。 もしかしてアホすぎる質問でしょうか
>>797 大丈夫だと思うが、とにかく落としてきて軽く動かしてみ
どのぐらいが「快適に動かせる」と感じるかは、個人差がある
800 :
797 :2008/06/03(火) 20:34:03
>>799 > 大丈夫だと思うが、とにかく落としてきて軽く動かしてみ
とりあえず動くようで安心しました。さっそく、インストールしてみます。
回答ありがとうございます。
>>598 5/3するときにはそれがdouble型に代入されるなんて気にしちゃいない。
つーか、思ってるだけじゃなく、キャストのありなしで結果が違うことくらいは試せ。
>>802 ありがとうございました。
これで寝れそうです。
設計に関して質問があります。 今作っているソフトの中でJButtonやJTextなどのオブジェクトが多数出現します。 こうした場合配列にしておくと JButton button[]=new JButton[BUTTONNUM]; for(int i=0;i<button.length;i++) { button[i].〜 } みたいに一括で処理できるものもあるので便利なのですが、 個別の名前(例えばdeletebutton)を付けた場合に比べて button[1]、button[2]では何のボタンか分かりづらい面があります。 こういう場合、一般的にor皆さんの場合どうしているか教えてください。
ちなみに今現在の処理方法ですが、 HashtableとgetIndex(String)という関数を作って、 Hashtabel hash=new Hashtable(); hash.put("delete","0""); hash.put("prev","1"); ・・・ public int getIndex(String buttonname) { return Integer.parseInt((String)hash.get(buttonname)); } button[getIndex("delete")]という風にしています。
自分では使ったことのない機能: enum MyButton { DELETE, ... } ... button[MyButton.DELETE] ... (いきなり質問の条件を無視してみる)
>>806 そういうハッシュテーブルの使い方をするくらいなら、
間接的に配列のインデックスなんかに結びつけるんじゃなくて、
HashMap<String, JButton> buttons = new HashMap<String, JButton>();
buttons.put("delete", new JButton());
buttons.put("prev", new JButton());
...
buttons.get("delete").〜
みたいに名前とインスタンスを直接結び付けておいてもいいような。
>>805 のように一括して処理したいようなループを回すときは、
for (JButton button : buttons.values()) {
button.〜
}
のようにできるし。
>>807 たぶんそれコンパイルできない
Cの列挙型ではないからもしやるならbutton[MyButton.DELETE]でなくbutton[MyButton.DELETE.ordinal()]だ
>>805 個別の名前をつけて配列にも入れておけばいいじゃない
JButton deleteButton = new JButton();
JButton prevButton = new JButton();
...
JButton button[] = { deleteButton, prevButton, ... };
811 :
デフォルトの名無しさん :2008/06/04(水) 08:45:22
ボタンいくつ貼り付けてるの?
>>810 たぶん、そういう生成もループで済ませたいんじゃないかな。わかんないけど。
たしかに「多数」ってどのくらいなのか気になるw
>>805 一括に処理したいというのと個別に名前で指定したいという要求はバッティングするんじゃ?
本当に希望しているのは、個別に指定したいけど、コード量は減らしたいってだけじゃないの?
それなら、
private JButton getButton(String name,...){}
JButton delete = this.getButton("削除",...)
みたいなビルダーメソッドを作ればいいのでは
814 :
805 :2008/06/04(水) 12:57:50
皆さんありがとうございます! ですね、一括で処理したいのは生成も含めて、 パネルへの追加とかフォントの指定とかまとめて共通の処理を行う部分で、 個別に判断する所というのはActionListenerを実装したりする部分なんかです。 色んな方法を聞けて勉強になりました、列挙体に至ってはJavaであることを知らなかった…。 今日学校からやってみます、本当にありがとうございます! ちなみにリネーマ&ファイル整理用のプログラムなのでボタンは今は プレビュー、リネーム、ファイル検索、削除、移動、ディレクトリ表示くらいですが、 テキストフィールドの方が ワイルドカード、正規表現、前方一致、後方一致、ユーザ定義用etcとたくさん指定出来るように作ってあって11個くらいといった感じでしたw
>>57-58 を見て思った。
>>57 のような意味不明なレスをすると自分のレス番号が該当になったとき
>>58 のように「おかしい」とおもわないといけない儀式でもあるのか?
おかしいと思ってる
>>58 まったく理解できないのだが。
別の意味でおかしいとは思うけどさ
君がThreadとか理解してるなら気にしなくていいんじゃない?
817 :
デフォルトの名無しさん :2008/06/04(水) 17:09:58
結局ビルダーパタンで落ち着いたのね。 せいぜいそれぐらい(11個)とか思ったけど、チェックボックス(とラベル)が100個超えてるUIのパターンもあるから。 それならソースコード11行とか100行にわたり書けばいいんじゃないかと思うけど。
818 :
デフォルトの名無しさん :2008/06/04(水) 17:27:06
ここで聞くことかどうかわからんが。 大昔、いろんなラベルがついた箱が線でくっついて うにゃうにゃ(バネモデルか何かで)動くデモってのを見た記憶があるんだが、 うまく見つけられなくて困り中。 誰か在処か名前をご存じでしたら教えてください。
スレッド番号100から、スレが経った日付を列挙してみた。 100 2007/03/31 101 2007/04/30 102 2007/05/29 103 2007/06/27 104 2007/07/27 105 2007/08/28 106 2007/09/19 107 2007/10/18 108 2007/11/07 109 2007/11/25 110 2007/12/15 111 2008/1/13 112 2008/2/8 113 2008/3/1 114 2008/4/5 115 2008/5/12 Javaスレの進行速度は月1ペースか。今から4年ほど前はスレが50くらいだったのに 急激にスレの消費速度が加速していって2007年3月末の時点で100になったときは そのスレッドの消費速度の速さには驚いたものだ。 Java登場当初にはAppletの影響でJavaは遅いなどと言われC/C++プログラマの間でも 不評が多く、プログラム板、プログラマ板で頻繁にJava叩きが行なわれていたにも関わらず、 これほどにまでJavaの知名度の人気が上がるとは誰が予想しただろうか。M$が2000年にC#を発表した とき、一部の者やM$の関係者は、「これからはC#が普及し、Javaは衰退する」と言っていたにもかかわ らず、あれから8年経った今でもJavaは衰退する様子を見せず、後から登場したC#はほとんど普及し ていないという有様。 気がつけばJava関連の求人も毎年毎年増え、Javaだけでも食うに困らない状況にまでなった。 書店のコンピュータ関連書籍コーナーにはJavaだけで占められた本棚が大きく占有していった。 今では書店ではAjaxやWeb関連書籍が多いが、WebにJavaを利用することはもはや当たり前に なった感がある。M$のC#を揺るがした背景にはGoogleの影響が少なからずあるのではないかと思えてくる。
この調子で行けば、2010年にはスレは スレは12月で122、2009年1月で123、2010年1月で135、2011年1月で147、 2012年1月で159、2013年1月で171、2014年1月で183、2015年1月で195、 2016年1月で207、2017年1月で219、2018年1月で231、2019年1月で243、 2020年1月で255にまで伸びるだろう。 その頃までに、2chがあるのか、今の2chが存在しうるかどうかはわからないが。 blogなどの外部のコミュニティに徐々に質問者が移行するときがやってくるだろうか? Javaは何十年経っても古いプログラムを動かすことができる。 だからその頃にこのスレがなくなってもJavaは相変わらず健在だろう。
>>815 なんか口に出さないで指指された気分になるじゃん。
m9(^Д^)
懐かしいAAだな
823 :
デフォルトの名無しさん :2008/06/04(水) 18:25:57
4年も張り付いてるみたいだしw
824 :
デフォルトの名無しさん :2008/06/04(水) 18:29:03
月に50万円稼ぐ派遣の狼君が捕まっただろ。 人殺し食っちゃったんだっけな? C++/C#好きで、宗教(GNU?)狂信者だって噂だよw そんなやつと同じにされてもね。
825 :
デフォルトの名無しさん :2008/06/04(水) 18:32:36
どこかのIT記事で「天才20歳(何々賞受賞!)」とかの奴もいたけど、似たような狼君じゃないの。
>>818 JDKに付いてるデモなら多くないんだから順番に試していけばいいじゃないかw
たぶんアプレットのデモの中のGraphLayoutかな?
827 :
デフォルトの名無しさん :2008/06/04(水) 18:44:38
>>808 >そういうハッシュテーブルの使い方をするくらいなら、
そういうひねくれた方法を見つけるほうが実は凄いんだけどね。(実用でもないし、使わないけど)
>>806
>826 おお、まさしくコレだ。 てっきりLayoutManagerがらみかと思ってスルーしてた。スマン&&ありがとう。
830 :
デフォルトの名無しさん :2008/06/04(水) 19:18:13
バグの元になるでしょ。
>>824 おいおい、マジかよ。なんでそこまで知ってるんだ。
どこかのスレで話題になってるのか?
> するくらいなら
だから本当は
>>808 みたいなのもアレだけどハッシュならハッシュで別に添え字を値にしなくてもってことじゃない?
しかも整数値でなくてわざわざ文字列を値にしているし
>>833 誰かみたいに死体の肉を食べちゃったわけじゃないし、まーいーじゃん。
>>823 張り付くってどういう意味か。久しぶりにJavaスレを見たんだけどな。
気がつけばスレがここまで進んで驚いているんだよ。
2chで初めてJavaスレに書き込みをしたのは
もっと前だけどな。
>>834 なんとなくどこのスレかはわかったが。
誘導スレを紹介してくれないか
838 :
デフォルトの名無しさん :2008/06/05(木) 02:48:44
ここはスルー? 助言求む!
>838 おまい誰だよ。煽りとかじゃなくてマジで
誤爆か?
つまんねー
swingプログラムの中でメニューやボタンから別のウィンドウを表示させる際に class Window2{ Window2(String title){ JFrame frame2=new JFrame(title); ・・ frame2.setVisible(true); } } こういう風にもう一つのクラスを作ってnewした場合、 setCloseOperation(JFrame.EXIT_ON_CLOSE)を設定すると 呼出し元のウィンドウも含めてプログラム全体が終わってしまいます。 WindowListenerで設定しようかと思ったのですが、 明示的に破棄するウィンドウを指定するにはどうしたら良いのでしょうか?
DISPOSE_ON_CLOSE のこと?
DISPOSE_ON_CLOSE 相当の処理を自分でやりたいってことなら、 DO_NOTHING_ON_CLOSE にして windowClosing で dispose を呼ぶ
>>843 あああすいません、それですね!
何かハンドル渡してウィンドウ指定して破棄みたいなやり方かと思ったらあったのかorz
>>833 添え字というかなぜかStringになってるところが
かなりヤバイね
847 :
デフォルトの名無しさん :2008/06/05(木) 14:45:25
JSONみたいにXMLのマージを行うことの出来るJavaのライブラリってある?
eclipseでJavaの開発を始めたばかりのひよっこです JUnitの使用に慣れておけ、と言われました 明日一日使ってJUnitの勉強をするつもりですが、参考になるサイトがあったら教えてくださいです
いった奴に責任があるからそいつに聞いておくんなさいまし。
サンのJDKとOPENJDKってやつは同じものなの? どっちもフリーで使える?
>>721 今更だけど。。もしそこで内部の配列をコピーしなかったら、
要素が増えて拡張されたときに一方の配列がとりかえられて、泣き別れになるよね。
ていう以前に要素数のカウンターが別管理になるか
JUnitとか意味ない
大体、単体テストツールの使い方なんて 教えてくれるもんじゃないの?
JUnitの使い方だけ覚えてもServletやDBやHTTPセッションのテストは 容易ではないからなあ。 JUnitだけでなくJakarta Cactus、DBUnit、HTTPUnit、MockObjectの 使い方まで覚えないといけない。 どうせならTestNGも覚えておくことをお勧めしておく。 JUnitはJUnit4が出たのでそれも覚えておくことをお勧めしておく。 ついでにAntやMavenからJUnitを起動する方法も覚えておくことをお勧めしておく。
JUnitとかのテストツールの使い方覚えるよりも、テストの書き方覚えたほうがいい。
テストの書き方はチーム内のルールがあるのでは? ↓ 「JUnitに慣れておけ」と言った当事者に質問しろ
つまり名目的なJUnitのパターンを研究すれば回避の道が開けるかもしれないわけか
Cactus や HttpUnit は、めんどくさいだけで あまり意味がないと思うのが本音。 テストケースを通すばかりのクラスになり、画面を見れば一目瞭然の問題の エラー、あるいは仕様的にグレーだけど明らかに改善したほうがいい問題 に気がつかないことが多い。 テストケースの作り方が悪いのだろうけど。あと見た目の問題とか。 顧客に「テストの時間一杯取ったのに、こんなのにも気づかなかったの?」と怒られる。 うちのチーム(Webアプリ)は、Unit テストは Serviceクラス、Utility クラス、DAO まで。 UI レイヤ(Struts だったら、Actionクラス、ActionForm、jsp)は、Excel でテスト仕様書起こして 手でやっている。 ケントベックの言う、「いつでも、再帰的にテストをできるようにする」はUIレイヤでは実現できてないけど、 このやり方が、かけるコストと、目的に対する効果が一番バランスが取れていると思っている。 テストクラスの実装にいつも時間がかかるのをどうにかしたいと思っていて、 slenium とか fitness という単語は知っているのだけど、まだ試してみてない。 というわけでみなさんどうしてますか?
ほぼ>861と同様だけど、DAOは検索系しかやらんな。 S2Daoなり使っていると特に。 逆に画面系は入力チェック系だけはHttpUnitとか使う
>>861 一番面倒くさいのはCactusだな。
そんでみんなしてMockObject使って
HttpServletResponseとHttpServletRequestオブジェクトを偽装して
Servletのテストしているんだよな。
>>861 Seleniumでググってみたら
これはなかなか使い勝手がよさそうだ
865 :
デフォルトの名無しさん :2008/06/05(木) 22:37:29
あんこ1 あんこ2 あんこ3 あんこ4 あんこ5 あんこ6 あんこ7 このようなテキスト構成のときに 以下のように、改行が2つ続くとき改行したいのですが どのような制御をすればよいでしょうか あんこ1、あんこ2、あんこ3、あんこ4 あんこ5、あんこ6、あんこ7
テキストはファイルからか? readLineで空文字だったらフラグを立てる 次も殻文字だったら改行する ってループではどうかね
あんこってなんだ? うんこのオマージュか?
マルチ氏ね
はわわー
871 :
デフォルトの名無しさん :2008/06/06(金) 12:56:12
基礎的な質問で申し訳ないのですが HTTPURLConnectionのtimeout,wait,retryの上手なやり方が有ったら教えていただけ無いでしょうか TimeoutExceptionを活用すべきなのかどうかも分からない素人です どうかお願いします
まずTCP/IPとHTTPを学んで来い話はそれからだ
あるjavaアプリがあって、一連の処理がどのようなクラスのメソッドを実行してきたかをダンプしたいと思っています。 Linuxでいうところのstrace見たいなものです。 プロファイルというものを知りましたが、使用されてメソッドのサマリの表示だけで、 呼び出し順番がわかりません。 実行した順番に呼ばれたメソッドをダンプできる方法はありますでしょうか。
874 :
デフォルトの名無しさん :2008/06/06(金) 13:54:14
872 分からないなら無駄な返答は不要です
>>872 Thread.currentThread().getStackTrace() を使う。
あとはデバッガで起動するとか。
876 :
875 :2008/06/06(金) 13:59:52
877 :
871 :2008/06/06(金) 14:14:13
あさっての答えが返ってきたかと思ってびっくりしたよ 気をつけてね
Java "execution trace" みたいな話じゃないの。
JavaでWinのexplorerみたいなのを作りたいのですが、 どうしたら実装出来るでしょうか? 左の方はJTreeで頑張れば出来そうなのですが、 右の選択したディレクトリの中身が表示される部分がよく分からないです。
JListでいいんじゃ?
>>875 それは可能なのですが、ダンプをしたいまま差にそのときの、になってしまいます。
一連の処理(時間)の間に呼ばれたメソッドの履歴が取得したいです。
詳しくは解かりませんが、下記のページで実行結果からシーケンス図を作成しています。
イメージとしては、これのメソッドリストがほしい感じです。
AA.aa()
BB.aa()
AA.bb()
…
eclipse に ajdt というプラグインを入れて、 AspectJ というのを使って関数の前後でログ出力をするようにしてみたのですが、 eclipse でデバッグするのがやりづらくなりました。 ブレークポイントをはりつけても目的の処理でブレークするのが うまく出来なくて困っています。 AspectJ を使ってもデバッグしやすい方法があったら教えてください。
>>881 デバッガに詳細トレースログを取る機能が無いか確認。
無いなら JPDA 使って自分でデバッガを作る。
OpenJDK って Sun の JDK の代わりとして充分使える?
w
javaのGuiにおけるレイアウトがさっぱりで全然やりたいレイアウトに出来ないので質問させてくださいorz 画面を縦三分割にしたいのですが、それぞれ等隔ではなく真ん中は広く、 またそれぞれの横幅を縮めたり伸ばしたりするレイアウトにしたいのですが こういうのってどうしたら出来るのでしょうか?
真ん中は引き延ばすってこと? それならBorderLayoutでも十分そうだけど・・・ 手打ちならGridBagLayoutとかSpringLayout使えばかなりのレイアウトは実現できるよ。
888 :
デフォルトの名無しさん :2008/06/07(土) 21:34:42
それは、レイアウトじゃなくてコンポーネントじゃないか?
>>887 レスありがとうございます。
そうです、幅は1:3:1くらいで真ん中だけ大きくしたくて、
かつブラウザのサイドバーみたいに横幅を調整出来るようにしたいのです。
GridBagLayout、難しそうだけどググりながらちょっとやってみます。
>>888 すいません、正直どういう意味か分からないですorz
境界をつまんでサイズ調整できるやつはJSplitPaneな。
>>890 ありがとうございます!!
頭悪すぎてこんな時間までかかってしまいましたがなんとか出来ました!
しかしJavaはC/C++に比べて簡単にGui部品が使えるのに、
レイアウトだけは非常にやっかいですね…。
レイアウトの簡易さはC#にかなわないなJavaは
C#に限ったことではないが、固定配置+Dock/Anchor方式は 直感的に自由度の高いレイアウトが出来るからな
894 :
デフォルトの名無しさん :2008/06/08(日) 04:49:43
しかし一度は位置したコンポーネントを動的に動かしたりは出来ない。
NetBeans6のレイアウト機能はほぼ直感的にレイアウトできるようになっている
ま、レイアウトは言語そのものの問題じゃないから。
一度配置?
C#というか.NETも、Swingのような窓サイズに合わせた動的配置のコンポーネントが用意されたよ。Ver.2.0くらいから。 しかしあまり使われていないようだ。
javaじゃ動的レイアウトがあたりまえだからなぁ。
C#はあくまでもjavaの模造品の域を超えてないからなあ Cの方は次に期待だよな
X-WindowsやTKをベースに考えるなら動的レイアウトなのは自然だよね。 WindowsFormのDockプロパティはオマケみたいなもので、 動的レイアウトはWPFで全面採用になってる。 ただ動的レイアウトはポトペタ系のツールが作りづらいのが難点。
それで最終的にはCUIに仕上がるんですね。わかります。
903 :
デフォルトの名無しさん :2008/06/09(月) 11:16:33
cは廃れるだろうね
X-Windowsにはつっこんでいいの?
sのあるなしだけだったらつまらないからほってたほうが 他にあるならどぞ CはC++と互換の無いC99はいらない
あるTextFieldに入力するとタイプ毎に任意のJLabelにその文字に 規定の変換がされたものを表示されていくプログラムを作ろうと思ったのですが、 何故かタイプとラベルに表示される文字に時間差があります。 具体的にはこういうコードを書くと、 public void keyTyped(KeyEvent e) { System.out.println("タイプされた文字:"+e.getKeyChar()); System.out.println("表示文字:"+example.getText()); exlabel.setText(example.getText()); } 出力はこうなります。 タイプされた文字:a 表示文字: タイプされた文字:b 表示文字:a タイプされた文字:c 表示文字:ab タイプされた文字:d 表示文字:abc これってどうしてなのでしょうか?
>>906 keyTyped()が呼ばれたときには、まだexampleへのキー入力処理が実行さ
れていないから。
うむ
>>907 なるほど、タイプ→フィールドに追加だからですね。
意識したことがなかったので気づきませんでした。
exlabel.setText(example.getText()+e.getKeyChar());
これでいけました、ありがとうございます。
>>909 「文字」と「文字列」を区別したほうがいいと思うけど、それはともかく
DocumentListener
というものはご存知かな
Javaのjava.util.regex.Patternの動作について質問です。 正規表現に文字クラス"[a-z0-9&&[3-8]c-h]"を与えたところ、 この文字クラスにマッチする文字は 'c'、'd'、'e'、'f'、'g'、'h'の6字になるんです。 これってどういう仕様なのでしょうか? 以下は、マッチする文字を表示するサンプルです。参考に他の文字クラスも表示していますが "[a-z0-9&&[3-8]c-h]"を渡した場合の挙動だけが、なぜそうなるのか良くわからないのです。 ----- import java.util.regex.Pattern; public class RegexTest { public static void main(String[] args) { printMatchingChars("[a-z0-9&&[3-8]c-h]"); printMatchingChars("[a-z0-9&&[3-8][c-h]]"); printMatchingChars("[a-z0-9&&[3-8]&&[c-h]]"); } private static void printMatchingChars(String regex) { Pattern p = Pattern.compile(regex); StringBuilder buf = new StringBuilder(); for (int cp = 0; cp < Character.MAX_CODE_POINT; cp++) { if (p.matcher(new String(Character.toChars(cp))).matches()) { buf.append((char) cp); } } System.out.println(regex + ":" + buf + ':'); } } ----- 出力結果 [a-z0-9&&[3-8]c-h]:cdefgh: [a-z0-9&&[3-8][c-h]]:345678cdefgh: [a-z0-9&&[3-8]&&[c-h]]:: P.S.代理レスでの書き込みなので、返信が遅れるかもしれません。
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html >文字クラス
>[abc] a、b、または c (単純クラス)
>[^abc] a、b、c 以外の文字 (否定)
>[a-zA-Z] a 〜 z または A 〜 Z (範囲)
>[a-d[m-p]] a 〜 d、または m 〜 p:[a-dm-p] (結合)
>[a-z&&[def]] d、e、f (交差)
>[a-z&&[^bc]] b と c を除く a 〜 z:[ad-z] (減算)
>[a-z&&[^m-p]] m 〜 p を除く a 〜 z:[a-lq-z] (減算)
> 文字クラス演算子は、次の順で優先順位が高くなります。
> 1 リテラルエスケープ \x
> 2 グループ化 [...]
> 3 Range a-z
> 4 論理和 [a-e][i-u]
> 5 論理積 [a-z&&[aeiou]]
これを見る限り、
[α-ω[...]]
はともかく、
[[...]α-ω]
の形がどうなるのかは書かれていない(=例外でもおかしくない?)ように見えるけど、どう?
>正規表現構文の動作の詳細については、『Mastering Regular Expressions, 2nd Edition』
> (Jeffrey E. F. Friedl 著、O'Reilly and Associates、2002 年) を参照してください。
だそーですが
>>911 とりあえず現象だけ見ると、
[a-h0-8&&[3-9]c-z]
[a-h0-8&&[あ-ん]c-z]
[a-h0-8&&[3-9][あ-ん]c-z]
[a-h0-8&&c-z]
は、同じく
[c-h]
と等価になっちゃうっぽいね
>>912-914 さん、返信ありがとうございます。
>>914 さん、
&&の前の文字セットと、&&の後ろの定義済みあるいは[]で閉じられていない文字セットを論理積してるみたいですね。
&&の前後の文字セットの結果は無視されているような。
そして否定が付くと、(ますます良くわからないのですが)
[a-zあ-ん&&[3-8]c-h]:cdefgh:
[^a-zあ-ん&&[3-8]c-h]:: (何もマッチしない)
となります。
こんな面倒な構文使わなければいいと思われると思いますが、
正規表現からそれにマッチするランダムな文字列を生成するクラスを作っていまして
生成した文字がPatternで必ずマッチするようにしたいのです。
[a-h0-8&&[c-z]] この基本形を入れとくべきか
>>915 「ちゃんと例外をスローしてもらわないとなあ」というのが私の感想ですがw
918 :
913 :2008/06/09(月) 21:51:26
[^a-z&&[3-8]c-h] [[^a-z]&&[3-8]c-h] 否定は問題ない
>>912 そのオライリーの本、
「正規表現 第二版」のことだよね。
ちゃんと日本語訳された本があるからそっち紹介してもいいんじゃないかと
[...][...]&&[...]&&[...][...]&&[...][...]&&[...]&&[...] [...[...]]&&[...]&&[...[...]]&&[...[...]]&&[...]&&[...] [...[...]]&&[...&&[...[...]&&[...[...]&&[...&&[...]]]]] [...][...]&&[...]&&[...][...]&&[...][...]&&[...]&&[...] [[...]...]&&[...]&&[[...]...]&&[[...]...]&&[...]&&[...] [[[[[[...]...]&&...]&&[...]...]&&[...]...]&&...]&&[...]
そういえばそうだったあね
スレ違いかもしれませんが、JAVAのことで質問です。 JAVAを使える無料レンサバは何故少ない(というか無い) んでしょうか?
Perlではなくて?
925 :
923 :2008/06/11(水) 17:57:15
>>924 はい、JAVA(できればstruts)で作ったWEBアプリをレンサバ
で動かそうにも無料のがなく、有料だと高くて…。
確かにPerlもみかけませんよね。phpはどこでも使えるのに・・・ orz
自分でサーバーたてちまえ
ただで鯖使おうって根性が間違ってる。
そんなに大変じゃないだろ
サーブレットとかってwww鯖の申請通ればあとはアパッチとかの設定だけだしな。
>有料だと高くて…
Tomcatでいいんだろ?月500円でも高いのか?
http://www.easytone.jp/ 無料なのがないのはJavaだと自由度が高すぎてセキュリティに問題が起きる可能性が高いからだと思うけどな?
それにJavaはphpなどに比べれば難しいから需要も少ないってこともあるだろうなあ?
933 :
デフォルトの名無しさん :2008/06/11(水) 19:22:10
質問です public void paint(Graphics g) { g.drawImage(); } 上記の場合、アプレットだと public void paint(Graphics g)のgの部分はブラウザから 受け取るとあるのですが、アプリケーションの場合、オブジェクトのgはどこで作られるのでしょうか? 自分でオブジェクトgを作らなくても動くのですがどうしてでしょう?
>>932 金払ってるのに何のセキュリティが問題になるんだよwアホかおまえは
935 :
デフォルトの名無しさん :2008/06/11(水) 19:31:34
別に鯖缶に文句は無いけど、客を選んでるようじゃそのうち縮小していって、淘汰されるだろうよ
>>934 無料の場合の話だろ(wアホはおまえじゃ(w
>>933 ブラウザっていうか,sunの中の人がGraphicsオブジェクトを作って
それを引数に指定してpaintを呼び出すようなコードを書いてて,裏ではそれが動いてる
アプリケーションも一緒
>>932 あ、こんな安いレンサバあるんですね。
なるほど、ありがとうございます。
>>938 使ったことはないんでいいかどうかはわからないよ。
無料10日間お試しコースってのがあるから試してみたら?
JTreeのTreeWillExpansionListenerを使い展開時に DefaultMutableTreeNode型のインスタンスからそのノードに至るまでの ルートからのパスを取得したいのですが、どうやったら良いのでしょうか?
941 :
デフォルトの名無しさん :2008/06/11(水) 19:52:31
>>937 paintを呼び出す時に自動的に、Grapnicsオブジェクトが作られる
という事でしょうか?
942 :
デフォルトの名無しさん :2008/06/11(水) 19:57:15
>>936 セキュリティが問題になるとかいいのがれじゃん。無料とか言って話しをそらすなw
943 :
デフォルトの名無しさん :2008/06/11(水) 20:02:08
JSpinner で 普段は浮動少数(double) 〜〜dB(デシベル) と手打ちした時は 自動で対応する値に変換 (6dB -> 2、20dB -> 10) というのをやりたいのですが、どんな感じで実装するのがスマートなんでしょうか?
>>933 >自分でオブジェクトgを作らなくても動くのですがどうしてでしょう?
初心者的にはまあごもっともな疑問だと思う。ちょっとかみ砕いてみる。
「paintメソッドを作る」ということは、
「もし「ここに自分の姿を描いてね」と言われたらこう描く(こう対応する)、と決める」ということ。
何をどう描くかは決められるけど、何に描くべきかは外から指定される。
「paintメソッドを呼ぶ」ということは、
「「ここ(=Graphicsオブジェクト)に自分の姿を描いてね」と頼む」ということ。
どういう絵ができるかは相手次第だけど、「描く場所」はちゃんと用意してから注文する。
ふつうは、アプレットとは別に画面作りの本部(中の人)みたいなのが動いていて、
必要なときに(paint/updateを呼ぶ前に)Graphicsオブジェクトを用意する、
と考えていればいいと思う。
それ以外にも、画像に描画するGraphicsオブジェクトを生成してpaintに渡せば、
その時の表示内容を画像にできたり、というような使い方もできる。
>>940 JTreeの展開のどの部分のパスなのかしら?
947 :
945 :2008/06/11(水) 20:40:48
ごめん、読んでなかったw >アプリケーションの場合は かw
948 :
デフォルトの名無しさん :2008/06/11(水) 20:57:47
>>945 文句は無いんだけど、もし君が学校か何かの講師ならイマイチ。
安物のJava教本を読んだほうがいいかな
ageるな厨房
>>946 すいません、C:\Program Files\Adobeとかいう階層があったら、
Adobeを開いた時にC:\Program Files\Adobeという絶対パスを取得してFileに渡したいという感じです。
一応ググったりしながら下のようにやってみたのですが、関数で既にそういうものが用意されていたりするでしょうか?
TreeNode paths[]=konode.get(i).getPath();
String path="";
for(int j=0;j<paths.length;j++)
path+=paths[j]+"\\";
951 :
945 :2008/06/11(水) 21:11:07
>>948 個人的にはイマイチ講師程度ならうれしいよw
952 :
デフォルトの名無しさん :2008/06/11(水) 21:50:03
こういうアホ講師は得意げになっていって、後々面倒になるんだよね・・
953 :
デフォルトの名無しさん :2008/06/11(水) 22:13:24
>>949 怒るとすぐこんなふうになるし、こいつは短気なんだろw
>>950 JTreeが実際に何を象徴しているか、JVMは知らないんじゃないかしら?
957 :
933 :2008/06/12(木) 06:07:03
ありがとう
958 :
デフォルトの名無しさん :2008/06/12(木) 14:33:54
すいません、最近javaをはじめた者です。 buf[i+1]<<8|buf[i]&0xFF これの"|"は何を意味しているのですか?
論理和
961 :
デフォルトの名無しさん :2008/06/12(木) 15:20:06
たぶんバグw
962 :
デフォルトの名無しさん :2008/06/12(木) 15:39:46
jsp:invokeの意味が全然わからないんだが、 これって要するに他言語で言うeval? jsp:doBodyとのちがいもわからん
>>958 他のは分かるけど、ということ?なんか不自然な気が
965 :
デフォルトの名無しさん :2008/06/12(木) 17:28:58
会社の経費精算システムがjavaアプリで作られており、Windowsマシンで動いております。 作りが悪くて各項目ごとに、出発・到着・金額はいいとして、国や日本円とかをいちいち 入れなくてはならず、毎回入れる項目はだいたい同じなのでスクリプトで自動入力させたいのですが javaアプリのフォームにデータを入れてボタンをクリックさせるツールとか方法は あるのでしょうか? vbscriptとか自動入力クリックツールとかはjavaアプリは全然動かすことができません。
966 :
デフォルトの名無しさん :2008/06/12(木) 17:31:53
何の作りが悪いって?
入力した整数を自動的に因数分解するプログラムを作るにはどうすればいいのでしょうか
>>967 自分が手計算で因数分解するときの手順をそのままプログラムで書けば良い
>>967 1は任意の整数xの約数であるから、x=1・xと因数分解できる。■
Java 素因数分解
でぐぐるとか?
970 :
デフォルトの名無しさん :2008/06/12(木) 18:29:02
■は一体何の意味?
>>965 作った業者に改良を依頼したらいいと思うよ
>>970 D.Q.N.(「父さんこのイモ何のイモ?」の略)
int x = 9801; java.util.Map<Integer, Integer> map = new java.util.TreeMap<Integer, Integer>(); int f = 2; while (x >= f) if (x % f == 0) {x /= f; if (map.get(f) == null) map.put(f, 1); else map.put(f, map.get(f) + 1);} else f++; System.out.println(map);
整数xの約数 とあるけど、-23*1とか0*1でもいいのかな 君のプログラムはどういう仕様になってるの?
>>967 の問題が素因数分解であるなら、入力は正整数だから
>>975 は心配無用
アルゴリズムは基本的に
>>974 の方法で良いが、細かいことをいうと
y = ⌊√x⌋ とすると、
ループ継続条件は x > 1 かつ f ≤ y
(ループ終了時 x > 1 なら、その x が最後の素因数)
>>962 >>964 jspは実行前にコンパイルされるはずだからevalというには語弊があるな。funcallとかapply?
質問です。 JAVAで、指定したフォルダをエクスプローラで開くことは出来るでしょうか? Windows以外で動作しなくても構いません ひょっとしたらRuntimeやProcessで出来るかとも思ったのですが、 あれはexeやjarファイル等の起動しか出来ないようで……
Windowsに限るならexplorer.exe使えばいいよ。 オプションはスレ違いなので調べてちょ。
>>979 即答ありがとうございます
何とかなりそうです
>>978 JDK6以降なら java.awt.Desktop#open(java.io.File) でも開けるっぽい。
>>978 explorer C:\Program Files
みたいに引数つければRuntimeでいける。
>>981 こんなのがあったのか……
JDKのバージョンにこだわりはないので、エクスプローラの引数指定よりこっちの方がスマートですね
色々試してみます。
回答ありがとうございました
>>976 少し苦しいけど許してあげるよw
以後軽率な発言は控えるように
y = ⌊√x⌋ ? y equal box root x box ♪
floorか。
>>923 昔Java BoFで無料でServletを公開できるサービスがあった。
あと、海外のサイトでも無料でServletやJSPをアップロードできるサービスがあった。
が、メモリを大量消費するServletでは扱いにくいのなんので
それに加えてデフォルト設定ではJSPファイルを更新するたびTomcatの再起動が必要と、
PHPと比べ不便な点が多かった。それでついにはサービスを中止してしまったそうだ。
ブラウザ上からTomcatの再起動ができるのは魅力的かと思ったが。
PHPのようにはいかないのさ。
かくユーザごとにTomcatをインストールし、各ユーザの数だけ
メモリを大量に増設しなければならんのだから。それにJSPコードをJavaに変換したソースコード
とコンパイルしたバイトコードを置くためのディスク容量を確保するためのHDD領域も余分に必要だ。
一人当たりメモリ10GB使うとしよう、
そのレンタルサーバに1000万人が登録して使用すると、
そのサーバに必要なメモリは10000000GB = 9765.6TB=9.5PB(9.5ペタバイト)にもなる。
とんでもない数字だ。これではサーバ運用コストが馬鹿にならない。
だからJAVAを使える無料レンサバは少ない。
その反面、PHPは非常に少ないメモリでプログラムを簡単に書けるのが売り。
Javaとはまったく正反対の言語だ。だからJavaアプリケーションサーバで
無料でレンタルしているところはほとんど無いに等しい。
どうしてもやりたかったら自前でサーバ構築するのが望ましい。
2つのスレッドで、1つのコレクションクラスを操作したいと考えています。 1つは常に追加、1つは常に取り出し。 取り出し側は何かが追加されている状態のみ処理したく、 collection.get(0);の呼び出しで、他から追加されるまではブロックされるイメージを望んでいます。 自作で同期を取ればよいのですが、 データが登録されるまでブロックするコレクションクラスがあれば使いたいと思っています。 コレクションクラスにはこだわっていないので、近いものがあれば教えていただけないでしょうか。 JDK1.6です。
989 :
デフォルトの名無しさん :2008/06/13(金) 15:23:10
>一人当たりメモリ10GB使うとしよう こういうのを信じちゃう人は、頭おかしいんだろうなw 業者乙ところですか(笑い
典型的なProducer-Consumerパターン BlockingQueueインターフェースを実装したクラスを使う
>>988 java.util.concurrent.LinkedBlockingQueue
992 :
デフォルトの名無しさん :2008/06/13(金) 15:40:46
indexOf()のアルゴリズムはBM法のようなものですか? 参考になりそうなサイトがあったら教えてください。
直接ソースを見るのが一番 ・・・・・・というわけで斜め読みしてみたが 単純に頭から一つずつずらしているように見える とても質素だ。まあ確認してみて
994 :
デフォルトの名無しさん :2008/06/13(金) 16:05:03
>>993 すみません、どこで見ることができますか。
javaのフォルダ内を見てるのですが見付からなくて。
次スレ立てるか
だめだった
うめ
梅
1000 :
デフォルトの名無しさん :2008/06/13(金) 18:02:21
ふんがー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。