1 :
デフォルトの名無しさん :
04/02/09 23:55
?
1乙
すいません、もう一度質問させてください。 やりたいことを最初に書くと、Object型の配列にInteger型の変数を入れたいのです。 そのInteger型の変数ですが、最初からInteger型ではなくObject型なので キャストしようとしたのですが、できません。 Object型の変数 obj にはすでにデータがあるとして Object[][] objdata = new Object[10][10]; objdata[5][5] = (Integer)obj; が上手くいきません。どうしてでしょうか?
>>前スレ 994 やっぱり分かってないだろ。 IllegalMonitorStateException などが発生する可能性がある。
>>4 まずそのobjが初期化されてない。
そこに値をセットする部分のソースはないのか?
Integer型の配列が欲しいなら
Integer[][] objdata = new Integer[10][10];
objdata[5][5] = new Integer(1);
みたいになるはず。
Object型の配列にいろいろな種類のObject詰め込もうとしてるなら悪いことは言わないから設計考え直した方がいい。
>>6 えと、obj はきちんと初期化されてます。
Object型の配列に色々なデータを入れようとしているのは、JTableを
使用しているためです。
Integr型を入れないと右寄せが出来ないので。
(セルレンダラのやり方も知ってますが、そっちは置いといて)
obj には「1234」などのデータが入っていると思ってください。
この1234などの大元のデータはVector型に入っていて
そこからgetしているので、Object型で値が返されます。
それが obj に入ってます。
で、それをIntegr型にしたいので (Inetger)obj としたのですが
コンパイルは通りますが、実行時に
Exception in thread "main" java.lang.ClassCastException
となってしまいます。
>>4 ちなみに元がオブジェクト型ならIntegerにキャストは無理。
キャストできるのはその変数の実際の型か親クラス(インターフェイス)の型。
objdata[5][5] = new Integer(1);// 親クラス型には暗黙的なキャストができるからここでは(Object)はいらない。
取り出すときは
Integer num = (Integer)objdata[5][5]
Object[][] objdata = new Object[10][10]; objdata[5][5] = (Integer)vec.get(0); みたいな感じ? vectorから取り出したのがIntegerでは無いってことになるけど。
>>9 そうです。
コンパイル時にエラーは出ません。
しかし、実行しようとすると
Exception in thread "main" java.lang.ClassCastException
となってしまうのです。
たぶん型が合ってないだけかと思うんだけど それだけに今回みたいにバグが発見しにくくなるので安易にObjectで扱わない方がいい テーブルとかツリーとかセルレンダラなしでそれなりにいじくりたいときは クラス一つ作ってそのクラスの中でいろいろと実装した方がいいと思う クラスの中にintやString、Dateをいれておいてね toString()が表示に使われるメソッドということさえわかっていれば大丈夫 ようは表示用だけだがバリアントクラス作ってるようなもん
とりあえずすべての配列の中身表示してみそ
objdata[5][5].getClass.getName() ってやったら、なんて帰ってくるんだろうな・・・ ぜんぜん見当違いなクラス名だったりして。 実はinstance自体がさっぱりIntegerと関係なかったりとか。
まず System.out.println(obj); System.out.println(obj.getClass()); ってやって obj が正しく意図した値になってるか調べろよ。
じゃあVectorに変なオブジェクト入ってるはず。 キャストする前にVector中を出力してみ? デバッガ使えるならその方がいいけど。 Integer data = new Integer(1234); Integer data2 = new Integer(5678); Vector vec =new Vector(); vec.add(data); vec.add(data2); System.out.println(vec); // [1234, 5678]みたいに出るはず Object[][] objdata = new Object[10][10]; objdata[5][5] = (Integer)vec.get(0); System.out.println(objdata[5][5]);
>>5 RuntimeExceptionが発生する可能性があるか、なんてことは
誰もきいてなく、throwsで宣言されたものだけを処理するのは
ありか、と聞いてるんだから、それはあり、では?
>>14 obj には 4桁の数字 xxxx が表示されます。
クラスは全て String となっていました。
NumberFormatExceptionもRuntime系だがそれはおいといて。 そもそもどんな例外が出るかわからないけどとりあえずまとめてcatchして 正常系だけ動けばいいやって発想が危険。 発生する例外は全て把握した上でそれぞれの必要な処理をするべき。 それをちゃんとやってることを示すためにもできるだけ必要最低限の例外処理にして欲しい。
Stringだとキャスト失敗で正しいだろ
>>16 >>5 は前スレ986=994が「杞憂」だと言ってることに突っ込んでるんでは?
漏れも実行時例外の性質上、全然杞憂なんかじゃないと思うし、
それを責任を持って処理するわけでもなしとりあえずcatchはやめて、
そのまま呼び出し元にスルーして、最終的に責任がある呼び出し元が処理すべき思う。
一番上のUIのとこなら、別にcatch(Exception e)でもいいけど。
それ以上先に通知先はいないわけだし。
やっぱりprintデバッグは偉大だな
>>21 ふと思ったんだが、APIにあるようなやつも、
全ての例外拾ってんだろうか。
>>21 どうでもいいんだが、
>そのまま呼び出し元にスルーして、最終的に責任がある呼び出し元が処理すべき思う。
スルーかよ!
package test; public class Test1 { public static void main(String[] args) { try{ test1(); System.out.println("1"); } catch (Exception e){ e.printStackTrace(); } } public static void test1(){ test2(); System.out.println("2"); } public static void test2(){ test3(); System.out.println("3"); } public static void test3(){ int x = 0; int i = 1/x; System.out.println("4"); } }
package test; public class Test2 { public static void main(String[] args) { test1(); System.out.println("1"); } public static void test1(){ test2(); System.out.println("2"); } public static void test2(){ test3(); System.out.println("3"); } public static void test3(){ try{ int x = 0; int i = 1/x; System.out.println("4"); } catch (Exception e){ e.printStackTrace(); } } }
//Test1実行結果 //java.lang.ArithmeticException: / by zero //at test.Test1.test3(Test1.java:23) //at test.Test1.test2(Test1.java:18) //at test.Test1.test1(Test1.java:14) //at test.Test1.main(Test1.java:6) //Test2実行結果 //java.lang.ArithmeticException: / by zero //at test.Test2.test3(Test2.java:19) //at test.Test2.test2(Test2.java:13) //3 //2 //1 //at test.Test2.test1(Test2.java:9) //at test.Test2.main(Test2.java:5) これだとなんか、Test1の方が好みかなあ・・・個人的には。
>>24 それはthrowをスルーと間違えたわけではないんじゃない?
文脈的に「そのまま呼び出し元に通しちゃって」ってことだよ。
質問させてください。 JavaのデザインパターンVisitorで、 節を訪問したときにある処理を行いたいのですが、 どうすればいいのでしょう? お願いします
31 :
デフォルトの名無しさん :04/02/10 03:03
誰か知ってたら教えてください。 ID等の文字列を全部static finalで定義して使うのはパフォーマンス的に効果あるの? #1. logger.info(getMessage("INFO001")); ってやる代わりに #2. logger.info(getMessage(CONST.INFO001)); 2のINFO001はConstクラスでstatic finalで定義されている文字列で、 public static final INFO001= "INFO001"; って書かれてる。 メソッド内で1のケースやると毎回Stringのインスタンスが生成されて遅くなったりするんだろうか? それとも定数の値を変更することで一気に変えられるってだけ? 昔どこかで文字列は再利用されるって聞いたような気がするんだけど誰か知ってますか?
>>23 JavaAPIが全部の例外を個別に処理してるかってこと?
ちょっと書き方が悪かったけど、別にcatch (Exception e)するなってことではない。
現に、catch (Exception e)なんてやってる箇所は結構あって、
例えばHttpURLConnectionなんかでも2箇所でやってる。
でも、一つ目はちゃんと復帰できない(ステータス行が取れない)場合に、
改めてRuntimeExceptionかIOExceptionにキャストして投げてるし、
もう片方は、メソッドの仕様として何らかの例外が起こったときには、
指定されたデフォルト値を返すようになってる。
DriverManagerなんかではClassCastExceptionやClassNotFoundExceptionが発生しそうな箇所で、
両方ともまとめてExceptionで取っちゃって、SQLExceptionで投げ直したりもしてる。
元の質問では、起こるか起こらないか分からない例外を、
理由も無くcatchしようとしていたことに対して、あんなことを書いた。
全ての例外を捕捉して隠蔽するような真似をせず、
自分が捕捉する必要がなければちゃんと上に通知しろという意味で。
>>24 すんまそん。誤解を招く書き方をして。
>>28 の通りということでひとつよろしこ。
>>31 > メソッド内で1のケースやると毎回Stringのインスタンスが生成されて遅くなったりするんだろうか?
しない。
> それとも定数の値を変更することで一気に変えられるってだけ?
それしか考慮できない人にとってはそれだけかも。
>>33 他のメリットを是非教えてください。
あとは引数の文字列のミスを防ぐぐらいしか思いつきません_| ̄|○
37 :
デフォルトの名無しさん :04/02/10 10:09
>>34-35 俺は
>>33 じゃないが。
public、protectedな場合は、使用者に値を気にさせずに使わせられるな。
Calendarクラスの定数群なんかがそんな感じ。
内部的に値を変更してもユーザは特に気にしないで済むと。
privateの場合は俺もようわからんが、
文字列以外は意味づけによるわかりやすさとかがあるな。
そうか、前スレでtrueが利寺留でなければ return true && getNumber() == other.getNumber(); なことできないしな
39 :
デフォルトの名無しさん :04/02/10 10:52
質問させてください。 TurboLinux + JAVA SE1.4.1 の環境です。 以下操作。 vi StringDump.java class StringDump { public static void main(String[] args) { String str = "問題の発生している文字列"; System.out.println(str); char[] buf = str.toCharArray(); for (int i = 0; i < buf.length; i++) { System.out.print(Integer.toString(buf[i], 16) + " "); } } } javac StringDump.java java StringDump ???????????????????????? fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd fffd っと文字化けしてしまいます。 理由わかりますか?? ご教授ください。
40 :
デフォルトの名無しさん :04/02/10 11:10
>>39 Linuxの文字コードとファイルの文字コードが違ってると思われ。
>>39 環境変数 LANG とかその辺がちゃんと設定されておらず、
javac -encoding も指定されなかったので日本語(EUC-JP(?))が化けたのだと思われ。
なんで FFFD になるかはこの辺参照の事。
http://www.unicode.org/charts/PDF/UFFF0.pdf FFFD REPLACEMENT CHARACTER
• used to replace an incoming character
whose value is unknown or
unrepresentable in Unicode
• compare the use of 001A as a control
character to indicate the substitute function
42 :
デフォルトの名無しさん :04/02/10 11:13
>>39 はいはーい! 質問でーす。
そのターミナルは日本語を表示できるんですか?
ソースで使用している文字コードはEUC?
ロケールなどの環境はどのように設定されていますか?
43 :
デフォルトの名無しさん :04/02/10 11:16
ディレクトリを持ったFileから、サブディレクトリの一覧File[]を得るにはどうかくのが一番 いいのでしょうか? File dir("C:\\"); File subdirs[] = dir.listFiles() これだとファイルも一緒に格納されてしまいます。 お願いします。
>>43 File subdirs[] = dir.listFiles(new FileFilter(){ public boolean accept(File file){ return file.isDirectory() } });
45 :
デフォルトの名無しさん :04/02/10 11:23
>>43 File dir = new File( "C:\\" );
File[] files = dir.listFiles();
ArrayList subdirs = new ArrayList();
for ( int i = 0; i < files.length; i++ ) {
if ( files[i].isDirectory() ) {
subdirs.add( files[i] );
}
}
これでどうよ。
47 :
デフォルトの名無しさん :04/02/10 11:28
>>44 ,45
ありがとうございました。
できました。
49 :
デフォルトの名無しさん :04/02/10 13:03
>>40-42 文字化け解消です。
ありがとうございました。
環境変数に
LANG=ja_JP.eucJP
の記述がなかったので、書き足してみたら
うまくいきました。
>>36 、37サンクス
>>37 てことは今回みたいなケースだとあまりメリット感じないね。
この例のメッセージのようにIDから導かれる値はファイルで持つこと多いし、
ファイルのIDの文字列とそれを示す定数名を違う文字列にする理由もあまり感じないしなぁ。
Calendarクラスみたいな場合は良いね。
51 :
デフォルトの名無しさん :04/02/10 16:59
Javaアプリでファイルを使わずに二重起動を防止する方法はあるのでしょうか? お願いいたします。
>>51 >Javaアプリでファイルを使わずに二重起動を防止する方法はあるのでしょうか?
一様あります。
>Javaアプリでファイルを使わずに二重起動を防止する方法はあるのでしょうか? >一様あります。 なんかすごいスレだなここ
>>53 Javaに特化した生物がいるスレだからな。
日本語とかよくわかってないんじゃない?
いちおう、のたいぽでしょ? なんで勝ち誇ってんの、君等。
Javaを勉強しだしたばかりの者です。 買った参考書がコンソールアプリの例ばかり載ってるので、しまった・・・と思っているところです。 まぁ、それでもその参考書でやってますが。 お聞きしたいのは、Calendarクラスの事についてです。 参考書にCalendarクラスのインスタンスを取得する、とあって Calendar cal = Calendar.getInstance(); とあるのですが、インスタンス作るならならこれでもいいだろうと Calendar cal = new Calendar(); としました。 しかし、abstractだからインスタンスは作れない、と予想通りエラーになりました。 抽象クラスの事は参考書を読んで知っていたのですが、どうせインスタンスを作るならなんでこんな例外処理みたいな 事をするわけ?と思いまして。 スーパークラスになる指命を持って抽象クラスになるのなら分かるけど、インスタンスも作りたいなら抽象クラスの意味ね〜じゃね〜かよ と思ったわけです。 しかもインスタンス生成のメソッドまで持ってるし。 こうなると抽象クラスの存在意義も分からなくなってきたのです。 この疑問に答えてくれ〜。
58 :
デフォルトの名無しさん :04/02/10 17:37
配列やコレクションを要素も含めて定数化したいんだけど、どうすればいいの? final String[] number = {"one","two","three"} としても、 number[0] = "ichi"; とできてしまうけど、これを規制したい!!
>>57 世界中の全ての地域がグレゴリオ暦を使っているわけではない。
だから Calendar なる抽象クラスは絶対に必要だ。
しかし「何暦にでも対応できるスケジュール帳」は作れる。
画面上に日付が並んでさえいればいいんだから。
ゆえにクラス名(暦の種類)を明示しなくともインスタンスが得られればいい。
よって getInstance() なる static メソッドでインスタンスが得られればなかなか具合がいい。
61 :
デフォルトの名無しさん :04/02/10 17:40
>>58 配列は仕方ないけど、
コレクションなら、java.util.Collectionsの、
unmodifiable〜系のメソッドを見てみそ。
>>58 例えば、
String[] tmp = number;
tmp[0] = "one";
君はこういうときどうなってほしいんだ?
そっから冷静に考えろ。
>>63 コンパイルエラーか、例外をthrow。
とにかく、定義した配列/コレクションの要素の変更を規制したいんです。
>>64 だから、配列はムリて。直接参照させないで、getter使わせろよ。
コレクションなら、
>>62 の方法かgetter用意。
>>64 >コンパイルエラー
冷静に考えろっつってるだろうがよ。
コンパイラはプログラマの「つもり」まで読めないんだよ。
>>62 でいけそうです。ありがとうございました。
ここでひとつ俺がおまえらの気持ちをひとつにまとめてやろう 樋口一様
>>59 いや、だからインスタンスを作ること自体意味がね〜じゃんね〜かと。
グレゴリ歴使ってよ〜が、何歴使ってよ〜と日付と時間さえゲット出来ればいいわけだろう?
だったら日付入りのtextオブジェクトでも返したらいいんではないかい?
と思った訳なのだが。
いやだから、ある日が何月何日なのかはこよみによって 違うでしょ、って話し。
ある日の1日後がどんな日付になるか、どうやって計算するんだ?
>>70 System.currentTimeMillis() でも使ってなさい
自分の知ってる API が全ての API、自分の要望が世界の要望、だと思わないこと
計算もなんも、それを固定的に定めるのが暦ではないのか?
76 :
デフォルトの名無しさん :04/02/10 18:31
基本情報技術者の試験でJAVAを洗濯しました。 が、難しすぎます(´・ω・`) 引数、仮引数、実引数、クラス、オブジェクト、フィールド、・・・・・・・・・・・ わかんねーよヽ(`Д´)ノウワーン だれか教えてくれぽ。なんかいいサイトとかあったら教えてくれぽ・
ふ〜む、何日後がいつかを計算するのは確かに不便だよな。 でもそれならなぜ抽象クラスにする必要があるのかが分からないのだが。 インスタンスを作って初めて計算が出来るわけで、それなら普通のクラスにすればいいんじゃね〜かと。 59のレス読んでもピンとこないバカだから、もっと分かりやすいように教えてくれ。
>>77 newでインスタンス化してしまうと、Calendarを使いたい全ての人達が、
自分の使う暦を理解した上で必要なCalendarのサブクラスをnewしないといけない。
ところが、通常は君のように、世界には自分が使ってる暦以外にないと思ってる人がほとんど。
1月31日の次は、絶対2月1日だと疑ってないし、特定のUTC時刻は、
全世界のどの暦でも1月1日だと疑っていない人達ばかり。
なので、そういった特殊な知識が必要でないとか、知らないという人のために、
その人が住んでいる地域に最適なCalendarサブクラスをインスタンス化してあげようという、
親切なメソッドがgetInstance()にあたる。
もちろん、暦にこだわりがある人は、タイムゾーンとロケールを指定して、
自分が欲しいCalendarインスタンスを生成することもできる。
実際に、Calendarのソースを見てみると、デフォルトのgetInstance()では、
タイの人達のためにはsun.util.BuddhistCalendarを返している。
それ以外の人達のためには、おなじみのGregorianCalendarを返してる。
この辺の話は、デザパタのFactoryを読んでみたらピンと来るかもしれない。
>>77 Language lang = Language.getInstance();
boolean erroraccoured = false;
//処理
if (erroraccoured) {
System.err.println(lang.getMessage(Language.ERRORMESSAGE));
}
もし言語でこういうことできれば、多言語対応。
というかもしや、 同一のクラスであっても動作を変えればいいことじゃん、 なんて考えているんじゃぁ?
>>79 やっべ。俺のシステム、タイに持っていったら使えなくなっちゃうよ。
と思ったが、それ以前に日本語以外に対応してないのでどうでもいいや。
>>79 丁寧なレスサンクス。
何となく分かったような気がする。
>もちろん、暦にこだわりがある人は、タイムゾーンとロケールを指定して、
>自分が欲しいCalendarインスタンスを生成することもできる。
これって言うのは、Calendarクラスを継承してnewで作るってこと?
そして月だけ0起算なのは今言ってくれたことが関係しているのか?
なんかそれなら地域の歴ごとにクラス化してnewでインスタンス作れるようにした方が
分かりやすいような気がするのだが。
Calendarクラスだけじゃないから、抽象クラスってのが意味あるんだろうけど。
>>79 丁寧なレスサンクス。
何となく分かったような気がする。
>もちろん、暦にこだわりがある人は、タイムゾーンとロケールを指定して、
>自分が欲しいCalendarインスタンスを生成することもできる。
これって言うのは、Calendarクラスを継承してnewで作るってこと?
そして月だけ0起算なのは今言ってくれたことが関係しているのか?
なんかそれなら地域の歴ごとにクラス化してnewでインスタンス作れるようにした方が
分かりやすいような気がするのだが。
Calendarクラスだけじゃないから、抽象クラスってのが意味あるんだろうけど。
>>79 丁寧なレスサンクス。
何となく分かったような気がする。
>もちろん、暦にこだわりがある人は、タイムゾーンとロケールを指定して、
>自分が欲しいCalendarインスタンスを生成することもできる。
これって言うのは、Calendarクラスを継承してnewで作るってこと?
そして月だけ0起算なのは今言ってくれたことが関係しているのか?
なんかそれなら地域の歴ごとにクラス化してnewでインスタンス作れるようにした方が
分かりやすいような気がするのだが。
Calendarクラスだけじゃないから、抽象クラスってのが意味あるんだろうけど。
新しい遊びか?
XSLを使うために、jwsdp1_3をダウンロードしました。 ダウンロードしたjwsdp1_3のディレクトリを見たいのですが、 見れません。なんか、クリックすると、MS-DOSの画面みたいなのが 動くだけです。 見る方法を教えていただけないでしょうか?
申し訳ない。書き込みボタンを押してもうんともすんとも言わないから何度も押してしまった。 85と86は消しといてください。
>>83 >これって言うのは、Calendarクラスを継承してnewで作るってこと?
彼女の誕生日のために正しいCalendarの実装は欲しい。でも自分で実装するなんてゴメンだ。
そんな漏れの彼女はタイ(UTC+7)のTimezoneで、タイ語(th_TH)のLocaleなんだけど、
どのサブクラスnewしていいか分かんないよ。いいCalendarサブクラス見繕ってnewしてくんない?
とばかりに、getInstance(Timezone, Locale)を呼び出すという意味。
>そして月だけ0起算なのは今言ってくれたことが関係しているのか?
これは、Cからの伝統とかだろうから、あんまり関係ないかと。
>なんかそれなら地域の歴ごとにクラス化してnewでインスタンス作れるようにした方が
>分かりやすいような気がするのだが。
例えば、おまえさんはsun.util.BuddhistCalendarがあったなんて知ってたかい?
これはどの地域のどの言語の人たちに使われてるか知ってる?
Calendarを使うのは、全ての暦と対応するサブクラスをしっかり勉強してから?
そんなことするよりも、Calendarに聞いとけよ。
使う人は暦のことは知らなくていい。Calendarがなんとかしてくれるよ。
Calendarを作った人も、暦ってのはこんな風に使ったら便利だよね、とCalendarを設計すればいい。
暦の仕組みは全然知らなくていいし、クラスもabstractにして暦の計算は何もしなくていい。
計算は詳しい人達に任せ、どのTimezoneとLocaleのときに、どのサブクラスを返すかだけ書いとく。
暦のプロフェッショナルは、マヤ暦でもアステカ暦でもなんでも実装すればいい。
Calendarクラスを作った人に、マヤ語族のカレンダーつくったよ、
このTimezoneとLocaleのときに漏れのサブクラスnewしといてよ、とすればいい。
そしたら、使う人は何も知らなくても、ちゃんと必要なときにはマヤ暦が計算できる。
みんながハッピーになれる仕組みというわけだ。
すいません。 どなたかお願いします。
新しいコピペのネタが生まれたのかよ・・・
>>91 特定 port を早い者勝ちで占有するとか。
>>93-94 ありがとうございます。
portは他のアプリと一緒になるとちょっと怖いですね。
Javaのミューテックスてどのクラスなのでしょうか?
すいませんが、またお願いします。
97 :
デフォルトの名無しさん :04/02/10 21:45
こんにちは。当方JavaでWebアプリケーションを作り、自宅コンピュータをサーバとして外部からのアクセスをできるようにしたいのですが、 できません。サーバはTomCatを使っています。私は、あまりサーバ構築に関して素人なので分かりません。ちなみに推測ですが、アドレスのホスト名をデフォルトのlocalhost:8080にしています。 誰かアドバイスしてくれませんか?
>>91 どの程度防ぎたいかどうかにもよるな
人間の手によって起動されるのを防ぐだけで
そこそこ防げればいいというのなら
Preferencesを使うという手もある
確実ならポートの取り合いしかないかな
>>97 サーバーとかネットワークわからないのに8080あけて自由にしてるのか
おとなしくやめとけ
Tomcatマネージャいじられたり脆弱製つかれるだけだ
WindowsはOSの種類によってはポート空けてネットにつなぐだけで規約違反になるぞ
マルチで質問するわりには、Tomcatスレにはコピペしてないのが 不思議だ。
101 :
デフォルトの名無しさん :04/02/10 21:55
あのー、超初心者です。 3日前に始めました。 クラス≒オブジェクトと考えてよろしいのでしょうか? クラスとオブジェクトの違いがよくわからないのでよかったら教えてください。 お願いします。
オブジェクト = クッキー と例えるなら クラス = クッキーの型枠 一口サイズのクッキーの型枠1つあれば、同じ形のクッキーがいっぱい作れる。 できあがったクッキーは全て一口サイズなので食べやすい。 クッキーの大きさや形が同じなので、まとめて箱詰めするのにも便利。 大きいクッキーが欲しければ大きい型枠を用意すればいい。 それを使えば、大きいクッキーを同じように何個でも作れる。 大きいのでどのクッキーも食べ応え十分。 …とかいうたとえ話は余計な混乱の元かな?
103 :
デフォルトの名無しさん :04/02/10 22:25
>>102 いえいえなんとなくわかったような気がします。
けど、JAVAがこんなに難しいなんて思わなかった・・・
初心者は細かい概念規定はとりあえずおいておいて、 ガンガン動作するプログラムを作ってまずなれることからはじめるべき。 他の言語でプログラム作成経験があるなら特に。 最初は、 ・クラス= struct や typedef をすげえ高機能にしたやつ ・オブジェクト(インスタンス) = メモリを割り当てた変数 程度の認識でいい。 作成するプログラムの規模が大きくなってくると、 嫌でもオブジェクト指向の概念は理解できてくる。
>>104 ありがとうございます。
プログラム経験はVBのみです。まぁ、簡易データベースができるぐらいです。
だから、プログラム経験はないに等しい。
ガンガリます。ありがとうございます。
106 :
デフォルトの名無しさん :04/02/10 23:38
みなさんはプログラムを書くときに {}の位置はどうしてます? 自分は if(true){ なんかの処理 }else{ } って書いてるんですが、社内では if(true) { なんかの処理 } (else) { } こういう書き方が多いんすよ。 まぁ、プログラムは動いてなんぼなんでしょうけど、 他の方の作法がちょっと気になったもんで。
あーなんかelseの書き方間違えてる・・・。 ごめちゃい。 だから後者のの書き方は苦手なんす。
108 :
デフォルトの名無しさん :04/02/10 23:43
>>106 オレも以前は前者の書き方をしていた。
けど、プログラムの参考書を見ると圧倒的に後者の書き方が多いから
今では後者の書き方に落ちついてます。
109 :
デフォルトの名無しさん :04/02/10 23:44
java+servletで一覧表示をページ分けして表示したいのですが(1ページ10件とか) postgreSQLなどのofset,limit指定は件数が多い場合に時間が掛かるということですが beanに検索結果を保持して2回目以降は検索を行わないといったサンプル コードを公開しているサイトはないでしょうか?
>>109 件数にもよるが、普通は一覧表示をメモリに保持しておくような事は
しないと思う。
つーか、危険。
>>106 俺は
>>106 と同じ方式で書いてる。
俺が今まで見た限りでは
if(true){
なんかの処理
}else{
}
か
if(true){
なんかの処理
}
else if(true){
}
else{
}
がほとんど。
if(true)
{
なんかの処理
}
(else)
{
}
真ん中の例の方が節丸ごと削除したい時には上よりちょっと楽な気もする。
これは宗教論に近い勢いで昔から言われているらしいけど結局は好み。
でも書き方変えると非常に気持ち悪いしうざい。
自分の書き方と違う書き方強制されたら会社やめたくなるぐらいの勢いあるな。
先日俺のいる会社で俺と同じ書き方に決まったから良かったが
下の書き方してた人はすごいショック受けてたよw
>>108 自分がもってる参考書だと
cとかの本は後者が多くて
javaの本だと前者のが多い気がします。
jdkのサンプルソースも
前者の書き方っぽいので、
なかなか後者の書き方には慣れません・・。
これからどちらの書き方が多数派になるんだろう・・。
僕は多数派のやり方に従うぞ♪
>>111 じつは、うちの会社でも標準化ということで
後者の書き方が社内標準になったんです。
自分は今でも反対してるんですが・・。
>>106 ドウデモイイ。どうせ納品前に整形ツール通して終わり。
>>113 どうもありがとうございます!
すっげーたすかります!
明後日会社で上司に提案してみます。
最後の悪あがきですが・・・。
>>115 僕もあなたくらいの心の広さがほしい・・・。
118 :
デフォルトの名無しさん :04/02/11 00:03
>110 やはりoffset,limitでの毎回読み出しが普通なのでしょうか?
>>110 そんなの要件によるだろ。そんな断定するな。
便乗して質問ですが 検索結果を保存してページごとにわけて表示するってことは 2ページ以降はリアルタイムなデータではないってことなんすかね?
>>114 Sun(JDK) も IBM(Eclipseソース) も前者。
もちろん Eclipse のコードフォーマッタもデフォルトは前者。
後者は明らかに世間知らずか C 出身者。
。。。俺は後者だったが、前者に直した。
>>118 パフォーマンスが気になるのなら、インデックスを張るとか
SQLの書き方を見直すとかすると良い。←特にここ
PostgreSQLだったらANALYZEとかあるので、検索して勉強すると良いよ。
VMに全部読みこむのは論外。
124 :
デフォルトの名無しさん :04/02/11 00:13
>110 やはりoffset,limitを使って毎回読むのが一般的なんでしょうか?
>>119 SQLを使って参照する事がパフォーマンスに影響する様な膨大な件数を
VMに格納しておく要件って何だ?
先読みしておくにしても、もっとまともな方法を取るだろ?
なぜlimit, offset? ResultSetのカーソル移動じゃだめなんだっけ?
127 :
デフォルトの名無しさん :04/02/11 00:22
>110,120 @ITの会議室参考になりました。 件数にもよりますが、多ければやはりメモリに持つのはやめた方がいいみたいですね。 offset,limitで書いて遅ければ、次の手を考えます。 ありがとうございました。 >124 なかなか書き込みが反映されないので2度書いてしまいました。すみません。
>>121 検索結果を保存するとメモリ圧迫以外に、そのままではDBとの整合性が
取れなくなる欠点もある。ところで Google とかは毎回検索だよ。
あたりまえだけど。
どっちも一長一短だけど、最初はシンプルな毎回検索で検討して
遅かっても、簡単なDBチューンや問い合わせの見直しで改善することが
多い。ってか、検索のパフォーマンスも計測せずに結果保持と
最初から決めてる香具師は短絡過ぎ。
それでもどうしても要件を満たせないなら結果保持。
こっちの場合は将来のユーザ数やメモリ量の想定、いつ削除する
とかめんどくさいぞ。
質問させてください。 Java 1.5.0-beta のsrc.zipをjavadocにかけてみました。 % javadoc -J-version java version "1.5.0-beta" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta-b32c) Java HotSpot(TM) Client VM (build 1.5.0-beta-b32c, mixed mode) % javadoc -J-Xmx512M -source 1.5 -d ../doc -subpackages \ > com:java:javax:launcher:org:sunw -private -verbose -use -version -author -serialwarn というように、アホみたいにいっぱいオプションつけてたんですけど ../doc\java/lang/\class-use\Cloneable.html の生成 ../doc\java/lang/\class-use\Class.html の生成 java.lang.StringIndexOutOfBoundsException: start > end at java.lang.AbstractStringBuilder.replace(AbstractStringBuilder.java:743) と言っておちまふ。なんとかなりますでしょうか。 おねがいします。
>>129 1.5 の API ドキュメントはダウソできるけど。
自分で作ってみたいだけか?
>>130 落とせたのですね。
ちょっと見てみます。
ありがとうございます。
>>131 自分で作ってみたくなったりしました。
1.4ではみえないとこがあったんで。
ちょっとやってみました。
>>118 俺も前にそれですげー悩んだ。
元々のDB設計がクソだったからどうやっても重いんだわ。
だから必要な分の情報取得するだけにして早くできないかと悩んだ。
絶対に件数が少なくて大幅に増える見込みが内なら全ページ分一度に読み込んでもいいとは思うけどね。
たいていはいくらでも件数増える可能性あるわな。
やっぱり他の人が言ってるとおり全県メモリに格納するのはやめた方が無難。
一番原始的なやり方ならこう。
ページ切り替える時に何件目から表示っていう情報を渡してやる。
1ページに何件表示するかっていう情報は仕様に合わせて設定ファイルから取得するかrequestから受け取ればいい。
で、ResultSetを回しながら
for(int i=0;rs.next();i++){
// pagestartとEndはそのページで表示する最初と最後の件数。endはstart+1ページの表示件数でいい
if(i>=pagestart && i<=pageNed){
// Bean作ってArrayListに入れるとか。
}
}
で必要な分だけ取得してセッションなりリクエストに入れる。
パフォーマンスを理由に悩んでるならすまん。
俺は結局最後まで速くできなかった。
DBから取ってくる時点で遅いのはどうにもならんかったよ。
誤字多いけどまあいいや。 ちなみに直接数値渡す方法は計算とか面倒だから、 その辺の情報もデータ格納オブジェクトに入れてうまくやると見た目にもキレイで楽になるんだけど 長いので割愛
abstractとinterfaceについて質問です。 自分なり調べて解釈したつもりなんですがこんな感じでよろしいのでしょうか? 他にも共通点・相違点てありますか? 共通点 ・それぞれで宣言したメソッドを継承若しくはインプリメントしたクラス内で必ず使わなければならない。 (オーバーライドしなければならない?) 相違点(abstract) ・複数のクラスを継承できない。 ・abstractクラス内で抽象でないメソッドを実装できる。 相違点(interface) ・複数のクラスを継承できる(interfaceクラスのみ) ・抽象メソッドを宣言することしかできない。
>>133 毎回全件取得のSQL流して、自力で目的件数までカーソル動かすって事?
それがoffset/limitで範囲を指定するより速ければいいんだけど。
>>135 そもそもどういう時に使い分けるのかとか、そういうことを知らないと
全然意味がないよ
138 :
デフォルトの名無しさん :04/02/11 01:01
>>133 ResultSet全件分まわしてしまったら
全件分フェッチされちゃって、全く速くならないのは当然では?
ほしい部分にだけカーソルあてないと。
DB 依存だからじゃないの。
MySQL、Postgres: offset、limit
Oracle: rownum
SQLServer: TOP
あと、ResultSet の行移動は JDBC2.0 以降。
まー
>>133 のは全件回してるな。省略してんじゃないのか。
140 :
デフォルトの名無しさん :04/02/11 01:23
>>135 あってるけど、対にするならclassとinterfaceで
考えたほうがいいと思う。
"interfaceクラス"ってないし。
>>139 行移動しようがしまいが、範囲指定しなければ
問い合わせてから戻ってくるまでで時間喰うんだから意味無いでしょ
検索の時間とデータフェッチの時間が 混ざってるように思われ。 範囲指定すると"検索"が速くなるの?
オブザーバー・パターンってのがあるけど、 オブザーバーとリスナーって同じ?
>>137 abstractもinterfaceも最近知ったばっかりなんでその辺はあまり考えてませんでした・・・。
>>140 classとinterfaceは別ものですか、、、確かにclassじゃないですね。
お二方、
ありがとうございました。
145 :
デフォルトの名無しさん :04/02/11 01:49
>>145 インデックスって何に?
行番号みたいなものにインデックスを?
>>142 例えばOracleの場合だけど、100万件入っているテーブルから
・全件取得のSQL流して、一行目だけJava内で取り出す
・rownum=1を指定して一行だけ取得
ってやり比べてみ。
148 :
デフォルトの名無しさん :04/02/11 02:45
Javaを用いてWebアプリケーションを作りました。アプリケーションサーバとしてTomCatを使用し、外部からのアクセスに対して閲覧できるようにしたいのですが、その方法が分かりません。 推測としてURLのホスト名をデフォルトのlocalhost:8080にしてあるために動かないのだと思いますが・・・。 誰か良い方法を教えていただけませんか?
>>144 abstractクラスは抽象メソッドだけではなく具象メソッドも実装できる。
インターフェースは抽象メソッドのみ。また、具象メソッドのみを実装
したabstractクラスというのもある。これはインスタンスを作れないが
最低限のフレームワークを提供したい場合などに使う。Java APIで
言うならSwingのWindowAdapterクラスなんかがそれだ。無名内部
クラスをキーワードで調べてみよう。
インターフェースは継承よりもクラス間の結合度を弱める(粗結合)
ために使うパターンが多い。文字通り、クラス間のインターフェース
としての機能。
最後にスレッド動作をさせたいクラスでよくあるパターンだが、Java
は単一継承なので、あるクラスを継承してかつスレッドクラスも継承
させるということができない。そのため、親クラスから継承したクラス
にRunnableインターフェースを実装してスレッドクラスに渡してやる
ことで、継承したクラスのスレッド動作を実現する。
勉強がてらSWTでエディタを作成しているんですが、 キーボードショートカットの実装方法で悩んでます。 編集のみにかかわる操作ならテキストウィジェットに任せれば いいんですが、ファイル操作等はその上のウィジェット(Composite)に 任せようとしても、通知するうまい方法が思いつきません。 EventオブジェクトにKeyEventオブジェクトのフィールドをコピーする しかないんでしょうか?Swingとかはどうしてるんでしょうか?
152 :
デフォルトの名無しさん :04/02/11 12:56
>>152 Sun Public LicenseはOSI準拠だけど、Javaの
すべてがこれで提供されているわけじゃないから。
>>152 自社に有利な制約だらけ。ライセンス嫁。
別に当事者じゃないからいいんですが、
>>145 あほですか。
>>146 を読んで。
>>147 それは"検索"が速くなったと言えますか?
ResultSetの内部表現が100万件対1件なだけでしょう?
それが比較して"速い"のはもちろん知ってるし同意。
でも検索結果の話しをしてるんですよ?
>>142 南無
解答として的はずれなDBフェッチが帰ってくるとは
ここでDBちゃんと知っている人がいないようだ
俺は解決方法として検索は常にorderby入れてる
そしてたとえば取得した10件の最初と最後のソート順となるキーを覚えておいて
前へ次へはwhereでそこから検索始める
レコードセットのコピーををセッションに入れておくのはナンセンス
ユーザー数と件数にもよるけどね
社内システムで少人数で結果セットが1万件以内に収まるようなら
キーの配列いれてもいいけど
>>149 こういうこと?
class Clazz2{
...
}
class Clszz extends Clazz2 implements Runnable {
...
}
>>156 いや書き方が悪かったですか、誤解です。
僕も
>> レコードセットのコピーををセッションに入れておくのはナンセンス
そう思ってます。
元質問
MySQLのLIMIT, OFFSETを使って検索結果を毎回取り出すのか、
セッションに入れとくのか、どっちがいい。
おれ
前者をResultSetのカーソルで(毎回)やればいいんじゃないの、と
いったつもりでした。
>> 俺は解決方法として検索は常にorderby入れてる
>> そしてたとえば取得した10件の最初と最後のソート順となるキーを覚えておいて
>> 前へ次へはwhereでそこから検索始める
それはそのカラムに同じ値が並ぶ結果セットだと使えなくないですか?
updateしやすいようにユニークなキーはかならずあるようにテーブル設計してる? そうならだいたい大丈夫だよ
プライマリは設定したほうがいいと思う
なに?
要するに
>>158 は
>>133 みたいなやり方をしろってわけ?
(ループでなくてResultSetの行移動を使うとしても)
>それが比較して"速い"のはもちろん知ってるし同意。
って書いておきながら、わざとそうでない方法を採るのは何故?
行番号指定のあるなしで、処理が戻る
(ResultSetが帰ってくる)までの時間自体相当変わるけど。
Oracle で order by がある場合、rownum で範囲指定しようと すれば多段クエリーになるので逆に遅くなる。
>>162 >>142 じゃないし、DB屋でもないんで良く分からんのだが、
DBはorder byを指定した時点で、全件比較してソートをしたりはしないのか?
whereで行番号100件目以降とか指定したって、
一度ソートしないとどこからが100件目以降なのか分からないだろうし、
ResultSetが返ってくるまでの時間は変わらないような気がするのだが。
なぜ行番号指定するとResultSetが変えるまでの時間が短くなるの?
比較するカラムにインデックス張っとけば
>>162 当事者じゃないし好みもあるからなんともいえないですよ、
ただ、
- クエリで範囲指定
常に最速、ただSQLに方言があって
統一できない。->JDBC直書以上のことをやろうと
すると面倒な可能性。->元の人のアプリ構成は知らないけれども。
- ResultSetでフェッチ件数とスタート件数指定
ドライバがまともならとても速い。
まともじゃなくても同じコードは動く。
->*僕から見て*綺麗。
- ResultSetをパラメータなしで動作させ、かつ全フェッチ。
>>133 方式
遅く、かつ、それを毎回やる。->汚い。
1番目は2番目より速いのはもちろん知ってます、ってことです。
JDBC直書以上ってのは何らかのミドルウェアも同時に使う時ってことです。
JDBCドライバのつくりにすごく左右されるし、一般にフリーのDBだと
遅いのも知ってます。
むきになってるわけじゃないので間違ってるなら別にいいんですが。
データないし。
あ、同じくDB専門じゃないです、僕も。 つっこんでくださる方はぜひspecificにお願いします。
>>166 すんません。純粋に疑問で、別に食って掛かってるとかじゃなくて、
DBやJDBCがこの辺どうやって対処してるのか知りたいだけなのだが、
>クエリで範囲指定
これ、例えば「〜を除いて」とかいう条件があれば、
order by対象となるデータを一気に減らせるので速くなるのは分かるんだが、
order byしたデータのうち100件目から110件目ってやっても、
>>164 の理由で*ResultSetが返ってくるまでの時間*にはあまり意味がない気がするんだが。
もちろん、ResultSetを使う段になったら、
PreFetch等の問題で、最初から100件目以降のデータを取って来た方が速いのは分かる。
でも、
>>162 の言う、
>行番号指定のあるなしで、処理が戻る
>(ResultSetが帰ってくる)までの時間自体相当変わるけど。
は何故?
でもさ、システム作るときってDBに何使うか決めて作ること多いよね。 方言に柔軟に対応できるのとどっち取るかって話で、それは当事者がきめりゃいいし。
170 :
デフォルトの名無しさん :04/02/11 19:30
サーブレットでpathを取得するgetRealPathというのがありますが jspの場合はなんでしょうか?
>>168 いやそれは僕も聞きたい側なんですが、
一般にDBとJDBCドライバが中で何やってるかに依存した問題で、
結果セットにパラメータつけても対応せずに
無視してデータそのものとかを中に全部書き込んで返すようなDB(+ドライバ)が
有り得るならそうなるでしょうね。>>"時間自体相当変わる"
でもAPIに対してフルチューンしたドライバってのも
書けるわけで。てかそれがOracleとかSQLServerのJDBCドライバを
売ってる会社が本家以外に何社もある理由なわけで。
>>170 サーブレットの中ではどうやってgetRealPath()してる?
同じことをJSPの中にも書いてみそ。
173 :
デフォルトの名無しさん :04/02/11 19:52
>>172 このようにやっています。
this.getServletContext().getRealPath("");
JSPではどのようにすれば宵でしょう。
<%=getServletContext().getRealPath("")%>
175 :
デフォルトの名無しさん :04/02/11 20:39
javaのことを勉強する上で参考になるサイトありますか? 勉強したいことはクラス設計とかフレームワークのこととか・・・。 自分でフレームワークを作れるくらいになりたいのですが、 自分ひとりでやるとなると、なかなかその情報の良し悪しの判断もつかなくて。
177 :
API仕様を探す人 :04/02/11 20:58
javaのAPI仕様をインターネットなしで見たいのですが ダウンロードページがどこにあるかわかりません だれか教えてください
179 :
API仕様を見つけた人 :04/02/11 21:18
ありがとう ございます では行ってきます
>インターネットなしで ……
181 :
デフォルトの名無しさん :04/02/11 21:28
javaからexcec()メソッドを使って引数6個渡してvbsファイルを 起動させたいのですがわかりませんどなたか教えてください。 引数なしでは起動できました。
182 :
デフォルトの名無しさん :04/02/11 21:29
↑exec()の間違いです。すみません
>>176 どうもありがとございます。
こちらのサイトを元に勉強していきます。
>>180 >インターネットなしで
がおかしいと思ったあなたは馬鹿
釣られないよ
>>166 まだいる?ちょっと試してみたよ。
MySQLに100万件データ作って、order byしたときの*ResultSetが返るまでの時間*を測った。
1.order byするだけ
2.order by + 前回の最後のキーを覚えてwhere (
>>156 の方法ね)
そしたら、1件目からの検索は全然変わらないんだが、
取得する対象が100,000件以降、600,000件以降と増えていくにつれ、
2.の方法が劇的に*ResultSetが返るまでの時間*が速くなった。
ちなみに、1件目からを100%とすると、100,000件で86%、600,000件で50%だった。
ResultSetからのデータ取得込みでの計測もやってみたんだが、
>>133 の方法は論外としても、ResultSetのプリフェッチやカーソル移動を色々組み合わせても、
この差を覆すことはできんかった。
漏れは
>>164 のように考えてたんだけど、結局、DBにとってorder byは大したコストじゃなくて、
ResultSetの生成に必要なコストの方が、結果件数によって大幅に変わるってことか。
limit句を付け加えるとさらに速くなったし、MySQLならoffset + limitが良いということか。
>>158 で言ってた、「カラムに同じ値が並ぶ結果セットだと使えない」問題をどうするかという話はあるが、
ユニークなのが分かってたらこの方法の方が断然いいみたい。
offsetやlimit、topのないOracleとかでも使えるだろうし。
もちろん、ドライバの実装によって変わる可能性もあるだろうから、
他のドライバやDBでもそうなのかは試してみないと分かんないけど。
知ってる人には当たり前なんだろうが、すげー勉強になった。ありがとう。
>>166 >>162 >>158
なんだ釣りか? 完璧に論破してやろうと思ったのに
釣られないよ
>>166 でいいっぱなしであとは自力で解決できるだろうと思って
ほったらかしにしていたが大丈夫だったね
すべて教えちゃうとたんなる作業になるからヒントだけ書いたんだ
データベースってのは検索とかを瞬時に行うのが仕事
AccessやParadox、DBaseのようなスタンドアロンデータベースなら
別にすべてフェッチしようが好き勝手にやればいいけど、
普通のクライアントとサーバーで処理するタイプは
いかに結果セットを絞るかどうかがポイント
ちなみにユニークじゃなくてもこれが絞れればいいので
名前のようにユニークになる確率が高いものの場合、
「order by name , no」でいい
noがユニークなキーでnameがここでのソートね
2つのキーを保持しておいて次を検索するときには
重なる可能性のあるnameで検索しておいてそこから同じnoが
見つかるまでフェッチ、そしてそこから10件表示とかやるわけさ
名前の場合、かなり絞られるから効果的だが
たとえば住所の都道府県のように絞りづらい(複数でやすい)案件の場合
設計自体を考える必要がある
こういっただぶりやすいのはリスト表示して目で確かめるなんて実作業的に意味がない
たとえば都道府県だと北海道とか数千件ならんでいてそこから探すのか?ってことを考えればいい
つまりこういったものはwhereで絞るべきものであってソートには使わないわけ
すまん俺も間違えた 俺156
あーあ
データベースは java 以外もいろいろ絡んでくるから別スレでやれば?
>>191 なるほど。これで実験結果にも納得できた。
ResultSetはカーソルだけ持って、必要に応じてデータを取りにいくだろうから、
プリフェッチやカーソル移動の方が場合によっては効果的だろうと思い込んでた。
重ね重ねありがとう。
もしよかったら、さらに教えてもらえると嬉しいんだけど、
>ちなみにユニークじゃなくてもこれが絞れればいいので
というので開始レコードについては、DBに依存することなく取得できるのは分かったんだけど、
終了レコードを、DBに依存することなく取得することは可能?
ヘタレですまんが、ウェブでdistinctってのを見つけて、distinct 10とかやってるんだが、
どうもMySQLではエラーになってしまうし・・・。
ORDER BY なんちゃら DISTINCT で逆順
ちゃうわ、同一レコードの排除だ。なんでこれがでてきたんだ
終了レコードってどういういみ?
・order by でソート順を逆に ・ResultSet#last()でなんとかやる(使ったこと無いけど) ・いいかげんDB板逝けば?
201 :
デフォルトの名無しさん :04/02/12 01:25
Labelに上付き文字(指数とか)を表示させるにはどうすればいいんですか?
>>198 >>199 ずっと前からの流れで、データを10件ずつとかシーケンシャルに取得する話。
で、101件目から110件目という取り方をした場合、
開始の101件目のレコードの取り方はDB非依存でできそうだが、
終了の110件目をDBに依存しないSQLで取れるのか知りたかった。
もうResultSetとは関係なくなって来てるので、DB板行って来る。
>>201 java.awt.Labelでなくてjavax.swing.JLabelの方なら、テキスト表示にHTMLが使える。
だからこうすると…
frame.add(new JLabel("<html><body>10<sup>2</sup></body></html>"));
Appletにパラメータ送ることはできますが 逆にAppletから定数を引いてくることってできないですか? クッキの読み書きがしたいのですが・・・
166です。ちょっと見てませんでした。
>>164 さんはすばらしいと思います。
order byとページ最後のやつのidから次ページを
whereで絞ると、どのDBでもできるのはわかったんですが、
そこから10件とかをクエリで標準的に絞れるのかは僕も分からないです。
TOP, LIMIT, rownumをDBによって分けて吐き出すコードでも書くのかな。
実際、100万件のヒットから60万件目から表示したい、という場面は
あまりなく、結果を最初から見ていくことがほとんどであろうことを
考えると末尾を絞る事のほうが効果的かもしれませんよね。
とにかく乙でした。
>>196 DESCENDと混じった?
最後の ID を覚えてそこから検索する方法は よくある Google とかの表示方法だと出来ないんだね。 前へ 1 2 3 4 5 6 7 8 9 10 次へ
できるっしょ
210 :
デフォルトの名無しさん :04/02/12 13:44
最近はじめたばかりの超初心者ですが,質問いいですか? class A{ void method(){ } } として, Object obj=new A(); とした時,obj.method()が呼び出せないのですが・・・ objの実体はclassAのオブジェクトですよね・・・ A obj=new A(); とした時は呼び出せるのは解かります. 超初心者の質問で申し訳ありません.
>>210 Object obj=new A();
とした場合、objは実体はクラスAのインスタンスだがObjectクラスのインスタンスとして認識されているので、クラスAがもつメソッドmethodは呼び出せない(あると認識できない)。
メソッドmethodを呼び出す際には、キャストしてobjがクラスAのインスタンスだと認識させ直さないとならない。
212 :
デフォルトの名無しさん :04/02/12 13:56
質問させてください。 Windows2000+Java1.4 で環境変数を取得したいと思っています。 現在ではSyatem.getenv は使用できなくなっているので System.getPropertyを使えとのことですがうまくいきません。 たとえば、環境変数に JAVA_HOME = C\j2sdk1.4.1_06 っと入ってる場合 System.getProperty("JAVA_HOME"); で取得できそうですが、NULLが帰ってきます。 どのようにすればいいのでしょうか? ご教授願います。
>>210 コンパイラは obj.method(); という一文だけを見る。
そのときどきの判断では、A 型の存在など意に介さない。
obj に定義されてないメソッドを呼ぼうとしているから、コンパイラが通してくれない。
※以下注
>>211 の言ってる「認識」というのはコンパイラに対してのもので、実行時に行われることではない。
キャストしたら、コンパイラは(イメージ的には「しぶしぶ」)通してくれるだけ。
((A)obj).method();
しかし、以下の場合だって、コンパイルは通ってしまう。
Object obj = new String("hoge");
((A)obj).method();
その場合、実行時に初めておかしいことが分かる。結果、例外が発生する。
>>212 残念ながら君が思ってるような環境変数はそれでは取れん。
getPropertyについてはAPIでSystemのgetPropertiesの所見ればキーと取れる値の一覧が出てるよ。
OSの環境変数の取り方は俺はしらん。
ありがとうございました.<all
216 :
デフォルトの名無しさん :04/02/12 14:15
>>216 Java に関係したものだったらその API で取れる。
つまり、OS の環境変数からマッピングされてることになる。
getProperties() して、中身を列挙して探してみたら?
カスタムな環境変数はダメだろうね。知らんけど。
スクリプト書いて args にでも渡すとか・・・
>>216 JAVA_HOMEだけでいいなら、
System.getProperty( "java.home" );
で取れるぞ。
>>214 の言ったところを読めばわかるだろうに。
219 :
デフォルトの名無しさん :04/02/12 14:38
>>218 言葉足りずですみません。
自分で勝手に作った環境変数を取りたいんですよ。
>>219 deprecatedを承知でgetenvを使うか、Nativeで実装するかかな。
どっちにしろ、実行環境が限られるけどね。
>>212 起動時に環境変数をシステムプロパティに設定するとか。
java -Dfoo.bar=%HOGE% ClassName
定数の宣言と継承について教えて頂きたいのです。 //昇順=(ASC_SORT),降順=(DESC_SORT) public static final int ASC_SORT = 0; public static final int DESC_SORT = 1; と定数を作っておけば、別クラスで★★.sort(0);←昇順 とすんなり書けて実行もすんなりしてしまうわけですが、正解は★★.sort(ASC_SORT); だと言われてしまい、何故なのか理解不能なのです。sortの()内に 定数を入れる必要の無い時は定数を宣言する必要はあるのでしょうか?
教えて君で申し訳無いのですが、hidden要素を利用した。 サーブレットを利用しているのですが、hiddenタグの中身を 鯖上にアップしてもurlの下に分けの分からん文字が来るだけです。 どうすれば、<input type="hidden" value="ココ" name="hidden" /> の値を受け取れるのか教えて下さい。
>>222 おいおい、0と1で呼び出してたら、定数値が変わったときに、変になっちゃうじゃねーか。
たとえばその定数を「やっぱ0と1じゃありきたりだから765と573にしよう」と変えた場合に、ちゃんと定数使っておけば何も問題はないわな。
しかし、0と1なんかで呼び出してたら想定しない動作をすることになっちゃうわけよ。
>>222 根本的に勘違いしている。定数は変数と殆ど同じ。左辺にもってこれないだけ。
プリミティブ型の final であれば、コンパイル時に勝手に
★★.sort(ASC_SORT); → ★★.sort(0);
こう変換されるとでも思っておけばいい。
>「正解は」
その方がより正しいという意味に過ぎない。
つーか、使ってこそ定数の意味がある。
>定数を入れる必要の無い時
具体的にどういうときよ。
>>223 request.getParameterValues( "hidden" )[0]
requestはHttpServletRequestのインスタンスな。
>>223 >hiddenタグの中身を鯖上にアップしても
どういう意味かイマイチ分からん。
HTML 中の hidden タグの中身をブラウザに鯖へ送られ(アップ「され」)たとき、か?
>urlの下に
下って何だ。うしろのことか。つまり GET query の末尾のことか。
普通の form タグと同じだよ。ServletRequest#getParameter(String)。
あ、Http〜 だったかな。 ちなみに「わけのわからん」というのが「化ける」って意味なら、 new String(request.getParameter(key).getBytes("8859_1"), "JISAutoDetect"); みたいな感じでエンコード指定し直すといい。 一番いいやり方はそれなりのスレで偉い人に聞いて。
まあ意味不明な文字がurlにつくのがいやなら method="post"
230 :
デフォルトの名無しさん :04/02/12 16:12
Vectorのcontains( )について聞きたいのですが質問させてもらってもよろしいですか? 例えば, Integer obj1=new Integer(1); Integer obj2=new Integer(1); 当然,obj1==obj2 はfalseですよね. しかし,Vector v=new Vector(); v.addElement(obj1); v.contains(obj2); とやるとtrueが返ってきます. 中でどのような判定を行っているか解かりますか? そして,自分で作ったクラスのオブジェクトの同一性を判断するようなメソッドをオーバーロードすることはできますか?
>>230 Collection の類での同じかどうかの判定は、中で Object#equals(Object) を呼んでる。
(詳しくはリファレンスを参照のこと)
Integer なら、互いのプリミティブ値が == なら true を返すようにオーバーライドされている。
233 :
デフォルトの名無しさん :04/02/12 16:19
>>231 equals()をオーバーライドすれば独自のものが作れるのですね.
ありがとうございました.
234 :
デフォルトの名無しさん :04/02/12 17:09
お願いします。教えてください。 プログラムを作成したいのですが、 ヒストグラム平滑化がうまくいきません。
>>234 >うまくいきません。
そう書かれてここをこうすればいいよ、と簡単に答えが来るとでも思ってんの?
そもそも「まったく分かりません」の間違いじゃないの。
236 :
デフォルトの名無しさん :04/02/12 17:14
質問させてください。 ヒストグラム平滑化のプログラムを作りたいのですが 全くどのように作成していけばいいのか分かりません。 どのような考え方になるのか教えてください。 何かあれば教えてください。
ここは言語非依存のアルゴリズムの話題は適さないと思われ
配列が何なのか知らなければしょうがない だから基礎を勉強しなきゃいけない 画像でやろうとしてるんなら諸々のクラス群を勉強しなきゃいけない 君は現時点で何ができるんだね
239 :
デフォルトの名無しさん :04/02/12 18:11
アプレットで作ったブロック崩しを、アプリケーションとしても、
アプレットとしても使えるようにしたいと考えています。(↓な感じに)
http://black.sakura.ne.jp/~third/system/java/Gjava33.html しかし、アプリケーション版だと、Graphicsクラスなどで、上のほう(座標0,0など)に描画したものが、
ウインドウバー(?ウインドウのタイトルや閉じるボタンが表示されているバー)によって、
隠れてしまいます。
ウインドウバー部分を考慮して、描画する際のHeightの値を修正すれば、問題無いのですが、
プログラムを書き直したくありません。(アプレット版の見栄えも悪くなるし)
プログラム中のHeightの値を変えずに、アプリケーションに移植する良い方法があったらご教授下さい。
よろしくお願いしますm(_ _)m
Swingの自前コンポーネントで ドラッグイベントごとに重たい再描画やってるんだけど、 J2SE1.5Beta(Linux)で動かしてみたら微妙に挙動が変わってしまった。 これまで: 適当にイベント捨てつつ、カクカク動く 1.5Beta: 順番にイベント処理しつつ、描画が遅れてついてくる 描画速度自体は上がってるんだけど、なんか気持ち悪くてやだ。 SwingUtilities.invokeLater()で最新のイベントだけ処理するようにしても変わらず。 JComponent.paintImediately()でイベントスレッド内で再描画するようにしてもだめ。 ひょっとして描画処理関係変わった? 詳しい人いたらおせーてくだちい
>>239 設計が悪い。LayoutManager うまく使ってる?
とにかく、突然
「プログラム中のHeightの値を変えずに」
なんて書かれても対処できるわけ無い。
「僕の部屋の冷蔵庫を延長コードを使わずにうまく配置するにはどうすればいいですか}
と聞かれて、君アドバイスできるか?
>>239 Frame f = new Frame();
MyApplet a = new MyApplet();
f.add(a);
以下略・・・
>>241-242 レスありがとうございます。
状況的にはこんな感じです。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class CF extends Frame {
public CF() {
CCanvas cc = new CCanvas();
add(cc);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setSize(300,300);
show();
}
public static void main(String args[]) {
CF cf = new CF();
}
}
class CCanvas extends Canvas {
public void paint(Graphics g) {
g.drawString("みえますかー?", 0,0);
}
}
JavaバーチャルマシンってMSのとSunのどっちが性能いいの?
これをコンパイルして実行すると、「見えますかー?」という文字がバーに隠れてしまいます。
要は、drawString()の描画位置を変えずに、これを回避したいのです。
レイアウトマネージャは使っていません。扱うのはCanvas一枚です。
>>242 その方法も考えたのですが、実行時に膨大なエラーが出てしまいました。
>>246 いろいろとやってみたんですが、
CanvasとPanelって同時に表示できないんですね・・・。
Panelメインでやると、1から作り直すことになるので、Panelはやめときます。
ようは設計がダメダメってことだ
ジャバナちゃんのエロ画像くだSAI
250 :
デフォルトの名無しさん :04/02/12 20:02
>>212 俺も今気づいたんだけど、JDK1.5でSystem.getenv復活してる。
deprecatedじゃないし、更新できないMapとして全部取れる。
251 :
デフォルトの名無しさん :04/02/12 20:20
>>248 元々アプレット用に作ったものなので・・・。
タイトルバーも座標に含まれているなんて驚きでした。
まさか、プラットフォームに依存する部分も含まれているとは・・・。
調べたところ、getInsetsメソッドで、タイトルバーなどの境界部分の高さ・幅が検出できるみたいですね。
これを使ってwidth,height値を計算して、描画位置を出せば解決できそうです。
AppletとFrameで継承されているメソッドなので、ちょっと書き直せば、なんとかなりそうです。
252 :
デフォルトの名無しさん :04/02/12 20:31
聞きたいんだけど、 Apache cocoon で 内部にJavaを仕組めるんだけど & って文字を使うと、cocoonが正常に認識せずエラーでるんです。 & 以外の記述方しってますか?
&はXMLだと&と書かないといけないんじゃないかな。 xsp:logicタグの中にJavaのコードを書けるとはいえ、 XSPファイル自体XML文書であることに変わりはないわけで。
あわわわわ、失敗した。&amp;です。半角で書くとエスケープされるのか。知らなかった。
>254 エスケープされるのではない。エスケープ"されない"のだ
>>256 自己解決しました。すいません。間違っている・・・といえばそうです。はい。
元々アプレット用なので、アプレットなら0,0の位置に描画しても問題はありません(タイトルバーが存在しないので)。
これがアプリケーション版になると、0,0の位置にはタイトルバーがあり、
そこに描画したものが、「隠れてしまう」、というのが問題なんです。
そこで、getInsets()メソッドで、タイトルバーの「高さ」を取得します。
この「高さ」は
・アプレット版は0 (タイトルバーが無いため)、
・アプリケーション版はプラットフォームよる、
となります。
この「取得した高さ」を使って、
drawString("Hello",int x, int y + 取得した高さ);
とすれば、アプレットでもアプリケーションでも、同じ外観を得られるわけです。
258 :
デフォルトの名無しさん :04/02/12 21:59
pdfファイルを扱う、iTextってライセンスはあるのでしょうか? ちなみに、iTextを使って作成したアプリをあるユーザで開発して その後はユーザはアプリを市場で売ると思います。(売ります) 追加、poiも使っています。poiのライセンスはどうでしょうか?
260 :
デフォルトの名無しさん :04/02/12 22:15
http://www.lowagie.com/iText/ It's available for free under a multiple license: MPL and LGPL.
売るのは大丈夫、アプリ側のソースは
LGPL:
アプリ側からはリンクするだけ->公開しなくていい。
LGPL部分を改変する場合->改変部分公開。
MPL:
MPLで配布されるコードを少しでも含んでいるファイルはソース公開。
新規開発したものはリンクしようが、バイナリに含めようが
公開しなくて良い。
POIはApacheLicense
ApacheLicenseによってソースが配布されているソフトウェアを
含んでいることを明記すれば、バイナリ再頒布可能。ソース公開義務なし。
あってる?えろい人。
261 :
デフォルトの名無しさん :04/02/12 23:00
LGPLの場合、ライセンス文書として LGPL を製品に添付する必要 もあるぜ。で、LGPL の部分については、改変部分だけじゃなくて、 オリジナルのソースの提供手段も明示しないとまずい。
>>243 Grahics#translate(int, int) でも調べてみろ。
座標をずらして描画するようにすればいいだろ。
いま学校の課題をやっていたのですが、わからないので質問させてください。 「コマンドライン引数として入力された2つの正の整数についての乗算結果を表示する」 という課題なのですがコンパイルはできるものの、いざ実行しようとすると c:\java> java Multiple 7 41 Exception in thread "main" java.lang.NoSuchMethodError: main というfuuni エラーがでます。理由と解決方法を誰か教えていただけませんか? 以下がソースです。 /* 問題4 Multiple */ class Multiple{ public static void main(int a,int b){ int intKekka = 0; int i = 0 ; int intAShift = a ; int intBShift ; while(intAShift != 0){ intAShift = a >> i ; intBShift = b << i ; if(1 == (intAShift & 1)) intKekka = intKekka + intBShift; } System.out.println(a + " × " + b + " = " + intKekka); } }
おもったより早く解決しました(汗 /* 問題4 Multiple */ class Multiple{ public static void main(String arg []){ int a = Integer.parseInt(arg[0]); int b = Integer.parseInt(arg[1]); int intKekka = 0; int i = 0 ; int intAShift = a ; int intBShift ; while(intAShift != 0){ intAShift = a >> i ; intBShift = b << i ; if(1 == (intAShift & 1)) intKekka = intKekka + intBShift; } System.out.println(a + " × " + b + " = " + intKekka); } }
>>264 >main(int a,int b){
こういう発想、いいね
>>268 ぃゃぃゃ超ハズカシイ。ちなみにi++忘れてて無限ループになる問題ももう解決したので言わないでください(照
a * b
>>270 計算の方法は課題の注文だったんですよ。アセンブラじゃねーっつーの!!とか思うけど仕方ない。
>>272 マイナスとか考えてなかった。超ねむいんだよ!!(イイワケ)
/* 問題4 Multiple */
class Multiple{
public static void main(String arg []){
int a = Integer.parseInt(arg[0]);
int b = Integer.parseInt(arg[1]);
int c = a ;
int d = b ;
boolean minus = false;
if(a < 0){
a = a | -1;
minus = true;
}
if(b < 0){
b = b | -1;
minus = !(minus ^ false);
}
int intKekka = 0;
int i = 0 ;
int intAShift = a ;
int intBShift = b ;
if(1 == (intAShift & 1)) intKekka = intKekka + intBShift; while(intAShift != 0){ intAShift = intAShift >> 1 ; intBShift = intBShift << i ; if(1 == (intAShift & 1)) intKekka = intKekka + intBShift; i++; } if(minus) intKekka = intKekka | -1; System.out.println(c + " × " + d + " = " + intKekka); } } これで解決したとおもう。ありがとう。
自分で問題文に、2つの正の整数について、って書いてるじゃん。
あ、ホンマや。読んでなかった。プログラムの概要、プログラム名、仕様って3つ決まってて 「正の整数うんぬん」ってのはプログラムの概要に書いてたんだけど 半年分の課題を一晩でやらなきゃなので概要すっとばしてプログラム名と仕様しか見てなかった。 結果、そんな罠にハマっちゃったんだな・・・・。眠い。
277 :
デフォルトの名無しさん :04/02/13 13:41
クラス内でしか使わない private な定数も static にすべきですか? たまにしか使わなくて、かつ同時に一つずつしか使わないクラスであれば static 外した方が多少遅くなるかもしれないけど、 静的領域の節約になるような気がするのですが・・見当違い? 多分、的外れな事言ってると思うから指摘キボン win2k + jdk1.4
Javaを使っているのに、そんな些末な性能の問題を考えるなよ そんなに細かいことが気になるなら別の言語使え
>>277 static にすべきかどうかはあくまで用途による。
VM 実装のアヤまで考えるのは、個人的には感心しない。
インスタンスを一個しか作らないから、という条件はあるだろうが、
そこをあえて「二個作ることがあったとしたら」、と考えてみたいところだ。
280 :
デフォルトの名無しさん :04/02/13 19:49
>>278 >>279 ありがと。
些末な問題って事は分かってるんだけどね。
この前やってた仕事で、クラス作る人によって
そこら辺がバラバラだったから、ちょっと気になって。
あんま深く気にしないようにするよ。
>>277 定数は static final にしる。
設計の美しさ > コードの美しさ > パフォーマンス
まー設計もコードも美しければ、大概パフォーマンスも良いけど。
>>281 Stringに関してはそんなこともない。
Stringを+してったほうがコード的には綺麗だが、パフォーマンス的にはStringBuffer使わないとシャレにならん。
>>282 設計の美しさという点からして、Immutableなオブジェクトを何度も生成するのはダサくない?
なんで、String連結についても
>>281 の考え方でおおむね合ってるかと。
>>284 2,3個なら迷わず+。7,8個くらいからStringBuffer。
さて、問題です。 次のうちどれが一番速いでしょう。 strArrayは要素10の文字列配列とします。 1. String all = new String(); for(int i=0;i<strArray.length;i++){ all += strArray[i]; } 2. String all = strArray[0] + strArray[1] + strArray[2] + strArray[3] + strArray[4] + strArray[5] + strArray[6] + strArray[7] + strArray[8] + strArray[9]; 3. StringBuffer sb = new StringBuffer(); for(int i=0;i<strArray.length;i++){ sb.append(strArray[i]); }
>>287 誰がどう見ても2だろ。
でも実際に書くコードは2はアホっぽすぎるので3だな。
>>285 答えまだ〜?チンチン
俺は3だと思っていたんだけど違うのかな。
ttp://www.kari.to/upload/source/3682.txt 上は、マインスイパーを作ろうと思って書いたソースなのですが、
jimenn_a[i]=new JButton(suuji[i_jimenn[i]]);
のところでどうしてもArrayIndexOutOfBoundsExceptionが発生してしまいます。
しかも、そのときi=0と表示されています。
どこが悪いのでしょう。
>>292 ソース見てないけど、[i_jimenn[i]] が範囲超えてんじゃないか?
ってかコレクション使えよ。
i_jimenn[i]の値は-1だが。
すみません。 -1のときのifを作るの忘れてました。 これは勘違いってことで。
ソース見たけどそんな感じ。配列のインデックスにマイナス指定してる。 例外が発生する行の前にこんなのを入れてみたら? System.out.println(i_jimenn[i]); System.out.println(suuji[i_jimenn[i]]); これがなんでマイナスなのかは、ソースをちゃんと読んでないのでワカラン。 ところで上のは古典的なprintデバッグだけど、 もっと便利にデバッグしたかったらデバッガの使用をお薦めする。 もちろんデバッガがあればprintデバッグが不要になる訳じゃないが。
>>296 爆弾があるとき-1にするように指定していたんですよ。
あと、eclipseのデバック機能使っています。
それと、廃止メソッドって何ですか。
と、ぜんぜんうまくいきません。
>>293 Javaで生の配列を使うことの利点って、ほとんどないんだよな。
数十バイト削るのに命を削る必要があるときや、メソッドの
コールスタックを一段削ることが重要になるほど実行速度が
重要な時くらいか?キャストするのが嫌なだけ?
そういう時はJavaを使わないのが正しいので、どっちにしても
Javaのソースで[]見たら、馬鹿が開発チームにいると思ってし
まったほうが良いかもな。
>>296 デバッガ使ってないなんて、そんな基地外マゾ野郎がまだいる
のかなあ…サーバーサイドでprintデバッグなんて、時間の余
ってる暇な馬鹿の仕事だと思うなあ。
>>291 APIドキュメントのStringとStringBufferの説明を読んでみそ。
>>297 >>283 は「オブジェクトを生成する」話をしてるし、
>>287 の2.みたいな話ではないんじゃない?
>>300 デバッガ使ってなくても効率よけりゃ問題ないし
サイズが分かり切ってるのなら配列使ってもなんの問題もないだろ
自分のスタイル以外は否定ってのもあほな話だ
>>300 rt.jarのソース見てみたけど、バカばっかりだね。だからJavaはダメなんだね。
>>300 HttpServletRequest#getParameterValues ともか String[] を
返すんだが。まぁ要素数が変わらないから妥当だな。
コレクション覚えたてなので使ってみたいクチか?
"AAA"+"BBB"+"CCC"が new StringBuffer("AAA").append("BBB").append("CCC").toString() にコンパイルされるということを分かっていない人がたくさんいるんですね。
>>304 配列を使用すると、挿入、削除、容量の拡大が難しくなるので、保守の時を考えると
可変長リストがベスト。
>>HttpServletRequest#getParameterValues ともか String[] を
はユーザが値を選択した時点で配列の大きさが決まり、doPostメソッドに送るだけの
単なる引数みたいなもの。
>>304 J2EEは、頭の容量の少ない素人にも分かりやすくコード記述できる
ように、という視点が最優先でAPI設計してあるからな。
さすが低能派遣専用言語。
309 :
デフォルトの名無しさん :04/02/13 23:38
Cドライブ容量を計算したい場合何か方法ありませんか? 階層を全部追っていってFile.length()で足すしかないのですかね?
>>305 いつの話してんだオサーンは。コンパイル時じゃなくて実行時なんだが。
あなたはこのスレで1番アホなんですね。
間違えた。。。 "AAABBBCCC" に変換されるんだった。。。
親クラスが生成した子クラスのインスタンスを消滅させるには どうしたらいいでしょうか? その場合、子クラスの持つ孫クラスのインスタンスも消滅 されるのでしょうか??
全てを知っている
>>314 様が、解説をしてくださるので、良く聞いておけ。
あんたは、えらい。
>>313 意味が分からん。子クラスも持つ孫クラスってのは
子クラスのフィールドのことか?
どこからも到達できないインスタンスは GC の対象になるから
消滅するといえる。
インスタンス変数をnullで初期化してしまえばいいのだろうか・・・?
321 :
デフォルトの名無しさん :04/02/14 00:08
>>320 まじッスか…_| ̄|○
なんか面倒ですね。
>>321 コード自体は 10 行もいらんだろ。遅いけど。
それか Runtime#exec でなんかコマンド実行するとか。
>>291 >>301 thx。ドキュメントにちゃんと書いてあるんだな。
色々な本で読んだからまさか都市伝説だとは思わなかった。
親クラス:管理クラス 子クラス:スレッドである処理を行うクラス(起動後からずっと定期的に処理を行う) 孫クラス:ソケットを使用して通信をしている 親クラスが他のクラスから停止依頼を受けたときに、スレッド処理を停止して 子クラス、孫クラスを破棄したいのです・・・。
326 :
デフォルトの名無しさん :04/02/14 00:19
全てを知っている
>>326 様が、解説をしてくださるので、良く聞いておけ。
全てを分かってる俺様が説明してやるから、良く聞いておけ。↓
329 :
デフォルトの名無しさん :04/02/14 00:24
>>325 その親子孫って継承関係はないんじゃないか?
その言葉使い変。逆にそれで親子関係あったら構成おかしくないか?
で、スレッドは起動後からずっと処理を行うって書いてるのに
停止依頼を受けて停止ってどっちなんだ。。。
そのスレッドとソケットクラスの finallize メソッドに println でも書いて
破棄されてるか確認してみ。
ただし GC 対象になってもメモリがあまりまくってたら GC されないから
停止後、ダミーでメモリ食う処理いれて。
-ms と -mx をわざと少なく指定したほうがやりやすいかも。
>>329 Runtime#exec は半分冗談だぞ。。。
出来るだけ Java API でやってくりよ。
>>325 スレッドが止まってたら、子を参照してる変数をnullか、別のと置き換える。
孫は、その子からしか参照されてないなら、何もしない。
その子以外から参照されてるなら、参照してる変数をnullか、別のと置き換える。
・・・とか、そんな話じゃなくて?もっと深い話?
333 :
デフォルトの名無しさん :04/02/14 00:37
313はGCによる自動削除ではなくて、C++でいうところのdelete命令のように 自分で削除するにはどうするんだ?って事を聞いてるんじゃないのか?
>>333 じゃ、無理なんじゃないの? null 入れても System#gc 読んでも、
いつ GC するかは VM 次第じゃないの?
>>333 おお、なるほど。でも、それは無理な相談だ。
>親クラスが他のクラスから停止依頼を受けたときに、スレッド処理を停止して >子クラス、孫クラスを破棄したいのです・・・。 お前ら、これの意味がわかるのかよ。 俺にはさっぱりわからん。 百歩譲って、「クラスの破壊」が「インスタンスの破壊」だとしても なぜインスタンスを「破壊」したいのか、その理由がわからん。
破壊じゃなくて「吐き」な。
いや、消滅だ。
342 :
デフォルトの名無しさん :04/02/14 00:47
NULLを入れたら確実にインスタンスをメモリから消滅するにはどうするかって事か・・・。 なんとか力になれんものかな・・・
>>335 あれ。+で連結しても変わらないっていう結論じゃないの?
>>291 の1と3はループの処理の分だけ2より遅いってことかと思ったんだけど。
>>342 System#gc を 100 満開呼ぶ。まず消えるだろ。
大概 10 回くらいでいけるけどな。
>>344 あの 1 と 3 は全然速さ違うだろ。
ん?ここは突っ込むとこじゃないのか?
313の質問を改め、「ゴミをGC以外に片付ける方法はありますか?」という質問にします。
>>347 Java には delete 演算子に相当するものはありません。
Java ではオブジェクトが不要になると自動的に破棄されます。
>>347 そう思った理由のほうが興味ある。特に無い?
352 :
デフォルトの名無しさん :04/02/14 00:56
HashMapやTreeMapで質問です。 1.ループの中で HashMapを返すメソッドからHashMapを受け取り、 そのHashMapから 任意の値をgetして、キーをつくり そのキーでHashMapをTreeMapにぶっこむ。 2.上のループの次の処理で TreeMapで setEntry().Iterater()をし ループ内でMap.Entryを取得して そこからソートされた1番のHashMapを取得。 3.さらにまたそのHashMapから setEntry().Iterater()をして 順次 値を取得。 こんな感じ(イメージつかめたでしょうか?)で コードを組んだのですが、3番の時点で 1番の時点ではあった値がなくなってるんす。 containsKeyで確認するとkeyはあるのに なぜかそのkeyに対する値がブランクなんです。 nullでもない・・。 特にputしている処理はないんですよねぇ・・・ keyがダブルこともないんです。 HashMap等の値が不意に変わってしまうことってあるのでしょうか?
>>346 >>291 じゅなくて
>>287 だった。
てかそれ聞いたらわけわからなくなったんだが。
>文字列バッファは、バイナリ文字列の連結演算子 + を実装するためにコンパイラで使用されます。たとえば、次のコード
> x = "a" + 4 + "c"
>は、以下の同等なコードとしてコンパイルされます。
> x = new StringBuffer().append("a").append(4).append("c")
> .toString()
ループの中だと↑(JAVADOC抜粋)のようにはならなくて1が遅いってこと?
C++から来るとかならずこれが気になるんだよな リソースの後始末をデストラクタ(ファイナライザ)にやらせないこと
>>344 ちゃうよ。+で連結して、Stringのインスタンスが生成されるかどうかの話。
1.は、ループの度にStringが新規に生成されるだろ?
2.は、APIドキュメントに書かれてる通り、Stringが生成されるのは一回だけ。
3.も、はしょってあるんだろうけど、最後にStringを一回生成するだけ。
で、
>>297 は、世の中には、2.の書き方でもStringが毎回生成されることを信じてる人が多くて、
それを都市伝説と呼んだものと思われるが、少なくとも
>>283 はオブジェクト生成について言及してるから、
分かってないわけではないんじゃないかと言った。
JavaDocのその説明、インスタンスが何回生成されるか数えてみろ。
>>354 だね。
try ... finally できちんと処理しないと例外発生時にリソースがリークする。
StreamとかConnectionとか。
すみません、内部クラスをstaticにするのはどういうメリットがあるのでしょうか?staticにしてしまうと外側のクラスのメンバ変数にアクセスできなくなるため余り使われないと書かれていたのですが..
>>356 StreamとかConnectionを使ってるオブジェクトへの参照が無くなると、
GCが回収にかかってリソースも開放されるってことはないの?
>>357 あるクラスでしか使用しないクラスを閉じ込めることができる。
これにより、
(1) private static class なら、他のクラスからはアクセスしないことが保証される。
(2) 記述がコンパクトになる。
>>357 staticなメソッドからnewしたいとか。staticイニシャライザから使いたいとか。
いつ開放されるか気になるやつは自分で開放 保険で後始末に入れることもあるが、2重開放のチェックはするな
するなあ、の意味で、否定ではない、、、
363 :
デフォルトの名無しさん :04/02/14 01:11
>>358 ファイナライザでリソースの後始末をするように記述すればね。
1みたいな書き方では毎回Stringのインスタンスが生成されるのね。 JAVADOCのは最後のtoString()でできるStringのインスタンスは1回? でも3の書き方で最後にtoString()してもインスタンスの生成は同じく1回じゃないの?
>>358 無い。Connection 生成しまくって参照が無くなっても普通は勝手に close
されないっしょ。例外的に勝手にやってくれるのもありえなくはないけど。
>>359 それは別にstaticでなくても同じ気がするのだが、なぜにあえてstaticでないと、(1) (2)にならないの?
>>325 親、子、孫の関係が不明だけど、やりたいことはなんとなくわかります。
以下、その「なんとなくわかった」ことに基づいて話をします。
まず孫オブジェクトはおそらく子オブジェクトのインスタンス変数かローカル変数だろう
から、子オブジェクトが破棄されれば同時に破棄されるので、特に何かする必要は
ありません。
# もちろんまともなコーディングしてあれば、の話です。
次に子オブジェクトは、おそらくThreadを継承しているか、Runnableを実装しているかの
どちらかでしょう。並列処理を実行しているオブジェクトを停止するには、停止用のメソッド
を設ける必要があります。その実装の仕方は一概には言えないのですが、Threadクラスを
継承しているのであれば、
public class MyThread extends Thread {
public synchronized void run() {
while(true) {
try {
wait(1000);
} catch(InterruptedException e) {
break;
}
なにか処理
}
}
public synchronized void terminate() {
interrupt();
}
}
のように実装しておいて、terminateメソッドを呼ぶ、という手があるでしょう。
#コードが間違っていたらすいません
スレッドを使った並列処理はなまじっかな知識で実装するとケガの元なので、しっかりと
した知識を得てから実装したほうがいいと思います。
>>366 inner static class を作る理由を答えただけ。
inner class と inner static class は用途がぜんぜん違うから比べられない。
>>364 あまりソースは見ないほうか?
String#toString
public String toString() {
return this;
}
StringBuffer#toString
public String toString() {
return new String(this);
}
313への回答として ・インスタンスを破棄する方法はJavaには無い ・どうしてもするんだったら、親クラスのインスタンス変数を nullで初期化して、System.gc()を実行 ・上記方法で、削除しようとしているクラスにfinallizeメソッドを 追加し、printlnなどで削除ができれば成功、できなければどこかに 関連があるのでそれをnullでつぶせ!! で、いいのかな?
ファイナライザは呼ばれる保証がない。
>>365 APIドキュメントのConnection#close()を読んで、もっかい書き込んで。
>>373 GCが行われずに、プロセスが終了した場合はfinalizeメソッドが呼び出されない。
>>372 >>365 じゃないけど
close()メソッドの説明に書いてあるけどこれって本当?
前にトランザクション管理も知らない奴が作ったシステムで当然Connection閉じてなくて
DBとの接続残りまくってサーバーダウンしてたぞ。(ちなみに今もそのまま本番運用されてたりする)
System#runFinalizersOnExit(boolean) は 1.4でも残ってるんだね。 1.2からdeprecatedだったけど。
>>372 正直スマンかった。ResultSet#close とかもそう書いてるの忘れてた。
が、昔これを信用してループで ReusltSet 生成しまくって(参照は破棄)たら
close されなかった。GC も走りまくってんのに。
調べた限り JDBC 依存だったので信用していない。Oracle だけどな。
>>380 お。それだ。。。しかしそこのコメント遅!3年越し。
>>352 遅レスで悪いんだが、サンプルコードを書いてくれ。
その説明では何をして何が悪いんだか良く分からん。
結局のところJDBC仕様満たしていないベンダーがあるからちゃんとclose()しろってことか。 俺もConnection)は気使ってるけどResultSetとStatementは閉じないこと多いな・・・。
>>383 たとえ JDBC 仕様満たしていたとしても、メモリがアホほどあった場合
なかなか GC されないかもしれない。そんなときループ中で close しな
かったらどんどん開きっぱなしになってしまう。
Oracle では確実にエラーになるな。他の DB は大丈夫なの?
ってことで Connection、ResultSet、Statement と確実に閉じるのは
絶対。ってか API ドキュメントに「作業が終了したらリソースを開放
するようにしてください」ってちゃんと書いてるしな。
JDBC に限らずリソースを開放するメソッドが提供されているものは
出来るだけ早く自分で開放すべきなんだろな。
定期age
>>382 レスありがとうございます。以下がサンプルソースです。
よろしくお願いします。
public class Example{
public static void main(String args[]){
Example example = new Example();
example.execute();
}
private HashMap getHashMap(int i){
HashMap hMap = new HashMap();
//引数のiを見て、複数個のkeyとvalueをつくってputする処理
return hMap;
}
private void execute(){
SortedMap sortedMap = new TreeMap();
Map map;
for(int i=0; i < 5; i++){
map = getHashMap(i);//値がputされたHashMapをかえす。
map.put(new Integer(i),""+i);
sortedMap.put(new Integer(i),map);
}
//続きです。ごめんなさい。メソッド単位で区切れませんでした。 Map.Entry entry; Iterator itr = sortedMap.entrySet().iterator(); while(itr.hasNext()) { entry = (Map.Entry)itr.next(); map = (Map)entry.getValue(); printMapValue(map); //←この辺までは値はしっかりある。 } } private void printMapValue(Map map){ Map.Entry entry; Iterator itr = map.entrySet().iterator(); while(itr.hasNext()){ entry = (Map.Entry)itr.next(); System.out.println(entry.getValue());//←この時点で値が書き換わっている。 } } }
388 :
デフォルトの名無しさん :04/02/14 12:44
>>383 ガベージコレクションが面倒見てくれるのは「メモリだけ」ってことは常に頭にいれておくべき。
DBの接続やファイル(とそれに伴うロック)、ソケットやグラフィックコンテキスト、、、
メモリ以外にも有限で排他的なりソースやはたくさんある。
そしてそれらはメモリの残量とは全く関係が無い。
まあコネクション閉じればResultSetとかは閉じられると思うけどね。
>>388 > まあコネクション閉じればResultSetとかは閉じられると思うけどね。
これを理由に自分で閉じない香具師がいて困る。
1コネクションで ReusltSet 数十個以上開くのはざらにあって
リソース圧迫する。API ドキュメントに 「GC 時に close されるが
使用者は必ず明示的に close しなければならない」
ぐらい書いてほしいな。
390 :
デフォルトの名無しさん :04/02/14 12:54
htmlのリンク先を抽出したいのですが、 正規表現で取り出すのが基本ですか?
コネクションプーリングなんかしてた日にゃ目も当てられない。 つーか普通してるだろ。
java 1.5は爆速
394 :
デフォルトの名無しさん :04/02/14 13:18
>>392 パーサあったんですかー。ありがとうござます。
>>388 >まあコネクション閉じればResultSetとかは閉じられると思うけどね。
てか、これを信じてる香具師多すぎ。前スレより
554 名前: デフォルトの名無しさん [sage] 投稿日: 04/02/05 13:57
>>549 JavaDocを見れ。Statementを閉じた時にResultSetも閉じられるとあるが、
Connectionを閉じた時にはStatementもResultSetも閉じられるとは書いてない。
実際、hsqldbのJDBCドライバのソースを見ると、
Connectionを閉じた時には何もやってない。
コネクションプールの方も、DBCPを見るとプールにConnectionを戻しているだけ。
というわけで、StatementとConnectionは閉じとけということだ。
>>393 本当だな?漏れ、すげー期待しちゃってるからな?先走り汁だらだらよ?
>>395 つか、Connection切れてて、
Statementつながってる状態があるのかどうか。
398 :
デフォルトの名無しさん :04/02/14 13:53
394です。 コンストラクタ DocumentParser(DTD dtd) の 引数DTDの扱い方がまったくわかりません。 よろしかったら教えてください。
>>397 つか Connection#close すれば必ず切れるとか思ってないよな。
ま〜つべこべ言わずに閉じろってこった。
>>399 つか、StatementつながってるせいでConnectionがcloseできないということがあるのかどうか・・・
>>401 つか、それは無いだろ。
でも、つべこべ言わずに閉じろってこった。
今あわててひたすら接続ResultSet取得切断繰り返すプログラムくんで テストしているが特に問題になってないな Mysql+DBCPだが 昔8iだったかでおかしい動きしてるのは知ってるけど9iでも同じ現象起きてたかなぁ? 9i立ち上げると重いんでテストしたくねぇ・・・
ResultSetもStatementも、閉じとく癖付けといて損はないと思うよ。 たいした手間じゃないんだから…
って俺ネタにつられただけか やっぱりstatement、resutsetはGCで自動クローズされてる Connectionだけは明示的にクローズが必要 問題ねぇや resultsetは俺は閉じてるけど、もしかして・・・とおもって調べただけ クライアントサーバーでコネクションつなぎっぱなしの場合 ResultSetの明示的なクローズは必須 3層式のプログラムしか組んでない人には問題ないや
>>403 接続 → 1000回ResultSet取得(close無し) → 切断
とかはどう? 厨な実装だけどループ中に SELECT は有り得るから。
ループ中に ResultSet#close する場合としない場合で
Runtime#totalMemory - Runtime#freeMomory
を比較したらどんな感じ? 気が向けば試してくり。
× Runtime#totalMemory - Runtime#freeMomory を比較 ○ Runtime#totalMemory - Runtime#freeMomory の差分を比較
安心しろそれもすべて試した 結果は問題なし というか resultsetのクローズありなしでほぼ同じメモリの動き方してる 表計算に書き出してグラフがかさなった GC対象になるのがしばらく先の場合意識的にやればいい程度 コネクションクローズするとあらかじめ取得してるresultsetの操作もちゃんと動かなくなるし コネクションのクローズをfinallyにさえ書いてあれば大丈夫 なんにせよ意識しなきゃならないのは2層式だけっぽ
あ、ごめん とんでもない数回しているとメモリー不足でるね statementのほうがメモリー押さえる効果が高いようなので こまめにresultset閉じるより可能ならstatement閉じた方がいいみたい 流行りの3層式ならまず問題になることはないはず
ループ中にResultSet書いてて閉じちゃいないので 接続数増え杉でエラー返ってきて落ちたことはあるから むしろそっちがヤバイ。
>>408 検証乙。まねしてOracle9でやってみたけど、こちらも同じっぽい。
>>408 >>411 Z。
結論: Connection、ResultSet、Statement はちゃんと閉じる。
無駄だとは思うけど念のため、ってのが、 どこまで有効かどうか、って感じで考えると、なんだか。 メソッドの最後に毎回ローカル宣言したオブジェクト変数に=null;してるやつがいて、 それは正直う財と思ってたんだが、 でも、もしConnectionをcloseするだけでよかったとしても、 絶対に安全だといわれたとしても、俺はResultSet, Statement、 常に閉じるように記述しそうな気はする。
>>413 null 代入はいつ走るか分からない GC に回収を任せる事。
だから、ResultSet や Statement を close しないで GC に
任せることに近い。
正直 null 代入する香具師はうざい。そんなことするくらいなら
ロジックを最適化してほしい。それ以前に無意味な null 代入
する香具師をなんとかしてほしい。こんなん↓
obj = getObject1();
・・・なんか処理・・・
obj = null;
obj = getObject2();
変数使いまわしてる時点で悪い例だけど。。。
変数使い回すのは別に変なことではないが 次のオブジェクトが代入されたときに参照からはずれるのでそのソースいみね いいたいことはわかるけどね GCを動かすためにnullを代入することはやっちゃいけないこと そしてやるべきことは変数のスコープを把握すること C言語からきてる人にnull代入する人は多いかもしれないな
416 :
デフォルトの名無しさん :04/02/14 18:52
素朴な疑問です。 int型とInteger型がありますが、どう違うんですか?
基本データ型とそのラッパクラスです。
>>416 型が違う。
int はプリミティブ型、数値型、整数型、32ビット符号付整数。
java.lang.Integer は参照型、int のラッパ型。
419 :
デフォルトの名無しさん :04/02/14 19:00
それは分かるんですが、どのように使い分けたらいいんでしょうか? 別れているには意味があるのでしょうけど、どういう意味があるのでしょうか?
>>415 変数使いまわしはだめなんじゃない? こうすべき。
Object obj1 = getObject1();
・・・なんか処理・・・
Object obj2 = getObject2();
> そしてやるべきことは変数のスコープを把握すること
スコープは狭ければ狭いほど良いんじゃないの?
だから基本的に変数使いまわしはだめだと思うけど。
分かれてる意味は処理効率、"値"しか表さないもののほうが処理が楽・速いことがあるから。
>>419 int は演算子使って計算したり出来るが、Integer は演算子使って計算したりできない。
int は ArrayList等に突っ込めないが、Integer は ArrayList等に突っ込める。
根本的にわかっていない場合、まずこんなとこで質問する前に勉強してください。 ためしにIngteger型で足し算引き算をしてみたり List型にint型をaddしてみたりしてみてください。 あと情報を小出しにするうんこは氏んでください。
>>423 俺は
>>419 ではないが、【初心者】〜【大歓迎】スレだから
いいんじゃないの? かるしゅーむ足りてるか?
まあ、情報を小出しにするのはどうかと思う。 何を質問したいのかすら理解していないということだろ。
調べようとせずに聞けばわかるからいいや、的考えだと、今抱えてる問題が解決したところで先は見えているよ。
PCの日付をJavaプログラムを使って変更したいのですが下記のいずれも 行ってもPCには何故か反映されません。 OSはWindows2000,XP JAVAはJ2SE1.3を使用しています。 何が原因なんでしょうか? Calendar myClnd = Calendar.getInstance(); myClnd.set(2003, 1, 2, 20, 30, 40); //方法1 myClnd.set(Calendar.YEAR, 2003); //方法2 Date myDate = new Date(); myDate.setTime(mydate.getTime()+1000000000);//方法3
(;´Д`)
まーなー。でも 2ch の初心者スレでそういうのもなー。 JavaHouse みたいに固いのはあそこだけで良いかとも思ったり。 高木君がたまにバカっぽく切れるのは面白いけど。 ヌー速かどっかで見たけど、検索しろ、調べたか?とか聞くのは 日本と韓国ぐらいらしい。米は初心者に好意的で、中はえらそうだが 教えてくれるらしい。
432 :
デフォルトの名無しさん :04/02/14 19:50
Javaで、ポトリスのようにリアルタイムで 相手キャラの位置がわかる、という事はできますか?
ネットワークに対する知識がまずある? それがわかったらそれをjavaでかくうえでわからないことを聞けばいい ゲームに特化している質問ならゲーム制作板へ
>>430 米国人でも 検索しろ、調べたのか? お前馬鹿? とかゆー返答はよくある。
436 :
デフォルトの名無しさん :04/02/14 20:48
ファイルをインターネットからダウンロードするクラスを書き、またタイムアウトの 設定もメインメソッドにしました。タイムアウトしたとき 途中まで保存されているfilenameファイルを削除したいのですが削除できません。 class GetFile { GetFile(String urlstr ,String path ,String name){ File filename = new File( path , name ); try { URL url = new URL(urlstr); URLConnection urlConn = url.openConnection(); FileOutputStream out = new FileOutputStream(filename); InputStream in = urlConn.getInputStream(); while(true) { int read = in.read(); if (read == -1) break; out.write(read); } //urlConn.disconnect(); in.close(); out.close(); }catch (IOException e){ System.err.println("IOException\n"+"Can't Download\t" + urlstr ); System.out.println(e); // ファイルを削除 filename.delete(); } } }
closeしてないだけじゃないかと
438 :
デフォルトの名無しさん :04/02/14 21:01
436です。タイムアウトは例外処理ですので in.close();とout.close();はIOException内に書いても コンパイルできませんでした。
変数outのスコープをtry catch の外に書け。 ついでにclose()はfinally節に書くのが望ましい。
>>382 もうしわけありません。
解決いたしました。
今日1ステップずつ丹念にしらべていったら、
とあるループの中で
mapのvalueをブランクで上書きするような
処理がありました。
javaを疑う前に、僕の頭を疑うべきでした。
大変ご迷惑をおかけしました。
441 :
デフォルトの名無しさん :04/02/14 21:15
436です。 変数outのスコープをtry catch の外に書くとコンパイルできません。 TESTURL.java:102: 例外 java.io.FileNotFoundException は報告されません。スローするにはキャッチまたは、スロー 宣言をしなければなりません。 FileOutputStream out = new FileOutputStream(filename);
>>441 1時間くらいココに書き込まずに自分だけで頑張ってみて.
>>427 それらのインスタンスの値とマシンの時刻を変えるのは関係ない。
直接は変えられないからJNIでSetLocalTime。
445 :
デフォルトの名無しさん :04/02/14 21:50
DecimalFormatで"#.00"のように小数の桁を指定して出力したいのですが、 値が切り捨てられずにROUND_HALF_EVEN?な丸めになります。 切り捨てを行うにはBigDecimalを使うしかないのでしょうか?
いえす。問題ある?
new BigDecimal( なんたら).setScale( なんたら) 1行!!
>>448 いや、桁の指定をパターンでやりたいんですよ。
>>450 いや、パターンから100っていう数字を取り出すのがアレじゃないですか。
scale = new DecimalFormat(pattern).getMaximumFractionDigits(); new BigDecimal( なんたら).setScale( なんたら); toString(); こんな感じになりました。 ありがとうございます。
FileOutputStream outをtryの外で宣言し、catch (IOException e)内でout.close();を try-catchで囲むことで問題解決しました。 ありがとうございました。
>>453 良かったね。これからも自力で解決できるね。
455 :
デフォルトの名無しさん :04/02/14 23:20
SwingのGUIのレイアウトが大変なんですが、 GridBagLayout以外にもう少し手軽で 細かいレイアウトのできるマネージャーはないですか?
レイアウトマネージャは組み合わせて使うもの VBとかBCB、Delphiなんかのフォームの絶対座標配置していた人は nullでもいいんじゃね? 否定する人も多いけど、NetBeansのグリッド指定で5あたりにしておけばだいぶ 使いやすいと思うよ 俺はFlowとborderがほとんど、たまにcardってところかな それだけで何とでもなるよ boxもいいけど、JBuilderだと独自コンポーネントになったから 使うのやめてた NetBeansだとbox使っても問題ないね
BoxとBorderの組み合わせにもう1票。Tcl/tkっぽくデザインできてわかりやすい。 PreferedSizeとAlignmentが面倒なのがアレだけど。
結局マウスだけでビジュアルに配置できるのがnullレイアウトだけだからな 推奨サイズの手入力がレイアウトはめんどくせ
たくさんお答えどうもです。 FlowとかBorder、Gridなどで入れ子もやってみたんですが 細かいレイアウトをすると結構面倒ですよね NullとかSpringは試した事無いんでやってみます あとBoxも
>>440 漏れの頭はもっとどうにかしてたらしい。
これを読む前に書き込んじゃった。テヘ。
みなさま、スレ汚しすんませんでした。
質問です。 アプレットで直線が引きたいのですが、 drawLineだと引数がintで当方doubleを使いたいのですが、 キャストせずにdouble使って直線を引く方法とかってありますか?
その書き込む対象の座標系は実数なの?
>>465 言いたいことは分かるけど,結局書き込むときはスクリーン座標系だからね.
自分でそのような実値(double)からスクリーン座標系(int)にコンバートして書き込める
Canvas(Panel)を作るしかないと思う.
Graphics2Dクラスとかが役に立つかも.
既にあったらごめんです.
468 :
デフォルトの名無しさん :04/02/15 11:25
ファイルの中身をすべてbyte[]に読み込みたいのですが、 いろいろなクラスがあってどれを使ったらいいのかわかりません。 またあらかじめbyte[]をどのくらい確保しておくものなのでしょうか? お願いします。 byte[] rawText = new byte[2000]; FileInputStream in = new FileInputStream(file); BufferedInputStream bin = new BufferedInputStream(in); bin.read(rawText);
469 :
デフォルトの名無しさん :04/02/15 11:34
JTreeで複数行のセルの内容を編集したいのですが DefaultTreeCellEditorを継承してgetTreeCellEditorComponentで JTextAreaを返してもgetTreeCellEditorComponentの引数のvlaueの 改行を無視して1行でしか表示できません。 環境はJDK1.4.2 WIn2kです。 識者の方教えて頂けないでしょうか?
470 :
デフォルトの名無しさん :04/02/15 11:36
>>468 ファイルからなのでavailable()で得た値を配列の大きさにすれば
一回で読めると思います。
>>468 ByteArrayOutputStreamに書き出して、toByteArray()すればどうよ。
>>468 ありがとうございます。
やってみます。
>>468 rawTextとかかいてるから、Reader使うたらええと思うよ。
Readerで一行ずつ読んでStringBufferにappendで改行とともに追加していって
さいごのtoStringでStringにしなはれ。
ほな
はじめまして 疑問におもったことがり投稿します。 配列に関してですが。。。 Javaで int ary[] = new int[5]; というのは、 Cでいうことろの int *ary; a = malloc(sizeof(int)*5); と同じことと思ってよろしいのでしょうか? しかし、Javaで変数aryのプロパティ(?)に ary.lengthっていうのがあると思うのですが、 (それ以外にもいくつかメソッドがあるみたいですが・・) そういうものがあるということは、ary自体もなんららの クラスの変数になっているということでしょうか? それはなんていうクラスなのでしょうか? Javaのドキュメントのどのクラスを見ればいいのでしょうか? そういうのを調べるコツはやっぱりあるのでしょうか???? #Cのaryは、単純なintのポインタ変数でしかないと思います。(4バイトのint) ぶしつけな質問すいません。
>>468 次が最速。バッファリングは不要。
InputStream is = new FileInputStream(file);
byte[] buf = new byte[file.length()];
is.read(buf);
であってるか
>>474
ファイルサイズ取得と実際にデータを読むときのタイミングで100%安全とはいえない
そういうときに
>>471 がいい
あとreadは一気にすべて読み込むまでブロックしなかったはず
read(byte[] b, int off, int len)
というオフセット付きをループで回すこと
じゃ、読み込み専用のリソースであれば
>>476 でいいな。
>>478 いや読み込み専用でもreadはブロックされないから
オフセットループが必須
環境とかタイミングによってかわるぞ
Hoge hoge1 = new Hoge(); Hoge hoge2 = new Hoge(); を配列にしようと思って Hoge[] hoge = new Hoge()[2]; のようにするとエラーが出ますが、どうすればいいのでしょうか。 Hoge[] hoge = {new Hoge(),new Hoge()} で動くようですが、効率が悪そうです。
483 :
デフォルトの名無しさん :04/02/15 14:21
Hoge hoge1 = new Hoge(); Hoge hoge2 = new Hoge(); を配列にしようと思って Hoge[] hoge = new Hoge()[2]; のようにするとエラーが出ますが、どうすればいいのでしょうか。 Hoge[] hoge = {new Hoge(),new Hoge()} で動くようですが、効率が悪そうです。
A Boneでリロードしても表示されなかったので、もう一度書いてみたら2重投稿になってしまいました。 すみません。
配列だけ作りたいならnew Hoge[2]で。
Hoge hoge[] = new Hoge[2]; hoge[0] = new Hoge(); hoge[1] = new Hoge(); あくまでも参照配列しか作らないと考えれば分かりやすいと思う まずは自分でメモリ空間のイメージが出来るまでは図書いてみるとか
>>476 length() の戻り値が long だって事忘れてないか?
488 :
デフォルトの名無しさん :04/02/15 15:04
今日から本格的にJAVAを学ぼうとしてる者です。 よろしくお願いします。 にこり
Hoge hoges[] = new Hoge[2]; for (Hoge hoge : hoges) hoge = new Hoge();
>>489 > for (Hoge hoge : hoges) hoge = new Hoge();
コンストラクタ自体に副作用が無いなら、
このループには全く意味が無いな。
>>487 忘れてた。書いた後に気づいた。キャスト。
int 超える場合はシラネ。
>>469 エディタをカスタマイズしたらレンダラもカスタマイズしないと。
DefaultTreeCellRendererはJLabelのサブクラスなので、複数行表示しようと思ったら
HTMLにするか、改行を認識して複数行表示可能な独自のレンダラを使うかする必要がある。
493 :
デフォルトの名無しさん :04/02/15 15:18
htmlの<input type="file">とやるとファイルのダイアログが出現しますよね? そのようなダイアログを出現させるようなクラスありますか? 当方、指定したディレクトリーの内部の表示を考えています。
>>490 言ってる意味が分からん。
。。。と思ったら分かりました。配列要素初期化に拡張Forはだめだな。
ところで、配列と配列要素を初期化する構文はなんで無いの。
他の言語はどう?
>>494 > ところで、配列と配列要素を初期化する構文はなんで無いの。
あるけど…
int[] array = {1,2,3,4};
>>493 クライアントサイドJavaでやりたいというのならjavax.swing.JFileChooser。
498 :
デフォルトの名無しさん :04/02/15 15:26
>>496 。。。配列の要素数が 1024 個とかの場合は?
for文でまわせ
>>499 Java は初心者向け言語。そんな機能はない。
特に Java しか知らない香具師はそんな機能が無くても疑問にも
思わない。
言語がどんなすごい機能をもっていようと、 1024個の初期値があって、プログラム上で初期化したいなら、 値を1024個書く以外にないと思うが。
504 :
デフォルトの名無しさん :04/02/15 16:08
longの値をStringにする方法を教えてください。 お願いします。
javaにleftとrightとlpadとrpad実装されないかなあ。 Stringに。
508 :
デフォルトの名無しさん :04/02/15 16:19
>>504 1. value + ""
2. String.valueOf(value)
>>505 left,rightって文字の左揃え右揃え?なんでStringにいるの?
lpad,rpadは何か分かんないけど、これも見るからにStringに関係なさそう。
Format
511 :
デフォルトの名無しさん :04/02/15 16:32
>>505 org.apache.commons.lang.StringUtils
#left
#right
#leftPad
#rightPad
>>466-467 レスありがとうございます。確かにそのとおりでした。
一度自分で座標あわせてみます。
>>479 レスありがとうございます。
>Graphics2D.draw( new Line2D.Double( ほげほげ))
これを試してみます。たすかりました^^
ありがとうございます。 よくわかりました。
テキストファイルから一文字読み込んだ文字を画面に表示 したいのですが、普通に読み込んだ文字(コード)を char型の変数にcastしてそれを表示すればいいのでしょうか? int moji; char moji_char; FileReader in = new FileReader(new File("ggg.txt"); moji = in.read(); moji_char = (char)moji; <---ここ System.out.println("|" + moji_char+ "|"); やってみたら、うまくいったのですが、 これって正しいやりたかですか? String.valueof(moji) は、意味が違うのですよね? sprintf(s, "moji=%d", moji); と同じ意味なのでしょうか?
>>517 文字の両脇に "|" が表示される、
サロゲートペアや合成文字等の char 2つ以上使う文字に対応してない、
等でも良いなら、それで良し。
> これって正しいやりたかですか?
正しいかどーかは知らん。
なんどもすいません。さきほど一緒に質問しようと思っていましたがわすれていましたので もう一度質問させてください。 なぜ、 FileReader in = new FileReader(new File("ggg.txt"); moji = in.read() ; のreadメソッドの戻り値は、4バイト(int)なのでしょうか? unicodeであれば、2バイト(char)ではないのでしょうか? また、in.read(); で読み込んだ文字が改行(\n)かどうかを調べる場合、 if ( in.read() == '\n') と if ( in.read() == 0x000a) は同じで if ( in.read() == "\n") は 意味が違うのでしょうか? 毎回へんな質問ですいません。。
ボタンのテキストを改行したいのですが、どうすればいいのでしょうか? JButton A = JButton("もう\nぬるぽ"); と、改行コードを仕込んでも、改行してくれません・・・
>>519 >unicodeであれば、2バイト(char)ではないのでしょうか?
EOFで-1が返せるように、signedな値を利用しているだけらしいです。
charではEOFに対応する値が作れません。
>if ( in.read() == '\n')
右辺はcharですが、比較の際に暗黙の拡大変換が行われます。
>if ( in.read() == 0x000a)
左辺右辺ともintです。
>if(in.read() == "\n")
左辺はint、右辺はオブジェクト参照です。オブジェクト参照と
intは比較できません。
>>520 HTMLを解釈してくれるので、<BR>タグいれて下さい。
>>522 すばやい返答ありがとうございます。
でも、試したのですが、上手くいきませんでした。
アプレットではないので、駄目なのか?ともう少し考えて見ます。
ありがとうございます。
>>521 > charではEOFに対応する値が作れません。
どういうことでしょうか??
> >if ( in.read() == '\n')
> 右辺はcharですが、比較の際に暗黙の拡大変換が行われます。
拡大変換とは?どういうことでしょうか?
> >if(in.read() == "\n")
> 左辺はint、右辺はオブジェクト参照です。オブジェクト参照と
> intは比較できません。
右辺はオブジェクト参照とは、String型のオブジェクトの参照ということでしょうか?
526 :
デフォルトの名無しさん :04/02/15 21:53
>>525 大変感謝します。
無事解決しました。
タグを解釈するなんて夢にも思いませんでした。
職場でも一同、「おぉ??」などと驚きの一言が漏れました。
重ね重ね感謝します。
>>526 職場一堂ですか…
仕事で使ってるなら、SunのTutorialくらいみんなで読んだほうがいいよ。
529 :
デフォルトの名無しさん :04/02/15 22:35
誰か イクリプスの日本語バッチがどこで手に入るか知りません? 教えてください
531 :
デフォルトの名無しさん :04/02/15 22:51
ありがとう >>530
質問というか確認。 Javaのあるプロセスからexec(String)などを使ってUnixのコマンドを実行するとき 絶対パスでコマンドを指定しなかった場合、 プロセスに環境変数PATHが引き継がれていればそのPATHのとこを見に行きますよね? これってexec(String)がOSのシェルでコマンドを実行するものだからってことですか? SunのJavadocを見て自分で勝手に解釈したんですが、どうでしょうか・・・。
>>532 JVM起動時に、JVMのシステムプロパティにPATH環境変数を取り込んでるから
じゃないの。
Windowsで new java.io.File("foo//bar").mkdirs(); するとどうなるんだっけか カレントディレクトリにfooとfoo/barが掘られる、で正しい? ルートディレクトリにbarが出来たりしなかったっけ たぶん前者だったとは思うけど、なんか不安になってしまた 手元に環境がないんで、すまんけど誰かおしえてちょ
何度もすいません。
DataInputStream/DataOutputStreamについて質問させてください。
みなさんは、DataInputStream/DataOutputStreamは使っていますか?
というかどんな時に使用するものなのでしょうか?
ファイルにバイナリでデータ書き込みたいときは、fileoutputstremでこと足りると思うのですが。。。。
ttp://msugai.fc2web.com/java/IO/filter.html のページで
これらのクラスは FilterInputStream/FilterOutputStream を継承したクラスで、
バイト型入出力のストリームで基本データ型を扱えるようにするものです。
他のストリームでは、基本データ型のデータは文字列型に変換されて扱われます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
この~部分の「基本データ型のデータは文字列型に変換されて扱われます」の意味が
わかりません。fileoutputstremとは書き込む時文字列型に変換されていないと
思うのですが・・・
なんどもすいませんです。
>>537 出力先がファイルでないこともあるとは思わないかい?
>>537 個人が公開しているWebページは、検定済み教科書ではありません。
>>536 どうもです。助かりますた。
どっかで似たような話("//"がルートになる)
を聞いたような気がしたんだけど、
なんだったかな...思い出せない
>>537 普通にシリアライズするときに・・・
といいたいところだが1.4からXML標準で扱えるようになったので
ここ1年はXMLで保存してます
Runableインターフェースをインプリメントするとどういう意味があるのでしょうか? APIドキュメント見たけどいまいち分からなかった。 同じく参考書のサンプルで、ObjectクラスをextendsしてCloneableインターフェース をインプリメントしてたけど、そのインプリメントを外してもエラーにはならなかった。 なぜインプリメントしてるんでしょう?
>Objectクラスをextendsして そもそもこれ書くだけ無駄。
>>542 そもそもJavaのinterfaceってのが何なのかわかってないだろ。
>>542 そのクラス単体で見れば、インターフェース実装してるものからインターフェースを外そうが何しようがエラーは出ない。
ただ、そのクラスを使っている別のクラスでエラーが出るかもしれない
>>542 Runableは別スレッドとして実行可能になる。
詳細はJavaAPIのThreadクラス参照。
>参考書のサンプルで、ObjectクラスをextendsしてCloneableインターフェース をインプリメントしてた その参考書ってなに?霊媒師のところでお焚き上げしてもらったほうがいいな。
548 :
デフォルトの名無しさん :04/02/16 11:24
すいません、質問です。 eclipseでSWTの練習をしていたのですが、(仮にTestというクラスにします) DOSから java Test と実行するとClassが見つからないと言われます。 しかし、フォルダにはコンパイルされ、Test.classが存在しています。 どうすれば実効可能となるのでしょうか? ちなみにeclipse上で実行はできています。
環境変数 CLASS_PATH に、カレント "." を追加
CLASSPATH でした。
環境変数にするなボケ、カス
>>544 >そもそもJavaのinterfaceってのが何なのかわかってないだろ。
うん、分かってないから説明してみろや。
ThreadクラスAPIから抜粋。
>さらに、各スレッドがデーモンとしてマークされている場合もあれば、されていない場合もあります。
デーモンスレッドって何?
バックグラウンドで行われるスレッドってなにがあるの?
要するにRunableをインプリメントしたら、main()スレッドがいらないんかい?
スレッドをサブクラス化するってどういうことだよっ!!! APIドキュメント見れば見るほど分からなくなってくるぞっ!!! もっと簡単な説明できねーのかよっ!!!
>>553 頼む!釣られてくれ。
ほんとにわからんのだからさ。m(_ _)m
>スレッドをサブクラス化するってどういうことだよっ!!! >APIドキュメント見れば見るほど分からなくなってくるぞっ!!! >もっと簡単な説明できねーのかよっ!!! 読むもの間違ってる。 入門書だのチュートリアルだのサンプルソースだのを読めよ。
557 :
デフォルトの名無しさん :04/02/16 16:45
Javaはドキュメントが悪いとうちのソフ工学の偉い人が言ってますた。
>>555 もちつけ(AA略
スレッドをサブクラス化するってのは、extends Threadなクラスを作って、
public void run()をオーバーライドして、その中にスレッドとして動かしたい処理を書く。
んで、そのクラスのstart()を呼ぶと、スレッドとして動作する。
でも、既に別のサブクラスであった場合(例えばよくあるextends Appletとか)だと、
Threadを継承することができなくなるので、代わりにimplements Runnableとして、
public void run()を記述する。そんで、Threadのコンストラクタに渡してやって、
Thread#start()を実行すると、Runnable#run()がスレッドとして実行される。
デーモンスレッドは、APIドキュメントに書いてある通り、自分以外に動いてるスレッドが無いと、
止まってしまうスレッドのこと。
Cloneableは、そのクラスがオブジェクトのクローンをサポートしてますよって、
(有体に言えば)目印みたいなインターフェースのこと。Serializableみたいなやつ。
そのクラスのclone()メソッドをオーバライドして、
クローン元のオブジェクトと同じデータを持ったコピーを作ることができますよってこと。
インターフェースについて知りたい場合は、前スレの後半で熱い議論やってるから、見てみそ。
>>557 そのソフ工学の人は、偉くてもあまりおつむは良くないみたいね。
>>553 実はおめーも、"100%の仕様統一を義務づけます"というありきたりの説明しか出来ねえんだろ。
もっと具体的にどういうところで、なぜ仕様統一しなきゃならねえのか、仕様統一したらどういうメリットがあるのか説明できる奴いねえの?
ちょっと態度でかいか・・・。
そういやjavaの初心者的なものってかえってわかりにくいと思ったの俺だけか? フレームやアプレットにイベント用のインプリメントしまくって イベント作ったりするのすげー難しいと錯覚したぞ 自分でスレッド継承したりするクラス作ってはじめて理解できた問い記憶が
> イベント作ったりするのすげー難しいと錯覚したぞ 単なる錯覚だな。
>>560 先生!
>>553 ではないですが、少し考えてみました。
1.共通の操作方法を提供する (Runnable, Comparable 等)
2.実装を隠蔽する (List, Map 等)
3.目印にする (Cloneable, Serializable 等)
なを、これらは排他的な目的ではなく、
2の目的を持ったからといって1が成り立たないことはない。
例えば、Listは1を行うとともに2を行っている。
ということでいいでつか?
先生による正解と解説をキボンヌします!
>>560 ・「処理」を書くのがプログラミング。
・「処理」はメソッドとして体裁を整えなきゃならんことになっちょる。
「処理」はどっかから呼ばれるもんなのだから、名前も定義もなしに存在できない。
・メソッドはそれ単体としてではなく、クラスに属さなきゃならんことになっちょる。
メソッドが単体で存在できるような仕様に、特に意義は無いから。
ここまでは Java の決まりじゃ。スレッドがどうこう騒ぐ前に、これを理解できないとどうしようもない。
・スレッド生成のための、System#createThread(hoge) みたいな API を仮定してみる。
同じ実装でもスレッドごとに状態を持つ、という設計がありえるんだから、
hoge として与えるのは static な情報(Method クラスやClass クラスのインスタンス) ではありえない。
もちろん"class.method" みたいな文字列情報もナンセンス。
結局、個々の「状態」を内包した、何らかのインスタンスを与えればよい。
・そのインスタンスは、特定のクラスやインタフェースを継承し、
それらによって規定された、特定のメソッド名を持っていた方が、設計しやすい。
考えても見よ、スレッドに仕立て上げたい「処理」を、これ以外のどんな方法で指定する?
これはインタフェースの本義であるので、
インタフェースが分からなければ Runnable の意味も分かるまいというのはこれがゆえん。
・プログラム上で個々のスレッドを制御するには、
スレッドを表すインスタンスがあれば、設計しやすい。
・インスタンスがあれば、ということは、クラスがあれば、ということになる。
ということは、System#createThread(hoge) なんて特に必要ない。
Thread クラスのコンストラクタや start() メソッドでスレッドを生成できるようにすれば事足りる。
・しかし実質上、メソッド一個あれば、スレッド作成(制御でなく)の条件を満たすんだから、
メソッド一個実装すればいいインタフェースも用意しといて、
Thread コンストラクタに与えるだけでいいようにしておけば、プログラマには楽。
以上。何か文句あるか。
あはは、すまん。 実は560は542なんだな、もし。(^^;) ぜ〜んぜんわかってないんだな、もし。 だから解説なんて出来ないんだな、もし。 匿名性を十二分に生かしてたんだな、もし。(笑)
>>561 初心者的なものって、往々にしてあいまいさを解決してない、ってことでもあるよね?
例えば、型を気にせず四則演算ができるとか、存在すればメソッドが呼び出せるとか。
あいまいさを解決せず、とりあえず動作するような言語の場合、
動作が自分の意図しているもの以外にありえないと信じてる間はいいけど、
複数の可能性があり、その場合はどれが正しい動作なのか、
(例えば、"1" + 1.0f を 2 とするか 2.0f とするか "11.0" とするか・・・etc)
こういったことを突き詰めて行くと、最初からあいまいさを許さず、
正確な記述を求める言語の方が、最初から意図した動作をさせやすいし、
意図しない動作を未然に防ぐことにもつながるとおもうんだけど、どうでつか?
イベントにしても、VBのようにオブジェクトがOnClickやFormOpenを持つと、
それ以外のイベントを実装できなくなるし、
必要に応じて実装してイベントを呼んでてもらうやりかは、非常にスマートだと思うのだけれど。
初心者の考えをそのまま受け入れてくれる言語よりも、
初心者の考えを導いてくれる言語の方がよさそうではないでつか?
>>565 生かされてないし。ばればれだっつぅの。
>>566 > 初心者的なものって、往々にしてあいまいさを解決してない、ってことでもあるよね?
単に
>>561 が 初めて GUI プログラムした時苦労したんだけど、
その時使っていた言語が Java だった、というだけの話でしょ。
C/C++ + gtk を使ってたら C/C++ は初心者にとって云々、とか言うだけだと思われ。
やられたっ。ちきしょー。
>>567 はすげー。ってか、2ちゃんねらならそのくらいすぐに分かるのかな?
漏れも嘘を嘘と見抜ける人になれるよう、精進しまつ。
>>568 あ、そういうことですか。変なこと書いてスレ汚しちまった。すまそ。
継承はすぐわかったけど実装は当時わからなかったな 日本語が通らないβ品質な時代でドキュメントもあまりなかったときだ イベントまわりは当時AccessBasicでしか組んだこと無かったから 面倒だと思った Window作成するときC++ではなくCでだらだら長いswitch書いたり していたこともあったがjavaのイベントはわかりにくかったな 日本語が通るようになった1.1でイベントや命名規則が大きく変わったりして びっくりした記憶も javaのサンプルコードに少なくとも取っつきやすさはないと思った サンプルだとどうしても一つのクラスでなんでもやろうとするからそうなったんだとは思うけどね とまぁ、当時苦労したけどここ数年はjavaでしか喰ってないがな
> 継承はすぐわかったけど実装は当時わからなかったな 頭悪いんじゃねーの? っつーか Java やる前に MFC とかやらなかったん?
>>567 まあ、普通わかるわな。(^^;)
>>564 ,566
自分としてもあいまいさは排除出来る方がいいと思うんだけど。
やっぱり最終的な説明は、"100%の仕様統一を義務づけます"ってことになるって事か。
556の言うとおり解説書読むより、実際にプログラミングした方がいいのかね。
でも、この疑問は参考書見てて思ったことだからどうすりゃいいんだ?
573 :
デフォルトの名無しさん :04/02/16 18:02
今時のJ2SEでリソースリークの発生箇所を検出する方法を教えてください。 メモリリークもあるみたいなんですがよくわかりません。 タスクマネージャで表示する項目にハンドルと仮想メモリを指定して眺めると、 徐々に増えていきます。
>>572 卑近な例だが・・・昔 C で Motif を使ってた。
長くやるうち、オブジェクト指向の必要性を、オブジェクト指向の存在を知る前に実感してた。
で、C++ の存在を知ったが、Motif を使った C++ ソースをコンパイル・リンクする方法がよく分からなくて悶絶した。
無知な上に聞ける相手もいなかった。そもそもできなかったのかもしれない。今でも知らない。
あの頃は void * の海に泣いた。そんな中 Java に出会って歓喜した。
思い描いてたものがすーらすらかけた。
>実際にプログラミングした方がいいのかね。
不自由な環境で長いことしこしこやってると、知らなかった技術に出会ったとき、
すっ、と理解できる。
技術や仕様や規格は、必要性があって生まれたり策定されたりしてるんだから、
必要性を感じるだけの経験(≒技術が生まれるまでの経緯のトレース)なしに、
いきなり理解するって方が無茶。
>>571 win16時代はヘビーなMFCとかやらないのが普通・・・というか
win16時代は日本だとwindowsあんまり普及してねぇ
大きいアプリ動かすとすぐにリソース不足で落ちたからな
おかげでNT3.51はだいぶお世話になった
>>573 java -Xrunhprofだった・・・。氏んでくる・・・。
>>576 NT3.51 って Win16 の時代だったか?
3.5だった 3.1から大幅にバグ修正されてまともになったwin32
いろいろ質問してお騒がせしました。 やっぱりいきなりあれもこれも理解しようと思うのが無茶なんですかね。 元はと言えば、アプレットでRunableをインプリメントしてる物もあれば、してない物もあるし何が違うのか疑問に思った、っていう単純な原因なんだけど。 でもClone()メソッドを持っているクラスをサブクラス化して、Cloneableをインプリメントするって必要性が分からないよな。 Clone()メソッド持ってるのを継承してるんだから、Cloneableなのは当然なのに。 そのクラスのinstanceof Cloneableは falseだったから付けないとダメなんだろうけど。
>>582 漏れもさらっとしか書かなかったが、オブジェクトのコピーには浅いコピーと深いコピーがある。
浅いコピーは、そのオブジェクトのメンバ変数のオブジェクトまではコピーしない。
深いコピーは、そのオブジェクトのメンバ変数のオブジェクトまで全てコピーする。
前者だと、クローンをいくつ作っても、ひとつのクローンがメンバ変数のオブジェクトの状態を変更すると、
全てのクローンに変更が適用されてしまう。メンバ変数の参照先が同じだから。
後者だと、その心配はない。メンバ変数も全て、コピーされてるから。
後者の処理をやってますよ、安心してコピーを作って、
オブジェクトの状態を変更してつかぁさい、ってのがCloneable。
>でもClone()メソッドを持っているクラス clone() は Object のメソッドだから、全てのクラスが持っている。 むしろ疑問に思うなら、Object#clone() の存在の妥当性だ。 Cloneable に clone() を要件とするのでは、何故いけないのか。 ディープコピーを再帰的にやる場合、 できないときに深部から例外が throw されてくることをも仕様として決めるため、 ちう解釈でいいだろうか? >instanceof演算子を使って場合分けを行い(略) >発生するはずもない例外をtry-catch文で囲むのは好ましくありません。 ちう説明もあるようだが・・・んーその方が納得いく気もする。
585 :
デフォルトの名無しさん :04/02/16 19:12
みなさん、なぜObject#clone()と書くのですか? ドットとの違いがあるのでしょうか? 初心者だからかもしれませんが、教えて頂けると幸いです。
586 :
デフォルトの名無しさん :04/02/16 19:22
ここはAWTの相談とかも受け付けてますか?
587 :
デフォルトの名無しさん :04/02/16 19:25
文字列の中からURI (http)を探したいのですが
int s = str.indexOf("
http:// ");
if ( s != -1 ) {
int e = s + "
http:// ".length();
while ( str.length() > e && ishttpletter(str.charAt(e)) ) { <-ここでどうすればいいでしょうか
e++;
}
なお2行にわたる場合は無視することにします。
お願いします。
>>585 javadoc の @see タグとか @link タグとかのリンクの書き方と同じ。
>>583 ,
>>584 丁寧に解説してもらってサンクスです。
一応ここで質問する前に自分なりにいろいろ調べてるので勘弁してください。
また質問するときもあるでしょうけど、その時もよろしくですっ!
ちなみに585の質問は俺も思った。
なんなんだ この惨状
>>587 boolean isHttpLetter(char c) {
return "abcdefghijklmnopqrstuvwxyz0123456789.$,;:&=?!*~@#_()".indexOf(Character.toLowerCase(c)) != -1;
}
>>591 ありがとうございました。
いかのようにしたら大体うまく行っているみたいです
return "abcdefghijklmnopqrstuvwxyz0123456789.$,;:&=?!*~@#_()/-+%".indexOf(Character.toLowerCase(c)) != -1;
あ・・・全然足りてなかったね。すまんこ。
594 :
デフォルトの名無しさん :04/02/16 22:55
jsp/サーブレットで、アクセスしてきた端末のユーザIDを知る事はできますか? (WinNT/2K環境限定です)
595 :
デフォルトの名無しさん :04/02/16 23:01
596 :
デフォルトの名無しさん :04/02/16 23:03
>>594 仮にできたとしても、そんなことさせるな。
System.getProperty("user.home"); を送らせれば。多分System.getPropertyはユーザ名かなんか出てきたと思うけど。 HttpServletRequestのメソッド使って取得は無理だと思うけど。
598 :
デフォルトの名無しさん :04/02/16 23:20
Appletってそんなことできるのか。 えげつねーな。 まあどうせ俺はAdministratorって出るだけだが。
>>584 > むしろ疑問に思うなら、Object#clone() の存在の妥当性だ。
> Cloneable に clone() を要件とするのでは、何故いけないのか。
これだと clone() を実装する側は super.clone() ができないので、
自分自身の複製をどうやって作るの? ということになりませんか?
そうすると、C++でやるようにコピーコンストラクタを自分で用意するか、
System#copyObject(Object) みたいなのが必要になりますよね。
私は勝手にこういうふうに解釈して納得してるんだが、誰かホントのこと教えて。
602 :
デフォルトの名無しさん :04/02/16 23:58
>>557 > Javaはドキュメントが悪いとうちのソフ工学の偉い人が言ってますた。
具体的になぜ、どう悪いと行っていたのかソースキボぉ〜ン。
良いドキュメントの例はなんていっていますたか?
603 :
デフォルトの名無しさん :04/02/17 00:05
>>584 ところでさ、
不変クラスにclone()メソッドを実装するとかCloneableインターフェースを
実装するって無意味かな?
>>587 Jakarta OROを使うと楽だったり。
605 :
デフォルトの名無しさん :04/02/17 00:09
>>596 ありがとうございます。
イントラネットで使ってるシステムなのですが、
サーバのログを見ればipアドレスは判りますが、
ipアドレスでは端末までしか特定できません。
それで、その時Winにログオンしていたユーザを知りたいのです。
何か手はありませんかね?
>>600 とりあえずJavaの鉄則を読んでいるといいかも。
Javaの格言もいいかも
>>605 なんのためにそんなことをするんだ?
ハック?
608 :
デフォルトの名無しさん :04/02/17 00:28
>>605 そういう要件のときは、ユーザ認証組み込め。
609 :
デフォルトの名無しさん :04/02/17 00:29
>>607 社外秘の資料流出を防ぐためです。
会社の資料は全てweb経由で参照できるのです。
その中には、非常に高価で売れるモノがあるらしく
過去に何度も社外に流出しています。
売りに出される資料は日次的に変わるモノなので
それが、手元にくると何日の何時んも資料と把握できるのです。
なので、その時期にその資料を参照していた人物を特定する
目安となると思うのです。
実際、その時参照している数は数百人単位なのですが、
予防にはなると思います。
何かよい方法はありますか?
610 :
デフォルトの名無しさん :04/02/17 00:32
>>608 ユーザ認証とは、どんなモノですか?
web画面にユーザidとpasswordのダイアログが出る?みたいのでしょうか?
611 :
デフォルトの名無しさん :04/02/17 00:33
>>609 資産には適切なアクセス権を与えるべし。
ユーザ名がわかればよいだけでは安易すぎる。
612 :
デフォルトの名無しさん :04/02/17 00:34
>>610 YES
認証があれば、そのIDはサーバサイドで取得可能。
OSのログインIDとは別物。
>>609 (((;゚Д゚)))ガクガクブルブル
流出時の経済的損失がどの程度のものか寄るけど、
流出した後の対処を考える前に、流出しないようにする方法を考えた方がいいかと。
電子透かしについて調べてみたら?もはやJava初心者質問スレできくことじゃないなぁ
イントラネットでnbt通るんならIPアドレスからユーザーID引けるが
そこまで厳密なものならservlet/jspでWEBアプリやめて webstartあたりのjavaアプリにしたら? ブラウザだと結局ローカルにデータ保存とかできちゃうから だめだよ ま、こういう感じの案件俺も聞いたことある ftpとかhttpとかで単純に流れるようにやっちゃうとだめだよん ユーザーの特定という意味ではvpn考慮しないとね
616 :
デフォルトの名無しさん :04/02/17 00:42
>>612 やっぱり、その方法しかないのでしょうか?
5千以上のIDを発行し、そのスタイル(ダイアログが出てきて
1つクッションを入れる)を定着させるのは
非常に辛い...不可能に近い。
617 :
デフォルトの名無しさん :04/02/17 00:46
>>616 あのね、企業判断だろうけど、
ユーザの利便性と資産流出による損失どちらが大事なの?
まっとうな企業なら、認証は当たり前。
ID発行も当たり前。
>>515 のような高セキュリティはイントラではあまり聞かない。
618 :
デフォルトの名無しさん :04/02/17 00:46
>>614 そのnbtをもう少し詳しく教えて頂けますか?
619 :
デフォルトの名無しさん :04/02/17 00:47
↑
>>615 のような高セキュリティはイントラではあまり聞かない。
1.4.2からNTLM対応してるけどね。
622 :
デフォルトの名無しさん :04/02/17 01:04
>>621 すいません、どうやってIPからユーザIDを引くのでしょうか?
>>605 そのローカルマシンの認証は何でやってんの?
どっかにドメコンとActiveDirectryないの?
あればJAASとか経由でその認証を使える。
ユーザは再度ユーザ名パスワード打たなくちゃならないけど
ID再発行ってことはないよ。
625 :
デフォルトの名無しさん :04/02/17 01:13
>>624 サーブレットからどうやって取得するのですか?
認証無しのシステムなんてイントラだろうが珍しいな
628 :
デフォルトの名無しさん :04/02/17 09:43
質問です。 以下の事に関してうまい方法が浮かばなくて困っています。 どなたか、ご教授くださらないでしょうか。 とある文字列(半角文字のみの集合)を検索し、 その文字列で使用されていない半角文字を1文字 導き出したいのですが、何かうまい方法はないで しょうか? ハッシュに前半角文字を入れて比較していくぐらい しかおもいつかないのですが…。 なお、JDK1.3を使用しています。
文字コードを配列のindexとしてフラグを立てる というのはCなら常套手段だが
630 :
デフォルトの名無しさん :04/02/17 10:47
Cは少しやったことあるのですがクラスの辺りで挫折しました 今からJavaをやりたいのですが、テトリスのようなものを作りたいです だれか教えてください GUIは CPad for Java SDKです
Cじゃなくても常套手段な気が
>>628 こんなのでどうよ。
アルゴリズム的には面白くないけど、10万文字の文字列でも遅くはなかった。
ArrayList list = new ArrayList();
for ( char ch = '!'; ch <= '~'; ch++ ) {
if ( str.indexOf( ch ) < 0 ) {
list.add( new Character( ch ) );
}
}
633 :
デフォルトの名無しさん :04/02/17 10:52
本か、、スレ上で教えてもらいながら作れるところはありませんか? 勝手ですいませんが教えてください
断ります
636 :
デフォルトの名無しさん :04/02/17 11:11
じゃあ糞スレたてていいですか?
637 :
デフォルトの名無しさん :04/02/17 11:21
>>634 本の方が、スレで人に聞くよりよっぽどわかりやすいぞ。
それとバカ向けに丁寧に教えるお人好しは2chにはほとんどいない。
638 :
デフォルトの名無しさん :04/02/17 11:30
Frameオブジェクトでフレームサイズを変更するメソッドってなんですか? 引数の詳細もおしえて、、、お願いします
639 :
デフォルトの名無しさん :04/02/17 11:40
640 :
デフォルトの名無しさん :04/02/17 11:42
>>640 2chで聞くより、自分でAPI見た方が早いと思うんだが、どうよ。
642 :
デフォルトの名無しさん :04/02/17 11:48
>>641 はい、と思いました、しかし下位クラスなどの場合、自分が厨なもので探し方がわかりません
うまく検索する方法がありましたらご教授ねがいます。
643 :
デフォルトの名無しさん :04/02/17 11:54
test
645 :
デフォルトの名無しさん :04/02/17 11:56
>>644 わかりましたです、ありがとう御座います
>>642 「メソッドの概要」の下に、スーパクラスから継承したメソッドの一覧があるので、そこを見るか
最初にスーパクラスの一覧があるので、そこを順々に探していくかする。
>>630 宿題スレはどう?丸投げ歓迎らしいし、知りたい部分を聞いてみたら?
648 :
デフォルトの名無しさん :04/02/17 15:51
JAVAでGUIを作成したいです、スタンダードなウインドウの生成するための コードをお願いします、メソッドなどは自分でAPIで調べますのでだれかお願いします。
>>648 メソッドを自分で調べられるのなら、J2SEをインストールしたディレクトリ
にあるディレクトリdemoをのぞいてみるといいよ。
652 :
デフォルトの名無しさん :04/02/17 17:08
SWT使えば?
丸投げ歓迎の宿題スレってどんな奴が解いてるんだろう。 「そのスレで問題3問とけ」って課題出してる教授でもいるのか?
だいぶ前に解いたことあるけど、そのときは仕事から全力で現実逃避したいときだった。 あと、「最近じゃ学校でこんなことやるのか。へー」とか思いつつ、面白かったので解いたことも。
655 :
デフォルトの名無しさん :04/02/17 23:07
J2SE 1.41と1.42 ってどんな違いがあるんでしょうか。バグを2000個直したなどとは聞きますが機能的に結構よくなったと思われますか?
>>655 1.4.1 は 2004/1/15 でサポート切れ。先は無い。
657 :
デフォルトの名無しさん :04/02/17 23:22
基本的なことだと思うんですが教えてください。 String[]を返す関数内で、要素の個数がわからない場合どうかくのがいいのでしょうか pubic String[] gets() { String[] s = new String[???];: for ( ... ) { if(..) { sに追加したい } } return s } お願いします
>>657 pubic String[] gets() {
ArrayList list = new ArrayList();
for ( ... ) {
if(..) {
String s = ...;
list.add(s);
}
}
return (String[])list.toArray(new String[list.size]);
}
return間違い。 誤) return (String[])list.toArray(new String[list.size]); 正) return (String[])list.toArray(new String[list.size()]);
>>655 関連で質問なんですが、ISO-2022-JPコンバータが、
不正なエスケープシーケンスのとこで無限ループしちゃう問題、
1.4.2_03では解決してますか?
>>658 ありがとうございます。勉強になります。
663 :
デフォルトの名無しさん :04/02/17 23:52
>>660 1.4.2_03 で FIX される予定だった。
>>663 に書いてる事もあくまで予定。おせーよ Sun。
すいません、JavaCheckで使用する .spcファイルはどこにあるのでしょうか? とりあえずJavaの公式サイトで検索かけてみたのですが、見つかりません どなたかわかりませんか?
>>665 hopper 1.4.1 の開発コードネーム
mantis 1.4.2 の開発コードネーム。
1.5 が tiger なのと同じ。
おしえてください。 あるbyte配列にデータが格納されているとします。 たとえばこんな感じです。 byte ary[5]; の中身 |80|81|82|83|84| <- |と|の間が1バイト 16進で書いています。 この変数aryをString型に変換します。 String str = String(ary, 0, 5); このようにした場合、1バイト目の値が(Stringにしてるので1文字目になるのでしょうか) 0x80と等しいかとif文で聞くにはどうしたらいいのでしょうか? String型にする前だったら、単純に if (ary[0] == (byte)0x80){ 0x80だった場合の処理 }else{ 0x80以外の処理 } とできたものが if (ary.charAt(0) == '\u0080'){ ではいけなかったみたいで・・・ どういう条件で聞けばいいか・・・ あと直接 ary[0] == 0x???? で聞いてもいいかと思ったのですが、????がいったい何なのか・・・・ sprintf(s, "code=%X", ary[0]): と同じようなことがJAVAでできればそのビットパターンを調べることもできるのですが、、、 そういうことできるのでしょうか?JAVAで・・・ 以上よろしくお願いします。
ありがとうございます。でも、ますます混乱してきました。
4899962では、1.5に向けて修正中、
4952305では、1.4.2_03/04で直ったと書かれているにもかかわらず、
>>664 さんの言うとおり「03で直ってないけど04で直るの?」とコメントもあります。
4697605では、Release Fixedが1.4.1と1.4.2となってて、
1.4.2では未だ直っていない。
もう、1.5まで待てってことなんでしょうか。
少しだけSunのやる気を疑ってもいいですか?
>>670 > String str = new String(ary, 0, 5);
はデフォルトのエンコーディング(SJIS とか EUC-JPとか)でユニコードに変換されるから、
0x80,0x81,0x82,0x83,0x84 だと結果はエンコーディングによる。
全部 \uFFFD(変換不能の場合のコード) に変換されてる可能性も高い。
>>671 いや、だから 1.4.1 では直ってたんだってば。
あ、そういうことだったんですか。 再発生したものが、まだ続いてるということなんですね。 じゃ、1.4.2_04に期待ということで。 ありがとうございました。
ありがとうございます、
まず、先ほど私が出した内容で一部間違いがありました。
>あと直接 ary[0] == 0x???? で聞いてもいいかと思ったのですが、????がいったい何なのか・・・・
>sprintf(s, "code=%X", ary[0])
正しくは、
あと直接 str[0] == 0x???? で聞いてもいいかと思ったのですが、????がいったい何なのか・・・・
sprintf(s, "code=%X", str[0]):
>>673 > はデフォルトのエンコーディング(SJIS とか EUC-JPとか)でユニコードに変換されるから、
> 0x80,0x81,0x82,0x83,0x84 だと結果はエンコーディングによる。
> 全部 \uFFFD(変換不能の場合のコード) に変換されてる可能性も高い。
String型に変換される時には、UNICODEになるのではないのですか?
なんらかのコードに変換された後、それがどういう風に変換されたのか?
見る方法はあるのでしょうか?
sprintf(s, "code=%X", str[0]):
見たいな感じで。。。
677 :
デフォルトの名無しさん :04/02/18 09:31
>>676 その通り、String型になった時点でUnicodeのchar配列になってるが、
>>673 は元のbyte配列をどのキャラクターセットの文字列として扱うか、と言う意味でエンコーディングと言ってる。
0x80,0x81,0x82,0x83,0x84のbyte配列をShift_JISとして扱うか、EUC-JPとして扱うかで元のbyte配列がどの文字を指すかが変わるからね。
で、変換不能な場合は0xFFFDとなる。
678 :
デフォルトの名無しさん :04/02/18 17:18
教えてください。 test.javaを作成し、java test.class によって実行はできるのですが、 test.exeを作成して、JVMを使わないようにするにはどうしたら良いでしょうか?
>>678 とりあえずgcjでも使えば?
それよりクラス名の最初の文字は大文字にしよう。
681 :
デフォルトの名無しさん :04/02/18 17:30
>>680 gcjでexe化できるのか。
でも、GUIは無理だよな?できる?
JVM使わないでって。。。 JavaのクラスはVMなしじゃうごかねーよ
>>682 そだね。gcj にしても、他の AOT コンパイラにしても、
VM 付き DLL を必要とするか、 VM 付き EXE を作るかの二択になっちゃうしね。
684 :
デフォルトの名無しさん :04/02/18 20:52
初心者スレにも書いた質問でマルチになっちゃってすいませんが。 j2sdkのインストールで、"failed to extract DLL_.ini"とか出て失敗するのはなぜ? Win2k,IE6の環境ですが、さっきj2sdk1.4.1をアンインストールして j2sdk1.4.2をインストールしようとしたらこれが出てインストールできなく なってました。 j2sdk単体のものも、さっきダウンロードしたNetBeans同梱のやつも駄目。 DLL_.iniで検索しても結果ゼロ。こんなエラー俺だけなの? 追加で書いておくと、1.4.1も1.5ベータも無事インストールできるのに、 1.4.2だけが駄目。なぜ!?
>>684 ダウンロードしたファイルが壊れて無いか疑ってみれば?
インストーラが中にあるもの展開しようとしてこけてるように思われ。 C:\Documents and Settings\<ユーザ名>\Local Settings\Temp C:\TEMP とかの中を消すなり再起動するなりしてリトライしてみては。
>>685 ファイルは壊れてませんでした。
ダウンロードしたのも、雑誌の付録CDに付いてるのでも駄目。
>>686 駄目でした。
あきらめて1.5ベータと1.4.1使ってます。
>>677 ありがとうございます。
すいません、質問の仕方が悪かったです。
詳しく書くと
サーブレット作っていまして仕様で、クライアントから(Cのプログラム)
HTTP-POST通信で、以下のような情報を送ってくるのです。
<DATA>0x80</DATA> ※0x80はバイナリイメージで入っています。
XML形式に似た形式です。
サーブレットのプログラムでは、1バイトづつこのデータをbyte配列に読み込み、
それをStringのコンストラクタでString型に変換して
<DATA>と</DATA>で囲まれているデータ(この場合は0x80)を
抜き取りたいのですが、どうすればいいのか・・・・
#仕様は変ということはちょっとおいといて・・・
>689 仕様が変。
>689 0x80はISO-8859-1ならば正当な文字。 一度ISO-8859-1文字列としてキャラクタ配列にしまってから <DATA />の部分を取り出して、 そのままバイト配列につめていけばいいと思う。
>>691 Reader 使わずに InputStream から byte[] に読み込んで処理しろ。
遅くなりましたが、回答して頂いた方、ありがとうございました。 やはりVM無しは無理そうですね。 gcjも考えたのですが、他のクラスを使うときはやはりDLLなどが要りますし、 良いかどうかは使ってみないとわからないですね。 要は何がやりたかったかというと、exeにコンパイルした時と、する前と、実行速度がどの程度変わるかを知りたかったのです。
>>693 基本的に exe にした方が遅くなる。
今の JavaVM はメモリさえ大量にあれば相当速いぞ。
695 :
デフォルトの名無しさん :04/02/19 00:53
697 :
デフォルトの名無しさん :04/02/19 01:14
JAVAのクラスでデータを取り出してからエクセルシートを作成する プログラム作れといわれてます。 POIのような外部のパッケージ使おうかと思いましたが、 あんまりそういうのは使うなといわれてしまいました。 Java歴半年強の人間に COREのAPIだけでそんなん作れといわれても・・・。 一旦CSVかんなんかに保存してそれをEXCELで 呼び出すようなことを考えてますが、可能でしょうか。 ご教授お願いします。
可能。CSVはExcelがデフォで関連付けしちゃうし。
699 :
デフォルトの名無しさん :04/02/19 01:24
>>697 すでにあるもので十分なのに、自作するなんて暇ですね。
700 :
デフォルトの名無しさん :04/02/19 01:44
HTMLの串みたいなものを自作しようと思っています。 InputStream in = Socket.getInputStreamからの入力を 空行が検出される迄 br = new BufferedReader(new InputStreamReader(in)); のreadLineで読み込み、 空行を検出したら、 以降を、BufferedReaderではなくInputStreamでのin.read()で 読もうと試みたのですが、最初が欠けてしまう事がよくあります。 最後迄BufferedReaderで読むのが正解なんでしょうか? 結果をバイナリーで得たいので一度文字列を経由してしまうのが 不安なんですが。
・最初が欠けてしまう ・BufferedReader 欠けている分は BufferedReader 内部にバッファリングされていると思われる。
そもそも Reader を使わずに InputStream でやれ。
>701 確かに、readLineで読めば欠けません。 バッファ部分をを取り出す方法があれば知りたいんですけどね。 取得したデータのバイト数が知りたいのですが、readLineで読むと 改行コードが抜けるので、困るわけです。 (CRLFかCRか保障がないので、改行数を加算するわけにもいかんし) Webの送受信では極当たり前の処理なので、正しい方法があると思うの ですが。
>702 やっぱり、そうなのか。 作るのは簡単なんだけど、空行検出迄は文字に した方があまりに簡単だし、HTTPでは、頻繁に 出る手続きなのでなんか馬鹿らしいなと。
ついでに・・・・・ クライアントからサーバに接続してReponse Headerと コンテンツを取得するにはURLConnection使えば、 700,703の問題は難なくクリアできます。 逆に、クライアントから接続されたサーバ側から、 Request Headerとコンテンツ(POSTが実行された時) を取得する際に使えるクラスってあってもよさそうな 気がするのですが・・・・無いのですか?
>>705 HTTPのクライアントを作る需要は多そうだけど、
サーバはコアAPIに入れるほど需要はなさそうってことじゃない?
ちなみに、漏れもLineInputStreamみたいのを作っちゃった方が簡単と思うよ。
全言語のページからLineInputStreamを検索しました。 約324件中1 - 10件目
>>707 そうそう。妙に需要があるみたいで、
SunのJavaMailプロバイダとか、GNU Classpathの何かにも入ってたのを見たことがある。
でも、ASCII前提とかだったりするから、持ってくるなら気をつけたほうがいいよ。
>707 検索先を眺めて・・・ FAQに近いものだと思ってたし、HTTPでは当たり前の如く需要があるから スマートな方法があると思っていたんだけど・・・・・ LineInputStream作るのが正解みたいですね。 では、作りかけのLineInputStreamもどきのバグ取りしよっとw BufferedReaderの使えなさにため息が出るのみ。
「やさしいJava」を終えたら次は何をやればいいですか?
Eclipseはexeのようですが、これはgcjでコンパイルした物でしょうか?
>>711 なんかJavaでやってみたいことないの?
特になければ、ゲームでも作ってみるとか。
>>699 お前はHelloWorldもすでにあるからという理由で書かない人か
>>712 外部 VM を起動するだけの EXE ファイル。
Eclipse が使用可能な VM が一個も入ってなかったら起動できないよ。
>>714 目的による。
HelloWorld.javaを書いてJavaを学ぶことが目的なら、自分で書く。
プログラムによりコンソールに「HelloWorld」と表示することが目的なら、既存のを流用する。
流用する時も、「自分で書くコスト」>「既存のものを調べて使うまでのコスト」である場合に限るが。
後者が目的の時に前者の行動を取るのは無駄。
まーなんにしても、POIは日本語の扱いに不安があった(今も?)ので
Javaプログラム側はCSVを吐いて、xls形式が欲しかったらExcel + VBAで
何とかするのがいいんじゃないかな。
>>710 BufferedReader が悪いのか?
BufferedReader は Reader からの入力をバッファリングしてるだけなんだが…
718 :
デフォルトの名無しさん :04/02/19 09:59
jrockitって、速いけどCPU占有しすぎって感じがするんだが。 他に使ってるヤツがいたら感想聞かせてくれ。
>>717 彼はBufferedReaderをバッファリングするReaderではなく、
行単位で読み込んでくれるReaderだと思ってるらしい。
JavaとCの基本のさわり程度の知識しかないのですが、 今後joystick使ったプログラム作りたいんです。 何を勉強すれば良いのでしょうか?
721 :
デフォルトの名無しさん :04/02/19 10:28
>>720 その前にテトリスぐらい作れるようになっとけや。
>>697 >あんまりそういうのは使うなといわれてしまいました。
普通の会社では使えないものなの?
漏れ、Jakarta無しには生きていけない体になってしまってるんで、
そういうののない仕事は考えられない。
おまえらの会社ではどうですか?
>719 私が欲しいのは、行単位で読み込んでくれるReaderであり、 バッファリングしてくれるなら、「バッファの残骸を行単位 以外でも吐き出して」、前後のつじつまがとれればそれで 良かったというだけの話。 自分で作ったのはそうしたし。
>>725 BufferedReader は Reader がユニコードに変換した後のものを
バッファリングしてるだけなので、仮に BufferedReader が
> バッファリングしてくれるなら、「バッファの残骸を行単位
> 以外でも吐き出して」、前後のつじつまがとれればそれで
> 良かったというだけの話。
の機能を持っていても
>>700 の要求は満たされない。
要求を満たすためには必要に応じてユニコードへの変換を止めないとダメなんだが…
>>725 そもそも Buffering しないで行単位で読み込む Reader が必要だったんでしょ。
「Buffering しないで」って言う時点で BufferedReader 使うのが間違い。
728 :
デフォルトの名無しさん :04/02/19 11:56
>>720 さわり程度ではなく、基礎はガチガチに固めとけ。
Stringとかはリファレンスを一読しとけ。
SUNの出してる本は全部一読しとけ。
ストレスのはけ口を作っとけ。
(これも必須か…)
>>723 確かに、英語と検索は必須だな。
>>700 new BufferedReader(new InputStreamReader(in), 1) とかして
空行検出するまで BufferedReader、空行検出してからは in から読み込めば?
BufferedReader の実装によっては先頭の 1バイト欠けるかもしれんが。
>726 厳密に言うとそうだけど、非常に限定した仕様なので、 ユニコード云々は考慮しなくてもOKです。 そしてreadLineの機能があれば嬉しかっただけで、 BufferedReaderのサブクラス以外にreadLineが あればBufferedReaderはまっさきに除外してました。 結局、Byte列10,13,10,13さえ検出できればいいので、 702の助言通り、バイナリーでやり過ごしました。 本当はURLConnectionのGetHeaderFields,SetRequestProperty, getInputStream,getOutputStream等のサーバ版があると (InputStream,OutputStreamで十分できるんですけど) ソースが管理しやすくていいなという話だったんですけどね。
>>730 ユニコード云々を考慮しなくて良いなら、
空行以降は read(char[]) で読めばいーのでは?
バイト数調べたきゃ char[] から byte[] に変換すりゃ良いだけだし。
っつーか本当にユニコード云々考慮しなくていいのか?
>>722 JakartaといわずApacheの〜(嘘はついてないし)といえば通るかもしれんぞ
ApacheHTTPDとかどの会社でも大概使ってるだろ
ゴメン、IISで立てていたら説得無理かも
>731 それ(read(char[]))は試してみる気が起きました。ありがとうございます。 ところで、HTTPのヘッダ部分で、Cookie以外にascii文字以外の文字が登場する ケースってありましたっけ? 相手があらゆるWebサーバなら、最低でも Cookieにascii文字以外の文字が登場するので嫌らしいんですけど、 相手は*.machi.toと*2ch.net w・・・・・・・その手のサイトだけなのでw ホスト名がascii文字以外が使えるようになるのもそう遠くはないですけどね、 そういう仕様なのでw。
734 :
デフォルトの名無しさん :04/02/19 13:20
>>722 うちに会社は普通に使ってるぞ。
今のところTomcat、Struts、taglib、Strutsの中で使ってるCommonsだけだが。
俺作のへぼORマッパーでCommons-DBCPも使えるようにはしてあるが、採用実績はまだ無いな。
CoreAPI以外という点では、SunのJAF、JavaMail、各社・プロジェクトのJDBCドライバとか使ってる。
Jakarta のは Tomcat, Struts, Velocity とか。commonsで何か他に使ってるかも。 他には Hibernate, CasterXML, log4j とか。 いまやってるやつではこんなもんかな。
s/Caster/Castor/ だったね。いつも間違える。
うちはTomcatとCommonsかな CommonsはDBCPがとっかかりだった 今ではCommonsはTomcatと匹敵するか凌駕すくらいの実用的なものだと思う
Javaで作ったウィンドウアプリの入力チェックにCommons Validator使ってる。 Strutsとセットで使う(というか元々そのために作られたんだが)事が多いけど、 単体で使ってもハッピー。
Validatorの中のGenericValidatorクラスを継承してオリジナルのチェックを作ると死ぬほど便利。
>>739 Excel の仕様書から POI を使ってプロパティや XML を
吐き出して使ってる。修正すんのは Excel だけというルールで。
PM とかも Excel なら修正できるし。
。。。普通はマクロ使うのか?俺マクロシラネ。
Tomcat、Struts、Taglib、Commons(Strutsの中で使ってる物以外も)かなー
JSPって継承出来ないんですか? 似た様な画面を作ったり、部品化したりしたいんですが。
>>742 include で我慢しる。
Tiles とか SiteMesh とかもある。
デバッカって何を使っていますか?
>>744 Eclipse
ついでに、デバッガな、debugger。
でぶっげー
Eclipse慣れるとコンパイルエラーって言葉を忘れるよな。 まぁ本当の初心者は最初はコマンドラインでやったほうがいいと思うけど。
でぶゲー: eyetoyplay
>>733 ファイルアップロードするときのファイル名のエンコードが
IEとかネスケが生のSJISとかだったようなきがする。
ダウンロードでダイアログ出させるときのデフォルトファイル名とかも。
ブラウザやバージョンによって挙動がばらばらで昔仕事で苦労したはずなんだがもう覚えてない。
2chアプロダとかに対応するなら要注意かもな。
このへんWeb板の領分なきがしないでもない。
Swing に詳しい方教えて下さいませ。 JTable ではまりまくっております。基本的にやりたいことは、 1.一定時間でテーブルは更新される。その際、TableModel が丸ごと変わる。 ただし、列数は一定。 2.マウスによる列の入れ替え、 行の値による列毎のソートが可能。 です。一応動くものはできているのですが、コードがあまりに拙いのと 例外を吐くことがあるので頭を悩ませております。 問題1 マウスで列を入れ替えた後に、テーブルモデルを setMode で変更すると 初期状態の(入れ替える前の)状態に列が戻ってしまう。現在は、仕方がないので setModel の中で、convertColumnIndexToModel と moveColumn を使って 更新前のものを覚えておいて、変更後に列を移動してます。これがなんとも みっともないのでもっと良い方法はないでしょうか? 問題2 マウスで列を移動中にモデルが更新されるといろいろ例外がおきて しまいます。この、マウスで列をドラッグ中であることを検出できないのでしょうか? これが判れば、更新時に列が移動中であれば終わるまでモデルの更新を待って 移動中でなければ終わるまで列移動を禁止すれば良いだけなので簡単 なのですが。invokeLater とかもなんか違いうし… 長文スマソ。詳しい方がおられましたら是非ご指南お願いします。
Stringクラスって"文字列は定数です。この値を作成したあとに変更はできません。" らしいけど、 public class a{ public static void main(String [] args){ String str = "あいうえお"; System.out.println(str); str = "かきくけこ"; System.out.println(str); } } ってやると書き換えられる。 ドキュメントの意味ってどういうこと?
>>750 モデルとビューの区別がなされてないように思われ。
表示してるデータの値が全件書き換わるなら
そのModelの中の値を全て入れ替えれば良いように思われ。
setModelでModel自体を入れ替えてしまうのでなく。
そしたらビューを操作してても大丈夫かと思われ。
>>751 String含めてオブジェクトの操作は参照型。
str = "かきくけこ";
この時点でstrは"かきくけこ"を指すようになるけど
String"あいうえお"は書き換わらない、参照されなくなってごみ収集されるだけ。
>>751 それは書き換えてない。
別の新しい文字列インスタンスを代入してるだけ。
もとの文字列は変更されていない。
>>752 ご意見ありがとうございます。一応モデルとビューは区別できてます。
というか、厳密に区別しているためにご提案の方法はちょっと問題かと。
モデルの中身を入れ替える方法だと、モデルがビューの列の順番を
知る必要がありますよね?setModel 前のモデルとビューは完全に
切り離したいのでモデルの方は変更したくないのです。
一つのモデルを複数のビューで見る場合を考えていただければわかりやすいかと。
なるほど、でも違うオブジェクトを参照してるってなぜ分かるの? 分かる方法ありますか?
"あいうえお" != "かきくけこ"
String a = "foo"; String b = new String("foo"); // 内容は同じだが異なるオブジェクト String c = a; System.out.println(a.equals( b)); // 内容が同じか調べる System.out.println(a == b); // 同じオブジェクトをさしているかを調べる System.out.println(a == c); // 同上
759 :
デフォルトの名無しさん :04/02/20 00:57
ハッシュコードなら違う値を返すだろうから、それを求めてみようとした。 public class a{ public static void main(String [] args){ String str = "あいうえお"; System.out.println(str); System.out.println(((Object)str).toString); str = "かきくけこ"; System.out.println(str); System.out.println(((Object)str).toString); } } ObjectクラスのtoStringってクラス名@ハッシュコード返すんだよね? しかし、エラーになってコンパイル出来ず。 なぜだ? 答えようと思って自分が質問することになるとは・・・。
コンパイルエラーはどうか知らないが Object にキャストしても str は String クラスだから クラス名@ハッシュコードにはならないぞ。 ハッシュコードがほしいなら素直に str.hashCode() 表示しろよ。
>>759 × toString
○ toString()
>>759 まず、「toString()」だね。
それから、キャストすればキャストした型のメソッドの実装が呼ばれると思っているのなら、
Javaを勉強しなおしたほうがいいよ。StringクラスのtoStringは自分自身を返すだけ。
763 :
デフォルトの名無しさん :04/02/20 01:29
勉強し直しだ・・・。
>>756 public class a{
public static void main(String [] args){
String str = "あいうえお";
System.out.println(str);
System.out.println(str.hashCode());
str = "かきくけこ";
System.out.println(str);
System.out.println(str.hashCode());
}
}
数字が違って示されるのが、違う証拠。
ハッシュコードに付いては勉強すべし。
この場合ハッシュコードは適切でないような。 String a = "foo"; String b = new String("foo"); System.out.println(a == b); System.out.println(a.hashCode()); System.out.println(b.hashCode()); aとbは別のオブジェクトをさすが、ハッシュコードは同じ。
それはハッシュの使い方が間違ってるような。 数値は大体違う、ってことでその場合たまたま成り立つだけで。 //多量の文字列のハッシュを取ればたまたま同じ値になる文字列はあるはずなわけで。 しかもそういう用途ならSystem#identityHashCodeのほうが近いし。 同一参照かは==するのがまともかと。
>>763 おまいさん、何か激しく勘違いしてるみたいだが、
>>756 の答えに対しては、
>>758 の方法しかありえない。
違うオブジェクトを参照していても、ハッシュコードが同じになる可能性はある。
JavaDocのObject#hashCode()を良く読んでみそ。
質問してもよろしいでしょうか? △▽△ △▽△▽△ △▽△▽△▽△ ▽△▽△▽△▽ △▽△▽△▽△ △▽△▽△ △▽△ というように格子を設定し、隣(左右、上または下)のセルと相互作用するように したいのですが、 →i □□□□□□□□ j↓□□□□□□□□ □□□□□□□□ だと簡単に各セルに番号を付けることができるのですが、六角形の場合だと 一つ一つの三角形に単純に番号を振り分けられません。 なにかよい座標の取り方などはないでしょうか? アドバイス願います!
すみません、もう少し勉強してみます。 またお願いいたします。
質問です。 Stringの中に計算式が入っているとして、 String siki = "2+3+(40*2+3/2)/2+10"←こんなふうに それを計算させたい場合どのようにしたらよいでしょうか 使える演算子は、+-*/、括弧も使えるとします。 ユーザーに式を書かせて その結果を表示するようなかんじです。 ソースでなくても、アルゴリズムでもいいです。
>>768 もう解決したの?
>>770 逆ポーランド記法でググってみそ。
宿題スレの前スレでも、別の方法で解決してる人がいた。
>750 の問題2は自己解決しました。 JTableHeader に getDraggedColumn というそのまんまのメソッドがありました。 JTable のメソッドばかり調べてました。お恥かしい… 問題1は気分の問題なのでとりあえずこれでいきます。
>>768 どこが六角形なのか分かりません。
三角が格子状に八角形を形作ってるように見える
.□□□□□ □■■□□ .□■■■□ こういうことかな? □■■□□ .□□□□□
アプレットを作る勉強をしているのですが、ステータスバーに文字を表示するにはどうしたらいいのでしょう? ここまで書いたソースです。 import java.applet.*; import java.awt.*; /** * HolloWorldクラスは、画面に"Hollo World!"と表示するシンプルなアプレット *を実行します。 */ public class HelloWorld extends Applet{ public void showStatus(String msg){ }; public void init(){ setBackground(Color.black); showStatus("お前の母ちゃんでべそ。"); } public void paint(Graphics g){ g.setColor(Color.white); g.drawString("Hollo World!",30,80); } } どのようにしてshowStatusメソッドを使うのでしょうか? いろいろやってみたのですが出来ません、どなたかご助言を・・・。
>>775 >public void showStatus(String msg){
>};
なにこれ?
消して、initメソッドの中の showStatus("お前の母ちゃんでべそ。");を
paintメソッド内に移せばいいんでねえの?
やりましたがダメです。 アプレット HelloWorld Start と表示されるだけです。
778 :
デフォルトの名無しさん :04/02/20 17:06
>>777 >public void showStatus(String msg){
>};
このオーバーライドは消したか?
これのせいでステータスが表示されないんだが。
キャッシュされてる class ファイルは殺したか? つまり「ブラウザ再起ち上げしてみろ」、ってことだが。
消しました。 何度やっても同じなんですが・・・。 ちなみに直したソーズです。 import java.applet.*; import java.awt.*; /** * HolloWorldクラスは、画面に"Hollo World!"と表示するシンプルなアプレット *を実行します。 */ public class HelloWorld extends Applet{ public void init(){ setBackground(Color.black); } public void paint(Graphics g){ g.setColor(Color.white); g.drawString("Hello World!",30,80); showStatus("お前の母ちゃんでべそ。"); } }
あ、今気付いたのですが、他のブラウザを表示して、再びこのアプレットを表示してるブラウザをクリックしたら表示されました。 なんで最初から表示されないんだろう?
やりましたがダメです。 アプレット HelloWorld Start と表示されるだけです。
アプレット開始時からステータスバーに表示するにはどのメソッドに書けばいいのか知ってる人いませんか? それともここはバカばっかりなのか?
自力解決できないのに馬鹿というのはいかがなものか しかも平日の日中に書き込んで2時間もたってないのに あほらしいのでこんなやつには誰も答えねぇよ
>>783 appletviewer では試してみたか?
786 :
デフォルトの名無しさん :04/02/20 19:11
さきほど質問したものだけど、またSQL質問していい?
>>786 どっかの似たようなスレとお間違いではないですか?
ここではSQLの質問はついぞなかったのですが。
複数ベンダーのSQLに対応したアプリを作りたいんだけど、 SQLの構文の違いを上手いこと隠蔽できるようなツールはありますか? 例えば、 SQLServer: select top 10 * from a; MySQL: select * from a limit 10; みたいなのを、DBごとにif文で分岐するようなやり方をしなくて済むようなやつです。
>>790 ちょっと見てみたんですが、かなりよさげでした。
ありがとうございます。
792 :
デフォルトの名無しさん :04/02/20 22:54
福田直人氏や日本ブレイク工業インベーダー等のゲームにも使われているのですが、 「画面をクリック(イベントを起こす)すると次の画面へ行く」という処理は、みなさん一体どの様にされているのでしょうか? 自分は、boolean型のスイッチを複数用意しイベントが起こるとその中の一つの値が反転、 repaint()をして、paintメソッド内ではifによるbooleanの型判定を行い・・・ という流れしか思いつきませんでした。 もっと効率よく画面を切り替える方法は無いでしょうか??
あ、Javaアプレットについてです。
795 :
前スレの本人 :04/02/20 23:07
>>792 そーゆー時こそ Stateパターンですよ。
>>796 そこんとこ、もそっと、詳しく教えてたもんせ。
普通に考えてCardLayoutとステートマシンだな
799 :
デフォルトの名無しさん :04/02/21 00:01
>>766 おまいさんこそなにか勘違いしてないか?
ドキュメント読んだら
"できる限り、Object クラスで定義される hashCode メソッドは、異なるオブジェクトについては異なる整数値を返します。"
と書いてあるだろう。
推測するに"出来る限り"とあるのは何万何億とハッシュコードが必要になったら同じ値になる可能性がある。
ということなのではないか?
事実、StringクラスではなくStringBufferクラスを使って同じ事をやれば、同じ番号がちゃんと返ってくる。
ドキュメントよく読まなきゃいけないのはおまいさんの方だったな。
なんか、1日越しの電波君が出没してますね。 java.lang.String#hashCode()のドキュメントを読んでから出直してください。 面倒くさがりの人のために以下に引用します。 「String のハッシュコードは、次の方法で計 算します。 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]」 hashCode()の実装はクラスによって違いますよ。
802 :
デフォルトの名無しさん :04/02/21 00:23
これをコンパイル、実行してみな。 public class a{ public static void main(String [] args){ StringBuffer str = new StringBuffer("あいうえお"); System.out.println(str); System.out.println(str.hashCode()); str.replace(0, str.length(), "かきくけこ"); System.out.println(str); System.out.println(str.hashCode()); } }
>>799 >>763 かな?そうじゃなかったら、その前後を読んでもらえば分かるけど、
オブジェクトの参照の違いをhashCodeで確かめるのが間違いだと言っている。
JavaDocをそこまで読んだなら、その直前の部分も読んだだろうけれども、
>equals(Object) メソッドで 2 つのオブジェクトが等価とされた場合、
>どちらのオブジェクトで hashCode メソッドを呼び出しても結果は同じ整数値にならなければならない
つまり、参照が違ってもequalsがtrueを返せば、hashCodeは同じでないといけないということ。
さらに、以下のようにも書いてある。
>equals(java.lang.Object) メソッドで 2 つのオブジェクトが等価でないとされた場合は、
>これらのオブジェクトに対して hashCode メソッドを呼び出したときに、
>結果が異なる整数値にならなくてもかまわない。
つまり、参照を比較するのにhashCodeは全く役に立たない、つまり
>>763 のコードがおかしいってこと。
>何万何億とハッシュコードが必要になったら同じ値になる可能性がある
これは可能性はあるけど、
>>763 参照とhashCodeの問題とは何の関係も無い。
すんません。
>>802 はネタにしか見えないんですが、突っ込むのは野暮ってものでしょうか?
野暮というか突っ込んだら逆切れしそうだからやめとけ
がいしゅつだったらスマソ javaソースを圧縮するフリーのソフトってありますか? なんか、どこかで見たようなきがするのですが・・・
>>806 jarツールのことではないのか?
ソースを圧縮ってコメントとかスペースとかを削るってことか?
>>807 そうです、コメントやら、スペースを削り、変数なんかも少ない文字に変換するんだったように思います。
携帯用アプリを作っているのですが、やはり容量がたりなくなってきたので
そういうソフトがあることを思いだしたんです。
>>806 ソースからコメントやらスペースを削ってもクラスファイルの大きさは変わらんぞ。
オブファスケータのことを言ってるんだったら RetroGuard とか。
811 :
デフォルトの名無しさん :04/02/21 06:11
Java初心者です。 やっとJavaの基本を覚えました。 最終的にはゲーム作成を目的としています。 基本の次に覚えるべき内容がわかりません。 SwingやSWT、アプレットやスクリプトなど多様化されているため、混乱しています。 先輩方、導いてください。お願いします。
812 :
デフォルトの名無しさん :04/02/21 06:15
神?
814 :
デフォルトの名無しさん :04/02/21 07:59
>>811 Swing Sunの出してる、標準のGUIキット(100%Java、遅い)
SWT Eclipseで使われてるGUIキット(Windows的な外見、速い)
アプレット HTMLに埋め込んで使う(学術系以外ではあまり普及してない)
サーブレット ServletAPIによって動的なHTMLを作成(より良いCGI代替物)
スクリプトレット JSP等、サーバ側で処理されてHTMLを出力する機構
JavaWebStart Swing、SWT等をサーバへのリンクによって起動する技術
(流行って欲しい…Sunももっと本気で普及させれ…)
>>811 SWTはWindows以外は厳しい状態だから
Swing+Java2DでのJavaアプリケーションの勉強するがよろし
Swingで作ったゲームは環境依存しない
Swingといってもウインドウ生成とあとちょっとしたのしかつかってないけど
まずはウインドウ作成してpanelに画像表示できるあたりを目標に
基本がわかってゲームの開発する準備が整ったら
ゲーム製作スレのjavaでゲーム作成へいくがいい
ステータスバーに最初から表示するのはどのメソッドに書いたらいいんだよ? いい加減答えてくれよ。 おめーらそんなにせこいの?
818 :
デフォルトの名無しさん :04/02/21 11:38
JAVAを現在勉強しているんですが、コンストラクタでつまずきました。 コンストラクタ起動の連鎖の仕組みが良くわかりません。 ようするに、サブクラスではthis()を使わない限り、super()を呼び出すことになり 親クラスでは絶対に引数なしのコンストラクタを記述してなきゃいけないよということでしょうか?
>818 サブクラスのコンストラクタ内部の最初の文に好きな引数でsuper()を呼んでいい。 記述しないなら引数なしの super() が勝手に補われる。
>>795 ミスターアリタ、なんでそんなプログラムにServletを使うのだ?
>>799 hashCode()の返り値がint型になっているなら
なんとかしてintの最大値までに収まるhashCode()を生成アルゴリズムを考えないといかんだろう。
822 :
ミスターアリタ :04/02/21 13:35
>>820 DVIファイルも一緒にあったので分かる人なら分かると
思ったのですが、そういう課題が出たのでサーブレットにしただけです(笑)
とくに意味はないってことですね(苦笑)
>>810 それ、もしかしてめっちゃくちゃ凄いソフトでね?
しかも日本人が作ったのか。
>>822 教官にServletを使わされたわけですか。
Java歴3日でよくそこまでできましたな。
825 :
デフォルトの名無しさん :04/02/21 13:42
>>822 お前、アリタじゃないな。
アリタというニイチャンのレポートパクったんだろ
827 :
デフォルトの名無しさん :04/02/21 14:02
staticメソッドにセットした値はいつまでメモリに保管されるのですか? (あるいはStaticで定義した変数など) Javaアプリケーションが終了するまで?Servlet + JSPのWebアプリの場合は 永遠とサーバーのメモリに保管されるのでしょうか? ServletContext.setAttribute()と同じようなイメージでしょうか? Javaコンソールアプリ、Webアプリの場合で破棄されるタイミングを 詳しく教えてちょ。
>>827 > staticメソッドにセットした値はいつまでメモリに保管されるのですか?
staticメソッドにセット、って具体的には?
> (あるいはStaticで定義した変数など)
static な変数を持つ class が破棄されるまで。
829 :
ミスターアリタ :04/02/21 14:24
>>824 これはまじで大変でした(笑)
学校でも私のファイルがかなり出回り教官も困り果ててましたヾ(´ε`*)ゝ エヘ
>>825 あなたにそこまで言わせるほとJAVA歴3日ではできないような
プログラムってことですよね??なんか褒められてるみたいで
ちょっとうれしいです(>.<)
>>828 class StaticClass{
private String value;
public static void setValue(String value){this.value = value}
}
例えばサーブレットのinit()でStaticClass.setValue("hoge");を行う。
StaticClassクラスが破棄されるのはガベージってこと?
Webアプリの場合、どのタイミングでガベージが行われるのでしょうか?
永遠にサーバー上のメモリ上に存在するということはないのでしょうか?
832 :
デフォルトの名無しさん :04/02/21 15:04
アジア人男性は彼らの唯一のターゲットであるアジア人女性と付き合う 白人男性/黒人男性を“俺たちのWomenを横取りした”という理由により嫌うことが多々ある。
>>831 > public static void setValue(String value){this.value = value}
代入式の後にセミコロンが無い、
static コンテキストで this を使用した、
等の理由によりコンパイル時エラーになります。
>>831 ガベージコレクションについて勉強しなおせ。
>>831 最低でも class が使われてる(該当 class のインスタンスがあるとかの)間は保持されると思うが、
class が破棄されるタイミングは言語規定では規定されてないはず。
VM 仕様でも規定されてなかったはず。
サーバのソースが見れるなら、どの ClassLoader で読み込まれたかが判れば、
基本的にその ClassLoader と一緒に破棄されるのである程度予測できるかと。
>>831 まあ、831のようなことをきちんと理解するのには時間が掛かるから、
とりあえずWebアプリなら「目的のスコープに合うコンテキストにしま
っとけ。いらなくったら手動で消せ。」にしとけ。悪いこといわない
から。早く結果出さないと上司に怒られるだろ?
>>831 Webアプリだろうがなかろうが、JVMが同じならガベージの戦略は同じ。
あぼーん
236 :デフォルトの名無しさん :04/02/21 17:23
マルチポストコピペ
238 名前:デフォルトの名無しさん :04/02/21 17:25
233 名前:デフォルトの名無しさん[sage] 投稿日:04/02/21 16:30
ソースの残りも流出しないかな〜
と言ってみるテスツ
234 名前:デフォルトの名無しさん[sage] 投稿日:04/02/21 16:40
。 。。
。ρ。 ううっ!出るっ!!
ρ  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
mドピュッ
C|.| /⌒⌒⌒ヽ/~ ̄ ̄ ̄ ̄ヽ
/⌒ヽ⌒ヽ___ | ∴ヽ 3 )
./ _ ゝ___)(9 (` ´) )←
>>1-1000 / 丿ヽ___,.───|彡ヽ ―◎-◎-|
_/ ) ( Y ̄ ̄ ̄ ̄)
(__/ \____/
こんなスレであぼーんされることがあるのか…
レスありがとです。新たな疑問が…
1.アプリケーションを終了したらメモリから破棄されるか?(staticに限らず)
終了前に必ずガベージが行われる?
例えば簡単にコンソールアプリを実行して、mainが終了したらnewしたオブジェクトや
変数は開放されるのでしょうか?
2.Webの場合、
>>831 のPGM例(コンパイルエラースマソ)で、だれかがstaticメソッドにセット
した値を、違うセッションの誰かがgetしようとした時に、既にガベージが行われて
値がnullになってることはないのでしょうか?
842 :
デフォルトの名無しさん :04/02/21 18:43
JDBCの質問です。 next()やった後、first()をやり先頭に戻ろうとしたのですが、 java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY と言われてしまいます。 これはResultSetを閉じて再度クエリーを実行しないといけないのでしょうか?
>>841 > 1.アプリケーションを終了したらメモリから破棄されるか?(staticに限らず)
> 終了前に必ずガベージが行われる?
ガベージコレクトは JVM 内のメモリ等の資源の再利用のためのものだから、
JVM が停止するなら、その直前にガベージコレクトしなければならない理由はこれっぽっちも無い。
> 2.Webの場合、
>>831 のPGM例(コンパイルエラースマソ)で、だれかがstaticメソッドにセット
static メソッドにセットした値が強到達可能であれば、
ガベージコレクタによって回収されることは無い。
>>831 のは例が不適切なのでそれを引き合いに出されても答えられん。
>>842 ドライバのドキュメントを見て、オプションとかでTYPE_SCROLL_INSENSITIVEか、
TYPE_SCROLL_SENSITIVEなResultSetが使えるかを探してみそ。
ダメなようだったら、もっと賢いドライバに変更。
>>841 1.プロセスが終了したら、ガベージもヘッタクレもなくて、普通OSがプロ
セス用に予約したメモリ全部解放してくれるでしょ。
ガベージって言ったって、実体は単にJVMが内部で起動するスレッドっすよ。
2.Classがガベージされるかどうかは、VMの実装や、Classの強参照をアプリ
ケーションが持っているかどうか(つまりアナタの実装次第)によるでしょう。
要するに、そんなところに置くな、と。スコープがアプリケーションの開始〜
終了までの変数なら、ServletContextに適当にしまっとけっつうこった。
おねがいします。 プログラムから現在実行中のjavaのバージョンするにはどうすればよいのでしょうか?
>>848 System.getProperty("java.vm.version");
System.getProperty("java.runtime.version");
System.getProperty("java.specification.version");
System.getProperty("java.version");
>>847 君もガキだねぇ。
過ぎたことをいつまでも根に持つ腐った奴。
ストーカー歴ないか?
>>850 2〜3日ぶりにこのスレみたら、目に付いておかしかっただけ。
そのとき初めて見たんだけど、なんでそんなに被害妄想激しいの?
GCのことを「ガベージ」って略すのは一般的なの? 何人もそう書いてるから聞くんだけど… コレクトする、ってんならまだわかるが、ガベージするって「ごみする」って わけわからん日本語英語言ってるわけだし。細かい話でスマソ。
>853 少なくとも俺の見聞きした範囲でそういう言い方をするやつは頭が悪い奴だけ。
856 :
デフォルトの名無しさん :04/02/22 11:28
すいません、、、、。 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 xpなのですが、買った書籍には2000の場合しかない。 xpのやりかたがわからない。それから、PATHが間違っている らしいのですが、何回も確認した。どうしてだ!?
>>853 俺も同じ理由でGCって呼んでる。
ちなみに、「ガベージ」じゃなくて「ガーベッジ」と発音してる。
>>856 > xpのやりかたがわからない。
Windows2000 と同じです。
> 何回も確認した。どうしてだ!?
諦める事をお勧めする。
インストーラをダウンロードして、 使用承諾で同意→カスタムセットアップの画面でインストール先 のディレクトリの変更はしなかった!! だからか!!?? またどっからやり直せばいいの?
>>856 >>1 のリンク先は読んだか?それでもダメなら、J2SDKをどこにインストールしたかと、
コマンドプロンプトでecho %PATH%した結果を貼り付けてみそ。
無線でやったからか、ダウンロードに30分もかかったんだよ。。。。。 捨てるのは正直めんどくさい。
>>860 読んだけど、「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
の原因自体がよくわからないよ。。。。
ええっと、コマンドプロンプトね、やってみるよ。ありがと。
>>857 俺も
ってか、初期の頃の本には
ガーベッジコレクションって書いてあった
。。。。。どうやってやるんだよ?!
>>856 javac.exeのある場所は分かる?ディレクトリ変更しなかったんなら、c:\j2sdk1.4.2_03\binあたりかな?
マイコンピュータのプロパティを開いて、詳細設定タブの環境変数ボタンを押して、
ユーザの環境変数の中のPATHを選択して編集ボタンを押す。
変数値の一番先頭に、「c:\j2sdk1.4.2_03\bin;」(セミコロン含む)と入れてOKしてみろ。
全部OKで閉じてから、コマンドプロンプトでjavacしてヘルプが出ればOK。
>>864 素直に諦めろ。
Java とかゆー以前のところで詰まってるから、質問自体が板違いだし。
ああ、3時間も席立ってないから疲れてきたよ。
>>865 やってみる。
C:\j2sdk1.4.2\j2sdk1.4.2\bin にいたよ。
>>868 なんかすごいとこに入れたんだな。そしたら、
>>856 のc:\j2sdk1.4.2_03\binを、
全部C:\j2sdk1.4.2\j2sdk1.4.2\binに置き換えてやってみろ。
書き忘れたけど、変数設定したあとはコマンドプロンプトを新しく起動しろよ。
>>867 >ああ、3時間も席立ってないから疲れてきたよ。
プログラマに向いてない。
せっかく教えてくれた人、ごめんよ。 なんかますます悪化したみたいだ。 環境変数のTEMPってやつを捨てちまったよ。。。 元に戻さないとまずいだろ・・・・・?
873 :
デフォルトの名無しさん :04/02/22 13:03
捨てる?環境変数を?
java以前にDOSの知識を覚えてくれ SDKベースで開発するには必須それがいやなら SDKと一緒にあったNetBeansを落としてくるべし レジストリからパス取得して自動的にSDKを引っ張ってくれる すでにSDK入れているのならNetBeans単体を落としてくるべし
コンパネ→詳細設定→環境変数→で、Adminのユーザ環境変数がデフォルトで 2つ入っていた。一つはTEMPで、もうひとつはTMP。TEMPを消しちまった。
話がぐちゃぐちゃになって悪い。 ねっとびーんずはデフォルトでついてきたが・・・。 ぶっちゃけ、Cもよくわからん椰子なんだよ。 DOSの知識がないとまずい、というのはいいアドバイスになった。
>>875 TEMPには、「%USERPROFILE%\Local Settings\Temp」と入れとけ。
もうそこら辺触るのヤバそうだから、
>>874 のNetBeansがいいかも。
>>877 すまん。。。。アドバイスはコピペしておいて、今日のところは
ノートでの設定は諦めるよ。
デスクトップはHello!!ができたからしばらくこれでいくよ。
ほんとにありがとな。(´・ω・`)
>>798 ステートマシンとはどんなモノなんすか??
ググってもどんな物かはよくわからなかったっす・・・
本にもなかったのでどうしようもないんす。
CardLayoutは本にあったので理解できました。
あ、ごめん ステートマシンっていっちゃうとハードの話が多いのかな 用は状態(ステート)での処理遷移ってだけのお話 よくたとえででてくるのは 自動販売機でジュースを買うときにどういう処理するかとかを図に書くとわかるかな この辺は電子計算機概論とかをみたほうがいいのかな ソフトだとステートパターンって単語の方がいいかな UMLのステートチャート図で検索してごらん
881 :
デフォルトの名無しさん :04/02/22 15:44
初心者です・・・ サーバ−クライアントのシステムを Java で作成したいのですが、 どの方法で実現するのがよいか迷っています。 Struts など、ブラウザを使ったシステムは、 GUI に問題があるので、 今のところ下記の方法を検討しているのですが、 それ以外に何かよい方法(簡単な方法)はありかすか? 基本的に GUI (クライアント)は、JavaWebStart で、 SWT を基本にして、データのやり取りは・・・ ・Servlet を使って、文字列(xml)を使う ・RMI を使って、サーバ上にメソッドを用意する ・J2EE ? 以上
>>882 あほか。RDB使うなんてどこにも書いてないだろ。
>>881 サーバがJavaプロセスなら、最初はRMIが一番簡単だよ。
単純なC/Sの仕組みならJ2EE必要ない。
RMI覚えてからJ2EEに逝くべし。そうでないと巷によくいる
「サーバーサイドJava=JSP」の大馬鹿PGになってしまうと
思われ。
>>881 2層式のクライアントサーバーシステムの話か?
3層式にみえるんだけど
俺は最初xmlを投げ合う独自フレームワークで実装した
ApacheSoap時代だがパフォーマンスがネックだったから
当時soapは時間が解決してくれそうだと思ったのだが
どんどん複雑化して環境依存しやすくなってる現状ではかえって使いにくい
ApacheAxisのjwsはシンプルでいいけどそれ以外の選択が厳しい
今はXML-RPCでやってる
Apacheのxmlプロジェクトにあるよ
これだとアプリケーションサーバー用意しなくてもできるし、
用意してサーブレットに実装も可能
テストするときはスタンドアロンでシンプルに出来るのがいいかもね
885 :
デフォルトの名無しさん :04/02/22 16:33
//"○○"型オブジェクトを作成 Object obj = Class.forName("○○").newInstance(); こんな感じで任意のクラスを作成した時に Object型ので参照しているので、objを実行型○○の型に キャストしたいんですが、何か良い方法はありませんでしょうか?
ごめんリンクは
>>881 じゃなくて882ね
RMIは今は無視していいきがする
配布はWebstart使うにしてもSWTってよく通ったね
2年前なら俺もSWT考慮したけど
開発しにくいことで今はSwingで決まりだわ
一人で開発するのならいいけど、チームでSWTは厳しいかも
うう・・・。場を和ませようとボケただけなのに・・・。
>>885 objectクラスという考え方ではなく
インターフェースもしくは抽象クラスを継承するべし
たとえば必ずexecuteメソッドをもってるとかして
そのメソッドを呼ぶべし
これがフレームワークって考え方
>>885 ない。コンパイル時に解決できることじゃないから。
普通にキャストしろ。
JFaceじゃなくてSWTって言っている時点で知識足りないです。 素直にSwing使いなされ。
>>885 最初から、MyClass a = (MyClass)Class.forName("○○").newInstance();
ってしとけばいいだけの話かな?はずしてたらゴメン。
>>888 あぁっ!なるほど中傷クラスを作成すればできそうです!
考え方が根本的に間違ってた。
>>889 20クラス程度が存在するので全部で場合分けするのは
面倒だったのですです。どうもありがとうございます。
>>886 EJB=RMIだよな。いや、最近流行のテヌキ3層システムで直接RMIを
いじることはないんだろうけどさ。
見事にはずした私を笑ってやってください。
>>891 説明足らずでした。すいません。
そのMyClassの場合分けが20種類程度あるってことです。すいません。。。
896 :
デフォルトの名無しさん :04/02/22 16:45
>>892 動的クラスロードまわりがわかれば
自作フレームワークの嵐になって開発速度、安定性がどんどんあがっていく
この部分を超えれれば問題なくjavaで喰っていけるよw
>>893 質問の内容もちとあれだったんで
EJB以前の問題かとおもってね
小規模低予算短期開発が多くなってる現状では
EJBの有用性も下がってる気がするしね
>>897 > 自作フレームワークの嵐になって開発速度、安定性がどんどんあがっていく
俺様フレームワークの嵐。。。
そんな PJ はいやだ。
> この部分を超えれれば問題なくjavaで喰っていけるよw
食っていけるのか? ネタ?
> 小規模低予算短期開発が多くなってる現状ではEJBの有用性も下がってる
禿げ同。EJB は金もスケジュールも人員も余裕ありありの場合に有効。
>>898 EJBが「余裕アリ」でないと有効でないって、要するに
安い単金では「JSPやServlet書くことしか知らない馬鹿」
しか雇えないからでしょw
>>898 俺様フレームワークじゃなくて
自社製フレームワークってことな
>>898 多分897の言っている「フレームワークの嵐」って、君が思っているほど
一つ一つが規模の大きいものじゃないんだと思われ。
クラスロードを管理する仕組み一つをフレームワークって呼ぶくらいだし。
まあ、そんなコードのメンテをドキュメントナシでさせられる羽目には
確かになりたくないけどさ。
>>900 よりひどいなw
日本企業製のサーバーサイドFWなんて、どこかで見たことのある仕組み
の劣化コピーばっか。
だいたい俺がいってるのは大規模じゃないし 小規模、それも開発者は5人程度までの話な 業務系プログラマってライブラリってなんですかとかもうだめぽなのもかなりいるからな そいつらを管理するときにどうしたらいいかってレベルのものだ ここでの回答側の人のレベルなら問題ないけど 質問側くらいのレベルでプロジェクトマネージャーですとかもうどうしようかと 少人数の技術の高いプログラマに全部負担くるとかそういったものは 今も昔もかわらんとおもってるし、下手すると使えないのが昔以上に量産されてるかも まぁ、劣化コピーでもそこそこ実用ならいいんじゃね? 使えないフレームワーク実装されるよりまし あとフレームワークはFWと略さない方がいいな ファイアウォールとだぶる
ファイアワークスですが何か?
>>903 > 質問側くらいのレベルでプロジェクトマネージャーですとかもうどうしようかと
PMにその類のスキルなんかいらんだろ。あるにこしたことは無いが。
その代わりに人、コスト、リスク、スケジュールの管理スキルが必須なんだから。
PM は PJ 内のアーキテクトを駒としてうまく使えれば良い。
その人 プログラマ兼 設計者兼 なんですわ RDBもよくわかってないし もうだめぽ
>>903 まーお前さんは PM を批判するくらいだから
人、コスト、リスク、スケジュールの管理スキルも
すごいんだと思うよ。
>885 instanceof 演算子を使えば可能。 Stringとそれ以外が混在するような状況まで想定するとやっぱ必要だよね
909 :
デフォルトの名無しさん :04/02/22 18:11
>>908 >888 の多態ではなく instanceof を勧める理由はあるのか?
お896 おはぐろ
>>911 、、、、、(´・ω・`)
もしかしてスレ違いなのかな。。。
使用するソフトって? ここはjavaだから環境はjavaって決まってるんでしょ? いってること違うかな?
うーん、サンプルコードをちょいちょい書き換えるだけで 動くものを探していたのですが、Visual J++とかはまでは 使いたくないので。 私はもしかしてとんでもない勘違いをしてるのかな?
実現できればなんでもいいわけか ここはjavaスレだからjavaでやることを考えると まずウインドウ作ったりボタンとかいろいろいじるのにswing 描画にJava2D この2つ勉強すれば作れる
>910 多態は呼び出すメソッドを統一できる時だけ有用です。 つか public final String をどう多態できるんですか?
>>916 String のソースから final 外して、
コンパイルしたクラスファイルを rt.jar に仕込む。
嫌すぎ。そんな設計する奴と組みたくねぇ。
配布とか運用まで考えて設計するもんだ
>920 保守もな。
finalを勝手に外したうそStringを作ったとして、 それを利用しているクラスAと 本物のStringを利用しているクラスBとの間で不整合が起きないか?
今時のjavaコンパイラはfinalメソッドを呼び出しても コンパイル時にメソッドを呼び出し側に展開することはない。 finalメソッドの展開はJITの仕事。final定数も同様。 だから924が心配しているような不整合はとりあえず起きない。 だからって多態のためだけに既成のクラスに手を入れるなんて 明らかに本末転倒だと思うけどな。
928 :
デフォルトの名無しさん :04/02/22 21:10
基本的な質問だと思いますが・・・ String key1 = "id"; String key2 = "flag"; String key3 = "value"; int id = 100000; boolean flag = false; String value = "モナー"; HashMap map = new HashMap(); map.put(key1, id); map.put(key2, flag); map.put(key3, value); ってな感じでキーを統一して、値にプリミティブ型やら オブジェクト型やら混在させた形で持ちたいんですけど、 何か良い方法はありませんかねぇ・・・ 現在はプリミティブ型だったら型を判定してラップ型に 変換してるんですが・・・
java.*パッケージのクラスを修正することはライセンス上禁止されているんだが…
>>928 回答じゃないが、Map から取り出した後、どうすんの?
一個一個、型判定すんの?
>>928 オートボクシングしたいってこと?
キーが決まってるならHashMap使わないでクラスにするとか
そもそも入れる型がわからないってことが設計としていいのか?
>>928 HashMapに実装を委譲したオリジナルMap作ればええんでわ。
class MyMap{
private HashMap impl = new HashMap();
public void put(Object key,int value){}
public void put(Object key,Object value){}
public int getInt(Object key){}
public Object getObject(Object key) {}
}
いっとくが、getを1メソッドだけにするのは無理だぞ。
コンパイル時に型解決されるJavaでは無理。
どうしてもそうしたいならPythonかRubyでもやってなさい。
>>929 そのとーり。
> You may not modify the Java Platform
> Interface ("JPI", identified as classes contained within the "java"
> package or any subpackages of the "java" package), by creating
っつーか設計云々言ってた奴は一回ライセンス読んでみた方がいーぞ。
Visual J#、Eclipse、JBuilderっていろいろあるけどどれ使えばいいか迷うんですが、 それぞれの問題点って何でしょうか?(・ω・)
935 :
デフォルトの名無しさん :04/02/22 21:32
>>930 >>931 //メソッド側での処理
Set keys = map.keySet();
Iterator i = keys.iterator();
int j=1;
while (iterator.hasNext()) {
//ここで型によって場合分け
if (iterator.next() instanceof String) {
stmt.setString(j, (String)iterator.next());
} else if (
stmt.setBoolean(
うまく書けないですし間違ってるかもしれないですけど、
上記に書いてるようなことがしたいですです。
設計が根本的におかしいかなぁ。。。。。。自信無し。
まぁつまりはPreparedStatementでSQLを自動で処理したいということですぅ。
936 :
デフォルトの名無しさん :04/02/22 21:34
自作のWebアプリにTomcatとHSQLを付けて配布したいんですが、これは ライセンス的に問題ないんでしょうか? もしダメなら、他にいいもの教えてもらえると助かります。
>>932 なるほどぉ・・・そういうやり方もありですね。
って、getを複数作成するなら労力としてはあんまり変わらないですね。。。。
>>937 ぉよよ?いいんでしょうか?。。。
なんかラップクラスを多用すると重くなると聞いたんで、
できればプリミティブ型のままでメソッドに渡したいなぁと
思ったんですが。。。 まぁそんなに変わらないのかな。。
>>938 重くなるなんていうけど、CPUバウンドの処理が重くなることが、あんたの作る
Webアプリの中でどの程度ネックになるのか分かって言っているのかYO!
どうせJVMについてたいした知識もないくせに、半端な知識を振りかざす馬鹿
中堅社員連中がそんなこというんだろ。寿命の短い、小さなオブジェクトの
生成なんて、GenerationalGCのVMならたいした負荷になんねえよ。
チューニングの基本中の基本:
必要ないならしない。可読性、実装の単純さが優先。
どうしても必要な場合に限り、出来上がってからプロファイルとってチュー
ニング。
>>939 スイマセン(;´Д`) 何も分かってない初心者ですので(;´Д`)
気分を害されたのであれば謝ります(;´Д`)
大変勉強になりました(;´Д`) 全部場合分けしてラップクラスで処理します(;´Д`)
どうぞお体をお大事に(;´Д`)ハァハァ
>>928 もう終わったかもしれないが。
>> なんかラップクラスを多用すると重くなると聞いたんで、
画像処理とかシグナル処理とかで
例えばint[ 1280 * 1024]とかは普通に使う。
これをArrayListに入れるからIntegerにしようとか
そういうことをやると重くなる。(から配列を使う。)
"多用"は数万とかそれ以上の時、
それ未満は誤差の範囲。
あれ?どこか外国でで、誰かがプリミティブ値専用高速 コレクションライブラリ作って公開いたような。探して 味噌。
>> "多用"は数万とかそれ以上の時、 数万とかをループの底で秒60回とか処理した時ってことね。
945 :
デフォルトの名無しさん :04/02/22 22:02
小林健一郎『これならわかるJava』の付録1(p.410)のパス設定の箇所に 関する質問です。 メモ帳のファイル名にC:\Autoexec.batとして開いたファイルで、 SET PATH =…… あるいは PATH=…… という行を探しすように、とあります。そして無い場合には、違う処理を するようにとありました。 SET CLASSPATHはあるのですが、これは別物でしょうか? SET PATH, PATHの行がないと判断して良いのでしょうか? 教えて下さい。
>>936 ライセンス条項について書かれたファイル(LICENCEとか)が
一緒に入っているので、読んでみたら?
俺は、ライセンスファイルを添付すれば配布は自由だと解釈したけど、
どこの馬の骨ともわからん奴の解釈を当てにするよりは自分で読んでみることを
お薦めする。
>>945 それはJavaじゃなくてMS-DOSの環境変数の質問。板違いと思われ。
>>941 画像処理の場合は、int[] の代わりに ArrayList を使うメリットが全く無いし、
ラップ、アンラップの回数は数万程度じゃ済まんぞ。
>>943 Jakarta Commons Collectionsにあったような。
配列はobjectだしそのままいれてやれば? 1つ1つラッピングする意味があるのか?
>>950 プリミティブ値の話だと思われ。
あれ?JDBCってどうせプリミティブを生で扱えないよね?
いーみなーいじゃーんw
>>952 おお、Jakartaに移動になっていたのか。
…Commonsって、しらん間に随分手を広げてるみたいだね。大抵の
ユーティリティはここで揃いそうだな。みてみよっと。
>>952 それでした。commons collectionsには無いですね。
959 :
デフォルトの名無しさん :04/02/22 22:36
ファイル名に使えない文字列を取得する方法はあるのでしょうか? OSごとに多少違うと思うのですが。 おねがいします。
962 :
デフォルトの名無しさん :04/02/22 23:34
はじめまして、Javaを全く扱ったことないのですが 勉強したいと思います。 初心者でも分かりやすいお勧めの本を 教えてください。 宜しくお願いいたします。
javaってアプレットじゃなくて、 普通インターネットにあふれているフリーゲームみたいなやつつくれないの? (サイトからダウンロードしてきて、インストールしてゲームするやつ) あれは全部VB?いまいちよくわからないからお願いします。 要するにJavaって何のためにあんのかわかんなくて。 ただ、一番知りたいのはJavaで本格的なソフトやゲームをつくりたいってことで。
>>963 出来ますよ。つうか今時アプレット作ってるやつは馬鹿。
javaはアプレットよりもうスタンドアロンアプリケーションやwebstartだろうな webstartもアプリケーションとアプレットあるけど アプレットで作る意味はあまりない javaはアプリ配布という意味では一応未だに最高レベルの環境かと
サーバサイドだろ。
>>963 >要するにJavaって何のためにあんのかわかんなくて。
>ただ、一番知りたいのはJavaで本格的なソフトやゲームをつくりたいってことで。
何のためにあるかわからないのに本格的なソフトやゲームをつくりたいってバカ?
この世のためにも死んだほうがいいよ。
>>967 サーバーサイド「だけ」は時代遅れ。
ユーザはリッチクライアントを求めている。
サーバーサイドがJavaなら、クライアントサイドもJavaアプリにするのが
親和性が高い。
つうことで、JWSでWebアプリのクライアントを作るようになる日は遠くない。
競合相手はFlash。
不特定多数のユーザーを相手にするにはFlashやWEBアプリかな ただし、開発効率とか問題ありまくりなので 細かい制御が多いと思われる社内のシステムとか そういった分野にwebstartや.netのノータッチデプロイ すべてWindowsが動いているところだとメリットは大きくないけど 社内に1,2台MacやLinuxがあるところはjavaのメリットもある まぁ、機能的にどれが普及してもいいんだけれども サーバーにLinux使ってるところもだいぶ増えてるので 相性のいいjavaという選択肢はわるくない
そういえばFreeBSDでJavaって激しく聞かないなぁヤパーリSolaris使ってるのかなぁ…
>>971 FreeBSD版ってあるの?Linuxエミュレータとか使うの?
正式なFreeBSD版かどうかはわかりませんが うちの大学ではFreeBSDにJAVA環境を構築 させられていますよ。。 ちなみにtomcat君との相性は最低でした。。 つかってるPCはリブレット君です
MacOS X でJavaやっている奴ならたくさんいるが、FreeBSDでやっているうちに入らないのかな?
>>973 相性が最低? なにかトラブルでもありましたか?
ちなみにFreeBSD、Java、Tomcatのバージョンなどは?
FreeBSD版Javaは相変わらず遅れをとってるようだが。 自分でmakeでコンパイルしてみては?
977 :
aaaaa :04/02/23 10:45
Java初心者です。 質問なのですが、 javamailをインポートしたいのですが、 import javax.mail.Session; ←これは大丈夫 import javax.mail.Message; ←これはエラー import javax.mail.Transport;←これもエラー と書くと、下の2つに、 「インポートjava.mail.Messageは、インポートされた 他の型と一致しません。」というエラーが出てしまい、 インポートできません。 どなたか理由を知っておられる方が おられましたらご教授ください。 よろしくお願いいたします。
978 :
デフォルトの名無しさん :04/02/23 10:52
>>977 JavaMailのjarはちゃんと組み込んでるか?
mailapi.jarとかいうやつだったかな。
979 :
aaaaa :04/02/23 10:59
mail.jarってのは読み込んでいるんですが・・・。
980 :
デフォルトの名無しさん :04/02/23 11:11
>>979 エラーが微妙に変だな。
> 「インポートjava.mail.Messageは、インポートされた
> 他の型と一致しません。」というエラーが出てしまい、
> インポートできません。
とあるが、javax.mail.Messageをインポートしてるんだもんな。
ソースの方も見直してみるといいかも。
●JAVAのバージョンは 1.4.1 ●TOMCATは 4.1.24-LE-jdk14 と書いてありますが・・・あってるかな?? ●FreeBsdのバージョン これはちとわからないんですが2年前にインストしました。 ちなみに相性最低な理由としてはTOMCATが突然動作しなく なるというバグがあるからです。WEB-INF/WEB.xmlの中身を 書き換えたとたん、ブラウザからlocalhost:8080すら開かなくなったり しました(汗 もちろんTOMCATの再起動は何度もスーパーユーザからしてもです(笑) かと思うと今度はOSを再起動したとたん正常に動作したり・・・そんなこんなで 私はわざわざWindowsで作ったものを文字変換し、FreeBSDに転送して使用 するようにしています。 (Windows側も念のためソフトのバージョンを上のものと一緒にしてます) さらに問題なのはWindowsではエラーがでないのにBSDではコンパイルエラー はかれたりします(ぇ
>>977 エラーメッセージをコピペしてみてくれん?
983 :
aaaaa :04/02/23 11:19
以下がエラーメッセージです。 java.lang.Error: コンパイル問題が未解決です。 インポート javax.mail.Message は、インポートされた他の型と一致しません。 インポート javax.mail.Transport は、インポートされた他の型と一致しません。 Message.RecipientType は解決できません。 メソッド send(MimeMessage) は型 Transport で未定義です。 at ExpensesFrame.<init>(ExpensesFrame.java:46) at Expenses.<init>(Expenses.java:79) at Expenses.main(Expenses.java:714) Exception in thread "main"
>>983 それって、実行時のエラーなの?
コンパイルしたときと実行時のmail.jarのバージョンが違うとかない?
アプリケーションサーバとか使ってたら、元々mail.jarが入ってたりとかしない?
jsp なんでないの
986 :
デフォルトの名無しさん :04/02/23 12:01
WindowsXP、JDK1.3.0です。 XMLファイルを書き出すメソッドを作成し、 出力パスを"c:\\"としたところ、アクセス権がないと言われました。 相対パスはいけるのですが、どうすれば解決できますか? これはWindowsの設定に問題があるのですかね?
988 :
aaaaa :04/02/23 13:05
>>984 コンパイルしたらこんなエラーが出ました。
あと元々、mail.jarは入っていませんでした。
で、mail.じゃあ入れて試したか?
//Kadai1a. java public class Kadai1a { public static void main(String a[ ]){ float width , height; width=2.0; height=3.0; System.out.print1n("The triangle area ="+width*height/2.0); } } この文にどこに誤りがあるのか教えてもらえないでしょうか?javaのところで聞いたら 別スレで聞けと言われたもので・・・お願いします。
print1n じゃなくて println
> width=2.0; height=3.0; float に double型の値を代入してる。 > System.out.print1n("The triangle area ="+width*height/2.0); System.out.print1n でなくて System.out.println ね。 あとはコンパイルエラーにはならんけど、 > public static void main(String a[ ]){ String[] a みたいな書き方が推奨されてる。
993 :
デフォルトの名無しさん :04/02/23 13:56
vbとvb.netの違いを教えてくれ。
994 :
デフォルトの名無しさん :04/02/23 13:59
//kadai1b.java public class Kadai1b { public static void main(String a{ }){ char c1 ='\101' , c2='\u0061'; System.out.print1n(''c1=''+c1+''c2=''+c2); } } a c1=\101 c2=\u61 b c1=H c2=h c c1=。 c2=\u61 d c1=h c2=H e c1=A c2=a 上の実行結果として適当なものをaからeの中から選んでくださいというこの問題が わかりません。お願いします。
e だろうけど 自分でコンパイルして実験してみたらどうよ?
996 :
デフォルトの名無しさん :04/02/23 14:02
>>992 ありがとうございます。printlnの部分は自分ミスです。
floatにdoubleの型を入れているということはfloatをdoubleに変えればいいのですか?
あとすみませんが994レスもお願いできないでしょうか・・・
>>992 どちらでも書ける以上、その人の書き方次第だ
NetBeansのデフォやsdkのデモとかString args[]だな
JBuilderやeclipseのデフォはString[] argsだ
1000 :
デフォルトの名無しさん :04/02/23 14:14
ありがとうございます 1000もゲットします
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。