1 :
名無しさん@お腹いっぱい。 :
2000/10/19(木) 21:56 Javaの単発質問スレが出来ては沈んでるのでここらで作っときます。
2 :
さっぱり分からん :2000/10/19(木) 23:48
appletviewerってどうやって使うんでしょうか?
3 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 00:36
4 :
さっぱり分からん :2000/10/20(金) 01:37
>3 ありがとうございます。 またまた質問してすいませんが、appletviewerを使って自分で作った .javaファイルを実行させるのってどうすればいいんでしょうか? JAVAを勉強しようと思って今日BlackBookのJAVAプログラミングって いうのを買ったんですが、この本では<applet>タグを.javaファイル のコードに埋め込んだ例題ばっかりで、appletviewerを使って実行 するらしいんですが、どうすればいいのかさっぱり分かりません。
よ~く本読んでみ。絶対載ってるよ。
6 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 03:09
IBM Java2 SDK1.3 for Linux ってどこから落とせばよいのでしょうか?
7 :
>2 :2000/10/20(金) 03:57
こんなんでスレが腐られても・・・ /*<applet~></applet>*/・・って埋め込んでるんでしょ? コンパイルは通ーってるんだよね。 だったらDOS窓で続けて・・・ >appletviewer クラス名.java で「Enter」押してみー、ウインドウズ以外は知らん。
やはり、沈む運命にあるようです。
9 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 06:39
10 :
>9 :2000/10/20(金) 07:13
逆だってば・・・
12 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 08:51
13 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 09:49
Frameに複数のCanvasを重ねて貼った場合、 この複数のCanvasの表示優先順位を後から変更する方法はあるんでしょうか? ↓こんな感じで。 +-----------------+ | +-----------------+ | | +-----------------+ | | | | +-| | CanvasA | +-| | +-----------------+ +-----------------+ | +-----------------+ | | |-+ | | CanvasB | | +-| | | +------------------+ | +-----------------+ +-----------------+ | |-+ | CanvasC |---+ | | | +-----------------+ | +-| | +-----------------+
14 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 13:16
なかった気がする。
某さらしあげスレの方が技術レベルが高いぞ。どうする気だ?
16 :
1 :2000/10/20(金) 16:06
17 :
>13 :2000/10/20(金) 18:10
setVisible(false) とかで出来ない?
18 :
13 :2000/10/20(金) 18:32
>>17 それも考えましたが、それでは「コンポーネント同士が一部重なり合う」場合には
対応できないですよね……?
思い違いだったらすみません。
>>14 どうやら無いみたいですね。今回のところは諦めます。
java.awt.Frame「hogeFrame」に
お互い重なり合ったjava.awt.Canvas「hogeFrame1」「hogeFrame2」を順に
貼り付けた場合の動作がOSによって変わることがあるので
(hogeCanvas1が前に来る場合とhogeCanvas2が前に来る場合がある)、
統一出来ないかと思って色々試していたんです。
どうやら「Canvasは重ねるな」と言うのが結論だったようですね。(笑)
19 :
>6 :2000/10/20(金) 18:42
ありがとうございます。にしてもDLが遅い...
20 :
名無しさん@お腹いっぱい。 :2000/10/20(金) 22:54
あまりJAVAと関係がないかもしれませんが、JDBC-ODBC-MDB(ACCESS)を使った場合。 DBのエンジンって何になるんでしょ? ORACLEならORACLEのDBエンジンなんでしょうけど、MDBはだれが検索かけてるの??
>13 javax.swingでJFrameとJPanelかなんかでやればできるはず~。 awtのCanvasだとできませーん。
22 :
>18 :2000/10/20(金) 23:56
プロパティ見て、OSで場合分けしましょう。 "Write Once@` Debug Anywhere"の世界にようこそ(笑)。
23 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 00:11
>>20 Java -> JDBC -> ODBC -> JET -> .mdb
24 :
>13 :2000/10/21(土) 03:13
諦めた後でなんですが、 frame.add(canvas@`0) でできませんか?
25 :
PG :2000/10/21(土) 19:10
>13 remove して add し直す。 独自の layout クラスを作る。
26 :
>24@`25 :2000/10/21(土) 22:09
どうやったってコンポーネントが重なったときの動作は AWTでは「不定」なんだから 「汎用性(移植性)がある」という条件がついたとたんどれもダメジャン つか、SolarisのCDEでコンポーネントが一部重なったら かたっぽが完全に消え去ったことがある
27 :
名無しさん@お腹いっぱい。 :2000/10/21(土) 23:05
Swingで作るしかないのかな? がんばってJavaアプリを普及させましょう。
Javaでスタンドアロン環境でのアプリケーションは Java使う意味がない気がするが…
>>28 モジュールが機種依存しないというのはメリットにはならない?
確かにユーザーに対するメリットにはならないかも知れないけど。
ネスケ6が普及してくれれば、JREもそれに伴って普及するんだけどな……。
頑張れNetscape。
30 :
13 :2000/10/22(日) 00:35
結局、 「機種依存せずにCanvasの表示優先順位を変える」のは、 22さんの方法と24@`25さんの方法を組み合わせれば「一応」出来なくはない、 と言ったところのようですね。 ただ、26さんの指摘した問題はありますが。 で、特に今回はWindowsとJBrendでの動作の違いが問題になってたので、 Swingは使えなかったんです。 皆様、ありがとうございました。
31 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 01:00
相談というか質問なんですがJAVAは遅いといわれていますが 具体的に何がどう遅いんですか?
32 :
24 :2000/10/22(日) 01:07
あれ、(重量)コンポーネントが重なった場合って「不定」だったの? グラフィックJava2 Vol.2 Swing編<上>の64ページにZオーダーの記述が有ったから、 てっきりどっかで規定されてると思ってたい。 ありがとう。勉強になったよ。
>>31 Javaのプログラムの実行速度が,ネイティブコードのプログラム(Windowsならexeファイル)と
「比較すると」遅いんです。
ただJavaをJavaの不得意な用途に使うから処理速度(というよりスループット)
が問題になるわけで,
ちょっと遅くても構わない用途に使うなら,何の問題もありません。
JITコンパイルしたあとなら、処理自体は大して (問題になるほどと言う意味で)変わんない気がする。 問題はイニシャライズ時のバイトコードロード →コンパイル→実行までのスピード。 あと、GUI関係ってすっげー遅い気がする。 マシンの性能によっては、GUIアプリは立ち上げまで 5分10分掛かるのとかあるぞ。某IDEとか。 …でもそんなのって、マシンの性能上がっていったら どうでも良くなっていくんだろね…
35 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 03:33
実際にプログラム書いてみると、コードそのものの速度はそれほど気に ならない。むしろVMのロード時間とGUIの表示系の遅さの方が気になるね。
36 :
35 :2000/10/22(日) 03:40
>>34 でもPen3の800MHzとかでもまだ「おっせー」といらいらする速度だからねぇ。
「どうでもいい」レベルになるのはいつになる事やら。
>36 数年後に10GHzオーダのマシンが出る頃には、 問題ではなくなってるんじゃないだろか。 その頃にはブロードバンド化が進んで、一般家庭で 10Mbpsとかの通信環境あるだろうし。 Applet(の類似技術)が再び日の目を見る時がくるはず。 分散環境3・4層アプリのクライアントでAppletためしに 使ってみるという仕事も最近だんだん増えてきてるみたい だし。 と言うことで、数年後を見越してJavaやっとくのが吉。 つーか、例え実践で役立たずだとしてもOOPの勉強にJava やっとくのは吉だと思う。
38 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 04:06
あのソケットライブラリは楽だ。 HTTPプロトコルを標準でサポートしてくれてるし。 あ、でもそれだけだと手軽さとFTPでRubyにまけるな。(藁
39 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 06:37
昔は awk や csh もワークステーションで「おせー」とか 言ってなかった?今じゃパソコンで Linux 入れてサクサク だからな。スピードなんて数年後には全然気にならなく なるんじゃねえの?
40 :
>39 :2000/10/22(日) 13:56
多分そうなるでしょう。 問題はそれを口実にして無駄な処理を平気でさせる 厨房プログラマーです。
41 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 15:55
中3でJavaやってる人ってどれくらいいるんだろうか.....
42 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 16:17
>41 少ないんじゃないかな。 たぶん厨房だと速いマシンがないから、Java じゃなくて C++ とかよく使うのでは?
43 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 18:47
>23 Thanks! JETなのかぁー なんかなぁ
44 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 20:43
1GhzのAthlonが3万円台で買えるから、Javaアプリの普及も 案外近いかも。
45 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 21:17
サーブレットのよい本ないですか? JAVASERVLETって本を買ったんですけど、 ちょっとサーブレット初心者にはむずかいしかった・・・
46 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 21:21
>44 Windows のシェアが大きい限り無理なんじゃない?
47 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 21:39
Linuxが台頭=>WindowsとLinux両方動くアプリが必要=>KylixやJavaが 延びてくる というのが理想的かな?
48 :
名無しさん@お腹いっぱい。 :2000/10/22(日) 21:52
>>46 さっきのNHKの番組見た?
中国でLinuxばらまいてるから
そのうちトップシェアになるかもね
49 :
名無しさん@お腹いっぱい。 :2000/10/23(月) 00:37
>>45 本当に「サーブレット初心者」ですか?
Java初心者とかプログラミング初心者とかじゃなくて?
そのへんははっきりといっておかないと多分求めているのとは違う
答えがつくことを予言しましょう。
Javaのプログラム経験がある人なら、init()がどういうタイミング
でよばれるのかとかインスタンスの寿命が...とかそういう具体的な
疑問がでそうなもんなんだけど。
50 :
24 :2000/10/24(火) 02:31
>>13 >>26 >>30 いまさらだが、同一コンテナ上のコンポーネントの重なり規定は、
AWT1.1からだそうだ。(JDK1.2だっけ?)
コンテナ上に最初にaddされてるのが手前に来るとあったぞ。
from グラフィックJava2 Vol.1 AWT編@立ち読み
沈んでいくョ~
52 :
名無しさん@お腹いっぱい。 :2000/10/26(木) 18:27
JBuilder 3.5 の無料版でアプレットを作ったのですが ブラウザ(JavaPlug-inはインストール済み)で表示すると 「読み込み中-Javaアプレット...」と表示されたまま 返ってきません。 無料版は「配布ウィザード」というのが使えないので これが問題なのでしょうか?
53 :
覚え書き :2000/10/26(木) 18:49
JIT コンパイラーをオンにしているとスタックトレースにソースの行番号が出力 されませんので、JIT は開発中はオフにするのが良いです。 オフのやり方。 JDK1.1.7 くらいは > java -nojit Test JDK1.2 は > java -Djava.compiler= Test
カットシステム社発行の「UMLを使ったJavaデザインパターン」 という本買ったけれど最低。 サンプルコードの改行やインデントすらまともに出来てない始末。 翻訳も直訳的で意味不明。 例えば以下の記述はあるパターンの概要を説明したものなんだけれ ど、どのパターンのことだか分かりますか?(P56より抜粋) 「データとインタフェースを介してそれらのインスタンスにアクセス することになるクラスとは独立している他のクラスのインスタンス によって提供されるサービスを使用するクラスを保持する」
55 :
るぶら :2000/10/27(金) 14:06
ここに来るようにいわれました。 hashCodeでもらったハッシュキーから対応するオブジェクトを引いてくるには どうしたらいいのでしょうか
>>55 その質問をするに到った動機を今後の参考の為に教えて下さい。
57 :
るぶら :2000/10/27(金) 14:58
JAVAのオブジェクトとC++のオブジェクトを対応づける ために、レジストリ(mapを用いた簡単なもの)を用いているんですが、 そのときにJAVA側はハッシュキーを使っているので、 C++オブジェクトから対応するJAVAオブジェクトを引いてくるのに ハッシュキーに対応するオブジェクトをもらうにはどうしたらいいのかな と思ったわけです。
58 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 15:15
Javaを勉強し始めたばかりだから期待に添えないんだけど、 Hashtableじゃダメなの?
59 :
るぶら :2000/10/27(金) 15:21
それはHashtableをつかってhashCodeの返り値と対応するオブジェクトを マップするってことですか そうするしかないのかな
別スレ読んだ感じだと、要は逆引きしたいんでしょ? でも、ハッシュ関数は通常一方向で衝突するし、 リンク先でStringの実装を見たけど、ハッシュ値だけからの逆引きは不可能。 ハッシュ値と、対応するオブジェクトを識別できるもの(アドレス)を 対にして、リストかなんかで管理するのが普通の使い方じゃないの?
61 :
60 :2000/10/27(金) 15:26
あ、それがHashtableなのかな? java知らないんでごめんね。
>>JAVAのhashCodeというメソッドは内部アドレスを整数値に変換して >>オブジェクトのハッシュ値を返すものですよね? そうとは限りません。例えば String s1 = "ABC"; String s2 = "ABC"; ならば s1.hashCode() == s2.hashCode() です。
63 :
るぶら :2000/10/27(金) 15:51
そうなんですか大変参考になりましたありがとうございます。 やはりマップをつくろうと思います。
64 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 16:22
((Object)s1).hashCode で実用上OK?
65 :
64 :2000/10/27(金) 16:26
はう バカ丸出し(TT 鬱だ氏のう
66 :
PG :2000/10/27(金) 16:36
>54 日本語的に何の事やら。あーさっぱりだ。
ハッシュコードとハッシュドビーフってにてる。
ハッシュ値の話の流れで若干気になったのだが、 基本的にハッシュ値は配列の添え字として使うという点は わかっているのだろうか。
69 :
名無しさん@お腹いっぱい。 :2000/10/27(金) 21:42
Web帳票を作ってる(使ってる)方いますか? お勧めがあったら教えて下さい。
70 :
るぶら :2000/10/27(金) 21:55
ちょっと間違ったこといっていたのでので訂正すると JAVAのオブジェクトとC++のオブジェクトを対応させるために JAVAのオブジェクトのhashCodeをキーとしてC++のオブジェクトのマップを C++の方に持ってて、JAVAの方からは対応するC++のオブジェクトが持ってこれるんですが。 C++のオブジェクトから対応するJAVAのオブジェクトを引いてきたいというわけです。 それで逆にC++のオブジェクトをキーとしてhashCodeのマップを作って 対応するJAVAのオブジェクトのhashCodeを持ってくるとこまではいいんですが hashCodeから対応するJAVAのオブジェクトを取ってくるときに hashCodeと対応するJAVAオブジェクトのHashtableを作るのいいのかなということです。 そもそもJAVA側のオブジェクトの決定にhashCodeを使っているのがいいのかどうか わかりません。
ややこしい・・・。 あんた、SEには向いてないな。
SEのあなたならどうしますか?
73 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 01:13
SEはプログラムについて語ってはいけません。
74 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 03:00
SEは客からいくらぼったくれるかで評価が決まります。
アルファベット全角で書くな
×:SE ○:SE
77 :
名無しさん@お腹いっぱい。 :2000/10/28(土) 19:34
スペシャルトピック +アルファベットは全角で
78 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 03:04
つか、るぶら氏は 「ハッシュコードはそもそも対象となるキーを一意に識別するための物ではない」 って事をまだ理解してないんでない? ~~~~~~ 詳しくはその辺のアルゴリズムの本を見てみれ。
79 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 03:06
Frote 4J CE と Swingのサンプルを実行しようとすると「メモリ違反です。」という エラーメッセージが返ってくるのですが・・・どうしてなんでしょうか? Win98SE特有のエラーなのか、ハードウェアの相性問題なのか分からないんです。
80 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 03:29
81 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 04:12
98で使いたいんです。Linuxで動くのは確認しました。
82 :
るぶら :2000/10/29(日) 04:38
78さん< 確かにそうなんですが、C++のほうでJAVAのオブジェクトとC++の オブジェクトの対応を管理しようと思ったら、JAVAのオブジェクトを決定する なにかいい方法ありますか
83 :
79.81 :2000/10/29(日) 07:29
エラーメッセージ書くの忘れました。 「JAVA VMのプログラムカウンタの~」だったと思います。プログラムカウンタって 何でしょうか?
84 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 10:07
だれかJavaVM仕様勉強して、バイトコードのチューニング やってるって人います?実際に効果ありますか? 勉強初めてみよっかと思ってるんですが、ちょっと見た ところだと、メソッド単位のチューニングくらいしか 出来ないような気がするんですが、それが癌だったって ことは多いんですか?
このスレを見ていると、ひろみちゅの気持ちが分かるね
87 :
出張Jハウス :2000/10/29(日) 13:31
>ちょっと見たところだと、メソッド単位のチューニングくらいしか どの程度ちょっと見たのでしょうか。あいまいでは困りますね。 まず自分がどこまで調べたのかを示すべきでしょう。
ごめん、ネタじゃないっす。 >87 バイトコードを逆アセンブルしてアセンブラコード 読んでるところです。 もしかしてそんな事やってるくらいならクラス設計の勉強 先にした方がいいのかとか思って。
89 :
出張Jハウス :2000/10/29(日) 14:49
90 :
88 :2000/10/29(日) 15:26
>89 おお、ありがとうございますです。なんせJavaはじめて半年の しろーとなので、ひろみちゅ殿の底力とやらがわかるのは随分 先になりそうですけど。。。 今のところは、オーム(オライリー)のJavaVM本で推薦してる D-Javaで逆アセンブルしたJasminソースみてるんですが、もっと お勧めパターンとかあります? それにしても、なんでJDKにはjavap程度のものしかないんで しょう?
91 :
出張Jハウス :2000/10/29(日) 15:37
C&プログラムの知識が相応にあり、VMにどっぷりつかりたいなら、 kaffe(フリーの)VMを解析してみては? ただこのあたりは、研究にはよいですが、実用(=仕事)にはあまり役 に立ちませんよ。(VMを作るのでなければ)
92 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 15:50
JAVA始めて半年…バイトコードのディスアセンブル…なんか私は君を 知っているような気がするが...ま、がんばれや
93 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 16:50
javaって中国語でなんと言うのでしょうか 邪婆じゃあんまりだし
Jハウスって何ですか? JeNnYちゃんハウスby株式会社タカラ?
ハウスジャワカレー
96 :
88 :2000/10/29(日) 18:44
>91 別にVM自体を勉強するつもりはないですー。 VM作るなんて、そんな根性無いですし。 ただこれからJavaでお仕事するに当たって、バイトコード 読めるようになる事や、チューニングかませるようになる事が 役に立つ事あるかなあと思って。 考えたら、classファイル読めるのは便利な気がする。 挙動不審なカスソースが他者からjarでclassファイルだけ提供 されるなんてのは、これから日常茶飯事になってくだろうし。 チューニングで高速化なんてのは、Javaで今更そんな事 する意味がないような。そんなのが必要ならはじめからJavaなんか で組むな、って気がするなあ。(但しこれから数年に限っては、 実行スピードがちょっとでも上がるなら有益かな)
97 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 18:50
Decompilerというのを知らんの?
98 :
88 :2000/10/29(日) 18:59
>97 知りませんでした。 あーそうですよね。このレベルでディスアセンブルできる くらいならデコンパイル簡単ですよね。89のページいけば あるかな。
Mochaを手に入れました。 有難うございました。
100 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 20:05
mochaとか手ごろですね。フリーだし。他にもいろいろあります。 ただし完全にはソースを生成できないケースもあります。 (mochaは今となってはいまいちかも)
>>95 「ジャワカレー」はハウス食品(株)の登録商標(第2084565号)ですが、本メイリングリストとは関係ございません。
102 :
名無しさん@お腹いっぱい。 :2000/10/29(日) 22:58
思うのだけれどなぜ JavaHouse ネタが多いんだ?
T氏にJHで凹まされて、2chで憂さばらしをしている病人がJAVAスレを見るたびに 凹まされたことを思い出して書かずにはいられないのだよ。 基本的に独り善がりの病人だからこっちに実害がない限り無視しておくのが1番だ。 つーか、JHネタをチラッとでも書くとその、怨念君が寄ってきてこのスレ 壊そうとするから無視しておいてくれ。
104 :
79.81 :2000/10/30(月) 01:03
お礼遅くなってすいませんでした。84さん、無事解決しました。一応JHの方は 探したんですが、ハード面ばかりに目がいってて・・・ありがとうございました。
105 :
名無しさん@お腹いっぱい。 :2000/10/30(月) 04:22
>104 スペシャルトピックにあるんですが…Jハウスで質問しなくてよかったですね。 ところで、なぜスペシャルトピックを読まなかったのか今後の参考のために 教えてください。藁藁藁)ひろみちゅ@Jハウス代理人
106 :
名無しさん@お腹いっぱい。 :2000/10/30(月) 17:56
ひろみちゅ萌え~
107 :
初心者 :2000/10/30(月) 19:53
初めてかきこみいたします。 質問ですが、WinとMac共に動作するJAVAアプレットを 作りたいんですが、その場合文字フォントは何を指定すればよいのでしょうか? すみませんがどなたか教えてくださいませ。
>107 文字フォントは指定する必要ないよ。 デフォルトでおっけー
109 :
名無しさん@お腹いっぱい。 :2000/10/31(火) 03:11
アスキーのグラフィックJava 2 Swing編を買った人に質問です。 APIドキュメントとどう違うのか教えてください。 煽りじゃないです、買おうかどうしようか、結構悩んでます。 サンプルコードの豊富さは、ちょっと立ち読みしただけでも十分分かったんですが。
EVAフォント(笑 なんかどきどきする
112 :
名無しさん@厨房って言わないで :2000/10/31(火) 23:46
最近Java始めました。 インストールは完了したんですがクラスパスを通すところで困ってます。 方法としては jdkTool -classpath path1;path2... って方でやりたいんですけど、 java -classpath path1 って書きたいんですけど 肝心の path1 の部分をどう書いていいのか分かりません。 マニュアルみたいなのをDLして読んだら .class の名前って書いてあったけど それすら意味不明です。一応それっぽい物を書いたけど上手く動きません。 インストールは C:\jdk1.2.2\ 以下にしてあります。 なんて書くのか教えてください。
113 :
名無しさん@お腹いっぱい。 :2000/11/01(水) 00:06
set CLASSPATH=paht1;%CLASSPATH かな ちゅうか環境設定て面倒なのに、いまいち記憶に残ってない
114 :
名無しさん@お腹いっぱい。 :2000/11/01(水) 00:13
>>113 環境変数CLASSPATHは本当に必要なとき以外は設定する必要ないよ。
>>112 もしパッケージの指定してなければ、hogehoge.classのファイルが
おいてあるディレクトリをpath1に指定すればおーけー。あとの
必要なAPIが入っているclassは指定しなくても勝手にjavaが探してくれる。
115 :
112 :2000/11/01(水) 00:58
hogehoge.classって何ですか? HDをサーチしたけどありませんでした。 >環境変数CLASSPATHは本当に必要なとき以外は設定する必要ないよ。 ってことはクラスパスじゃないかも具体的に困ってることを書いてみます。 java インタープリタで実行した場合こんなエラーが出ます。 Exception in tread "main" java.lang.NoClassDefFoundError: てっきりクラスパスをセットしてないからだと思っていたんですけど、これってどうしたらいいんですか? それまで作ってたアプレットのプログラムは動きます。 アプレットじゃない奴(普通のプログラム)を作ったら全然動きません。 このプログラムもプログラム的にはあってるはずです。 Javaの解説してるサイトで拾ってきたのもなので・・・ 教えてください。
116 :
>115 :2000/11/01(水) 01:32
118 :
名無しさん@お腹いっぱい。 :2000/11/01(水) 01:59
119 :
112 :2000/11/01(水) 06:58
教えてくれた方々どうもありがとうございました。 動きました。 基本的にクラスパスの意味を間違ってました。 てっきりJavaをインストールしたフォルダか何かを指定するものだと思ってました。 実行するプログラムのパスを指定するんですね。 hogehogeの意味も分かりました。 どう間違っていたかも書いておきます。 Javaインストール先:C:\JDK1.2.2\ プログラム:C:\hogehoge_folder\hogehoge.class 修正前: java -classpath C:\JDK1.2.2 C:\hogehoge_folder\hogehoge.class 修正後: java -classpath C:\hogehoge_folder hogehoge
120 :
満忠 :2000/11/01(水) 10:17
VBは勉強になるよね。
クラスパスクラスパスルルルルル
123 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 10:52
すんません・・・ 1からJAVAを勉強するのにおすすめの本を教えてください。 当方プログラム初心者・WEBデザイナーです。 最近はWEBデザイン・JAVA・CGIできる人という求人が多くて困ってます。 CGIはちょっとだけわかるんですが、JAVAは全くお手上げです。 よろしくお願いします。
125 :
>123 :2000/11/02(木) 12:50
>当方プログラム初心者・WEBデザイナーです。 最近はWEBデザイン・JAVA・CGIできる人という求人が多くて困ってます。 自称Webデザイナー? >WEBデザイン・JAVA・CGI これって完全にWebプログラマーの領域でしょ? デザイナーに求める事じゃないと思うけど・・・。 まさか、JavaAppletアニメ-ションのスキルを求めてるの?
126 :
123 :2000/11/02(木) 18:05
>125 うん、そうなんだけど、当方SOHOなんよ。 んで、SOHOだとそんな求人が多いんだな。 でも、前に某制作会社に面接に行ったら、 今からはWebデザインができるだけじゃあね~、 HPだけだったら誰でもできるようになるから プログラムできないと仕事ないよ、って 言われたよ。 そんで勉強する気になった。
127 :
123 :2000/11/02(木) 18:08
>125 デザインだけやってられるなんていい環境だね。 小さな会社はなんでもやらんといかんのよ。 >124 英語やんけー。日本語の本お願いします。
128 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 19:30
JavaアプレットとMDB連携させたことある人いませんか? JDBCドライバは何使いました?
129 :
飲む打つ買うさん :2000/11/02(木) 20:06
蛇歯ってヤフーのゲームしか見たことないのですけど、 それでも未来は明るいのですかね。 アプリは見たこと無いし。
>>129 ServletでXMLでウェブアプリってのが流行ってるよ。
XML対応度はJavaは一歩先んじてる。
131 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 20:32
>>123 ProjectKySSの人たちが書いている本や連載はXMLの勉強にはなりそうだ。
132 :
名無しさん@お腹いっぱい。 :2000/11/02(木) 20:55
>>127 何でもやらないといけないんならなおさら英語やらんかい。
>>129 君の知らない部分に使われてるんだよ。案件は多い。
133 :
125 :2000/11/02(木) 22:05
>123 まぁ、今までHTML知ってるってだけでWebデザイナーとして 食っていけてたのが不思議(奇跡)だったんだよ。 これからは余程のセンスを持った人以外は厳しいだろうね、 Webアーティスト(笑)みたいな感じかな、残るのって。 ハッキリ言って、デザイナーとプログラマは全然別物ですよ。 もう一度、白紙に戻して仕事を選択してみた方がイイのでは?
134 :
>125@`132 :2000/11/02(木) 22:20
??? 123は現実にWebのデザインとJavaの能力を要求されてるんでしょ。 何にこだわってるのか知らないけど、それくらい別に不可能なことではないよ。
135 :
>123 :2000/11/02(木) 22:23
そのJavaってJava Scriptの事だったりして。 間違える人って本当に多いからねぇ。 うちの上司なんて何度指摘しても間違える。
>125@`132 → >125@`133 でした
ピアソン社の 「BruceEckelのJAVAプログラミングマスターコース上・下」 はお勧め。 でも、全くの初心者なら2冊目以降に読んだようがいいかも。
138 :
125 :2000/11/03(金) 00:13
>136 別にこだわってないし、不可能な事だなんて一言もいってない。 ただ向き、不向きを見極めた方がいいのではと思っただけ。 まぁ、Sunの日本語ホームページ見つけられないのが SOHOで(Javaの)仕事受けるのは厳しいんじゃないの?
139 :
109 :2000/11/03(金) 02:21
誰か応えてください…
140 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 02:24
141 :
123 :2000/11/03(金) 07:01
>125 すんません、日本語ページがあったんですね。 ありがとうございました。 よければ、いい本を・・・。
142 :
123 :2000/11/03(金) 07:04
ううう、英語だぁぁ・・見つからん・・・
143 :
123 :2000/11/03(金) 07:53
あった!ありがとう。 でもね、この世界でフリーであっていくには 今後はプログラマーはデザイン、デザイナーはプログラムを 勉強していかないとやってけないんじゃないかなーと 思うけど、どうかな?
144 :
>143 :2000/11/03(金) 09:41
Web系プログラマならそうかもね
145 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 07:11
Javage
146 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 15:27
staticなインナークラスの有効的な活用方法ってなんですかね?
147 :
146 :2000/11/04(土) 15:37
ちなみに僕は、あるクラスのテストはそのクラスの staticなインナークラスでやる事にしてます。 public class Hoge{ private int f(){ return 1000; } static class HogeTest{ public static void main(String[] args){ System.out.println(new Hoge().f()); } }
↑ あ、}が1つ抜けてた。 逝ってきまーす。
>>148 >逝ってきまーす。
逝ってこい。(泣)
150 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 19:34
IEDなにつかってまますか? Fote :が何故か入力できなかった Jbuilder :とろい VAJ :英語はいいとして、使い方がさっぱり。コンパイルすらできない ちゅうわけで、おさるはエディタに帰って逝きました
JDE使ってる人はいないのけ? どこぞでWin環境でUNIXコマンドとかWin用Emacsとかを インストールして無理やり使う事を宣伝してるみたい だけど。
152 :
ガイシュツさん :2000/11/05(日) 22:19
WinMEでJavaやろうと思ってるんだけどどう?
153 :
名無しさん@お腹いっぱい。 :2000/11/05(日) 22:57
どうってどうよ?
154 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 00:15
JEDIT
155 :
???????????????B :2000/11/06(月) 00:20
DOSのエディタ+DOSプロンプト
156 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 00:45
bash + vi + jdk
157 :
>152 :2000/11/06(月) 00:49
MEってDOSプロンプトあるの? おしーえてーおじいさーん おしーえてーおばあーさん
>>152 Javaは辞めとけ。
時代遅れ。C#に負ける。
それよりもC#に対抗してJavaScriptってのが新しく出たんでそれを覚えろ。
特にJavaScriptはWinMEに最適化されているのでJavaよりも速いらしいよ。
組み方次第ではCより速い?!
159 :
>158 :2000/11/06(月) 01:05
JavaScriptって?? あのJavaScriptとは違うの??
160 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 01:07
xyzyz+jdk+dos窓 Win98で使いやすいシェルない? bashきぼーんぬ
161 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 01:35
>160 プログラム書く人がWin98使ってちゃいけません。 素直にNT系(NT4.0,2000)使うように。
163 :
>160 :2000/11/06(月) 02:31
痛い、痛すぎるよ 騙りにしたところで余りに痛いよ。
>164 何を言ってる?ネイティブコードで動くJavaScriptが先週発表されたのを知らないのか?
166 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 04:14
Cygwinってwin98だと安定性がいまいちでは… NT+Cygwinがよろしいかと。
>>165 ネイティブコードの奴ってXMLだろ?
CSSってのは機械語コードらしいよ。
168 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 14:36
>165 いやぁ、ホントに板井(ヤオ
>158@`165 煽りなら煽り、で そのマユツバな情報の出所を貼り付けてくれ… もしかしてJScript.NET(だったっけ、違ったらゴメン(^^;) のことをおっしゃってるのかしら?
170 :
名無しさん@1回転 :2000/11/06(月) 15:02
間違いage
>169 165のmailto:を見よ。
173 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 23:42
すみません、質問です。 interfaceってpublicメソッドしか定義できませんが、その理由はなんなんでしょうか? protectedメソッドくらい定義できて良さそうの思えるんですけど。 隠蔽したいメソッドがpublicになってしまってとてもキモチワルイ……。 1、publicメソッド以外を定義する必要がない 2、publicメソッド以外を定義できたら問題が生じる 3、その他 ……お判りの方、おられましたらご教授ください。
>>173 文法上の決まりです。
素直に受け止めましょう。
175 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 23:48
くだらない質問ですけど、JAVAってどれくらいの事ができるようになったら人様に「JAVAできます」っていますか?
176 :
名無しさん@お腹いっぱい。 :2000/11/06(月) 23:56
>>173 public interface Hoge {
public void methodA();
protected void methodB();
}
とかなってた場合、パッケージ外からのインプリメントで矛盾が生じるからでは?
(protectedメソッドを実装できない)
確かに、
protected interface Hoge {
protected void methodA();
protected void methodB();
}
くらいのコードなら許してくれても良さそうな気はしますが。
(見当外れのこと逝ってるかも知れないがご容赦)
177 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 00:03
>>173 逆に、隠蔽したいメソッドをinterfaceに定義しなければならない必要性
って、例えばどういうのがあると御考えですか?
それともひょっとして、interfaceに定義していないメソッドを実装する
ことは出来ないなんて誤解をされてませんか?
178 :
名無しさん@お腹いっぱい。 :2000/11/07(火) 00:23
protectedというと、自分の派生クラス間でのみ使用できるメソッド ということなのかな。でもそれなら頭のクラスで普通にprotected メソッドにしておけばいいじゃん。
ひでぶ。また誤字だ。
181 :
173 :2000/11/07(火) 00:30
>174@`176@`177 お答えありがとうございます。 なんか設計ミスのような気がしてきました……。 私がやりたかったのは、同じinterfaceを継承する複数の関連しあったクラスを 別のクラスで一括コントロールするという場合です。 で、外からはコントロール用クラスをいじるだけで複数のクラスを 操作できるという。 喩えて言いますと、 ・「指」インタフェースを継承する「親指クラス」を初めとする複数の「指実装」クラスをコントロールしたい。 ・「どれか指を動かすとそれにつれて別の指も動いてしまう」のを実現したいので、 指を全て管理する「手」クラスを用意し、指の動きは全て「手」クラスを通じて操作したい。 ・そのため、「指」インタフェース継承クラスは同パッケージの「手」クラスからのみ操作できるようにしたい ……ってな感じです。 やっぱなんか勘違いしてますか?
182 :
177 :2000/11/07(火) 00:41
>>・そのため、「指」インタフェース継承クラスは同パッケージの「手」クラスからのみ操作できるようにしたい >>……ってな感じです。 それならば、「指」インターフェイスを実装するクラスを無修飾(publicの付かない) クラスにすればいいではないかな? それならば該当クラスは他のパッケージからはアクセスできないので、当然publicな メソッドにも他のパッケージからはアクセスできません。
183 :
173 :2000/11/07(火) 00:53
>>182 なるほど、ありがとうございます。試してみます。
でもやっぱ他のパッケージからアクセスできないメソッドに
「public」修飾子が付くのはキモチワルイですが……。
184 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 17:30
JAVAで作ったチャットのコードってどっか落ちてないすかね? 参考までに。
186 :
名無しさん@お腹いっぱい。 :2000/11/08(水) 18:00
>>184 JAVAチャットって、アプリ? CGI経由のアプレット?
アプリだったらサンプル見るまでもなく簡単に作れるっしょ。
アプレットはどこかにあったのを試してみたことあります。
どこか思い出したらまた書きますわ。
188 :
初学者 :2000/11/08(水) 23:44
以下のコードについて、"Child"という出力を期待したのですが、 "Parent" という結果が返ってきました。jdk1.1.7です。 class Parent { String str="Parent"; public String getStr(){ return str;} } class Child { String str="Child"; } class Main { public void main(String[] args){ Child ch = new Child(); System.out.println(ch.getStr()); } str はオーバーライド(?)されるのに、スーパークラス の値("Parent")が帰ってくるのが不思議です。 どのように考えたらよいのでしょうか。 教えてください。
189 :
名無しのエリー :2000/11/09(木) 00:16
class Child extends Parent{ String str="Child"; } って書かないとマズイのでは?
190 :
名無しさん@お腹いっぱい。 :2000/11/09(木) 00:24
>188 いろいろ実験をしてみました。 まず、188のParent#getStr()をChildに移して見た所、 "Child"が表示されました。 また、クラスの階層を親、子、孫の3階層にし、 親と孫にstrフィールドを宣言し、真中の子にgetStr() を付けてみたところ、親クラスのstrが表示されました。 どうやら最初にgetStr()が定義されているクラスのstrを 探しに行き、見つからない場合にはsuperクラスの中を捜し に行くようです。
191 :
190 :2000/11/09(木) 00:44
でも、188のstrはオーバーライドされてるわけじゃなくて、 イメージ的には以下のような物だと思う。 class Test{ public static void main(String[] args){ { String str = "Parent"; System.out.println(str); } { String str = "Child"; } } }
192 :
190 :2000/11/09(木) 00:47
無論これならチャンと"Child"と表示されます。 class Parent{ String str="Parent"; String getStr(){ return str; } } class Child extends Parent{ Child(){ str = "Child"; } } public class Main{ public static void main(String[] args){ Child ch = new Child(); System.out.println(ch.getStr()); } }
193 :
りかぴょん :2000/11/09(木) 03:23
194 :
184 :2000/11/09(木) 09:40
あるチャットのソフトのコードが欲しいんです。 モノそのものではなく。 なんでもいいのでコード公開してるサイトないかなぁ
>184 あっそう。 もう、人間やめれば?
196 :
184 :2000/11/09(木) 11:40
ホントつまらない煽りダナ。(藁 かなりセンスないとお見受けできるんで他板でカルマ積んで来い。>195
mocha
199 :
名無しさん@お腹いっぱい。 :2000/11/10(金) 00:31
複数のクラスで使用する定数をinterfaceに定義しておくケースが 良くありますよね。↓こんな感じで。 public interface Week{ String SUNDAY = "日曜日"; String MONDAY = "月曜日"; String TUESDAY = "火曜日"; ・ ・ ・ } これを使用するのに、以下の様にされるのは嫌いなんだけど、どうだろ? public class MySchedule implements Week{ String holiday = MONDAY; ・ ・ ・ } ↓こうした方が良いよね? public class MySchedule{ String holiday = Week.MONDAY; ・ ・ ・ }
200 :
>199 :2000/11/10(金) 02:31
finalクラスでも使えば?
201 :
初心者 :2000/11/11(土) 01:50
* ** * * * * ***** ↑入力した数と底辺が同じ数になり、中が空洞(↑は5を入力)。 こんなのできる人いるの?
202 :
↑ :2000/11/11(土) 01:52
4行目の右の*は一個右にずれる。
203 :
名無しさん@お腹いっぱい。 :2000/11/11(土) 02:11
>201 文字列で書くんじゃない?
204 :
名無しさん@お腹いっぱい。 :2000/11/11(土) 04:23
age
201の問題は、彼の宿題と見た。 自分で考えナって。
>>201 質問には答えてあげないと
出来る人はいっぱいいます
207 :
初心者 :2000/11/11(土) 15:28
201の問題が解ける奴はここにはいない!
208 :
初心者 :2000/11/11(土) 15:33
//Triangle.java class Triangle{ public static void main(String args[]){ if(args.length>=1){ int x=Integer.parseInt(args[0]); for(int i=0;i<x;i++){ for(int j=0;j<=i;j++){ System.out.print("*"); } System.out.println(); } }else System.out.println("Please input number"); } }
209 :
名無しさん@お腹いっぱい。 :2000/11/11(土) 15:44
>>199 ではなんでインターフェイスに定数が定義出来るのでしょうか?
定数も実装であり、これを許しているということは
holiday = MONDAY;
のような使い方を想定しているとしか思われません。
>こんなのできる人いるの? います。
211 :
名無しさん@お腹いっぱい。 :2000/11/11(土) 16:23
>210 かいてください
jdkのソースをWEBで見れるとこってありますか?
214 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 00:39
>>209 >holiday = MONDAY;
>のような使い方を想定しているとしか思われません。
その通りなんだろうけれど、他人が作ったソースをメンテナンス
している時に、定数の定義先を探すのが大変なんだよね。複数の
interfaceをimplementsしている時なんかは特に。
とりあずツールの検索機能とかに頼っちゃうんだけれど、これは
可読性が低下している証拠だと思う。
この例に限らず、委譲で済ませられる部分は委譲にすべきだと思
うので200言うとおり、定数のみならばfinalなclassが良いだろ
うね。
215 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 01:03
>>208 は間違ってるじゃん。
三角形の中身が埋まってしまう。
216 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 01:10
>>214 ベースクラスで定義されたものを探すのは常に大変でしょ?
あなたの論法だとベースクラスで定義された関数を使うのは
可読性が低下しているということになりますけど
#それはそれで事実だけど
あーあ。 いわなきゃ201も気づかなかったろうに
218 :
初心者 :2000/11/12(日) 01:13
中は空洞で、以下のような形!! * ** * * * * ***** ↑入力した数と底辺が同じ数になり、中が空洞(↑は5を入力)。 こんなのできる人いるの?
219 :
初心者 :2000/11/12(日) 01:16
これはStringをつかうしかないでしょ?
いるだろ。
221 :
初心者 :2000/11/12(日) 01:24
>218 2チャンネラーはこの問題は絶対無理だから、 賢い友人に聞きナ!
222 :
214 :2000/11/12(日) 02:13
>>216 >あなたの論法だとベースクラスで定義された関数を使うのは
>可読性が低下しているということになりますけど
関数の場合はクラスでしか実装できず、又クラスは多重継承
出来ないない為、親クラスを一本道で辿ればいつかはその関数
の定義部分に辿りつけますけれど、interfaceは多重にimplements
出きる為、一本道で探せないという難点があります。
また、implementsしているinterefaceに対して別なクラスから
アクセスする事は無いでしょう。
(つまり、"class A implements B"の場合、 Bが定数のみのintereface
ならば、"B b = new A();"という使い方はまずしない。ならばimplements
する必要性は無い)
つまり、定数のみを定義したinterfaceをimplementsする一番の理由は
そのクラスをタイピングしているコーダーがタイピングの手間を省く為
だけであり、これはinterefaceの乱用なのではないかと思うわけです。
223 :
214 :2000/11/12(日) 02:28
ついでに、僕は今まさにこういうinterefaceに苦しめられてます。 どうも前にコードを書いてた人は定数をinterefaceにまとめるのが 好きだったようで、そういうinterefaceを2つ3つimplements してたりして、ソースを読むのが非常に苦痛です。
224 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 02:45
>>222 一本道で探せるかどうかは関係ないでしょ。インターフェイスは
継承できないんだから、ちょっと枝が増えるだけ。
タイピングの手間を省くだけではありません。
その定数がどのクラス(インターフェイス)で定義されているかと
いうのは実装詳細で、いちいち指定するのはベースクラスの関数
を呼び出すときに
BaseClass.foo()
とするようなものです。
インターフェイスに実装が出来る以上これは正当な利用法であって
それでもいやなら、JAVAの設計が腐っているということです。
225 :
214 :2000/11/12(日) 11:09
>>224 224さんの説明には"implementsしなければならない|したほうが良い"
理由が抜けてますね。なぜimplementsした方が良いのですか?
果物ナイフを使用した犯罪がこの世に存在するのは果物ナイフの設計が
腐っているからではなく、犯罪者の頭が腐っているからですよね。
intereface名.定数名でもアクセスできるのに、可読性の低下を招いてま
でimplementsしなければならない理由を教えて下さい。
226 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 11:25
>>222 一本道で探せないのは別に定数に限った話じゃないし、ctagsとか
使ってツールに探させればいいだけの話では?
227 :
214 :2000/11/12(日) 11:39
>>226 214で書いたとおり、僕もツールで検索しています。
そしてそれは本来不必要な作業であるとも思っています。
また、ツールの検索機能だと、別なクラスで定義されてい
る同じ名前の定数を複数引っ張って来る為に、その中から
更に人力で探し出さなければなりません。
226さんは"implementsする"派のようですが、その理由は
なんですか?
なぜintereface名.定数名でのアクセスをしないのですか?
もしその理由が"コーディングが簡易だから"というものならば
それは可読性の低下とトレードオフするのに割に合う理由だと
御考えですか?
とりあえずJAVADOCとおしとけば? JAVADOC用のコメントとかなにも打たなくても、コメントの 全くないライブラリドキュメントはできるよ。 SunのAPIライブラリドキュメントになれてる人なら、 クラスツリー辿って親クラスやインタフェイスの定義まで 辿るの楽だよ。
229 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 14:24
JAVAからUNIXのshellを起動する方法を教えて下さい。 JAVAアプリから"ls -a"とかやって、結果をJAVAアプリに出力 させるようにしたいのですが、やり方が分かりません。 C言語を使って"exec"とか書かなくてはいけないのでしょうか。 できればJAVAオンリーでやってみたいのですが。 お願いします。
230 :
229 :2000/11/12(日) 14:50
javax.telephonyというpackageがあるみたいだけど、これでいいのかな。
String[] com = { "ls"@` "-a" }; Process p = Runtime.getRuntime().exec( com ); DataInputStream in = new DataInputStream( p.getInputStream() ); try { String out; while( ( out = in.readLine() != null ) System.out.println( out ); } catch (IOException ex ){}
232 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 15:02
switch文を使った文字列の比較なのですが 1 Stringオブジェクトからcharの文字の値を得る方法は toCharArray しかないのでしょうか? 2 文字列の比較の場合はswitchよりも if elseをつかって、 Stringクラスのequalメゾットで比較してのがスマート? 3 Stringオブジェクトの文字列をint型にした場合は、 文字コードになるのでしょうか? とするとcharも中身は文字コードみたいだから、 違いが良く分からないです class SwitchTest{ public static void main(String args[]){ String temp = new String("a"); char a[] = a.toCharArray(); switch(a[0]){ case 'a' : System.out.println("It's a~); break; case 'b' : System.out.println("It's b"); break; default : System.out.println("I don't know); break; } } }
233 :
229 :2000/11/12(日) 15:04
234 :
初心者 :2000/11/12(日) 15:39
* ** * * * * ***** ↑入力した数と底辺が同じ数になり、中が空洞(↑は5を入力)。 こんなのできる人いるの?
>234 しつこいなあ。それ元ネタのコピペでしょ。つまんね。 4列目間違ってるんだから、宿題教えて君本人だったら 直して貼ってるよ。
>232 何でわざわざchar[]に変換する必要あるんだか分からん。 StringクラスのAPI調べてみそ。
237 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 19:19
>>228 >SunのAPIライブラリドキュメントになれてる人なら、
慣れてない人なんてJavaの初心者以外にいるのですか?
ていうか、それも"implements有りき"という前提で思考停止
しているね。
>229 JTAPIって具体的に何するんだか知らんが、必要なのか? 他モジュール実行と入出力ストリーム取得命令はコア中のコアだよ… 231が使ってるjava.lang.Runtime&Processクラス。 とりあえずリモート起動がやりたいのなら、ソケット作ってTELNET ログインすれば良いんじゃない?相手にはデーモンあがってるよね? java.netパッケージと、TELNETプロトコル(などというほどのもん でもないだろうが)調べなされ。 業務システムとかでってんなら、CORBAとかRMIやってみるのも良いかもね。
239 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 20:35
>236 switch()のカッコの中はbyte@`short@`int@`charのいずれか じゃないといけないようで、stringオブジェクトを 入れられないようです んでAPIドキュメントみたらtoCharArray() があったので使ってみたんだけど、 もうちょといいやりかたないかなと思って
240 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 20:45
>>232 2 の「if elseをつかって‥‥」
が読みやすさの観点では無難なのではないかと。
241 :
6流SE :2000/11/12(日) 20:53
>232 charAt でいいんじゃない?
242 :
224 :2000/11/12(日) 21:22
>>225 ちゃんと読んだ?
intereface名.定数名
ってアクセスするのは実装詳細に立ち入ってるから駄目なのよ。
定数の定義されているインターフェースの名前が変更されたり、
ほかのインターフェイスに移ったときや、あるクラスだけMONDAYの値を
変更したくなったらどうするの?
>果物ナイフを使用した犯罪がこの世に存在するのは果物ナイフの設計が
>腐っているからではなく、犯罪者の頭が腐っているからですよね。
だから、インターフェイスで定数が定義出来る仕様には、ほかに使い道はあ
るのですか?
唯一の使い道を気に入らないというならJAVAの仕様が腐ってるんでしょ。
>また、ツールの検索機能だと、別なクラスで定義されてい
>る同じ名前の定数を複数引っ張って来る為に
だから関数でも同じこと。同じ名前の関数を複数引いて困るこ
とはないの?
定数の定義を頻繁に調べなくてはならないのは、何かほかの理由
でそのプラグラムの可読性が低いからじゃない?
ひどい目に合っているのには同情するけど、それだけの理由でこ
の機能を否定するのは止めてぷりーず。
243 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 22:38
charAT(int index) だからStringオブジェクトをintに変換(?)して使うってこと??
244 :
名無しさん@お腹いっぱい。 :2000/11/12(日) 23:02
>>243 Stringオブジェクト.charAt(index:int):char
です。#:に続く文字列は,変数またはメソッドが返す型を便宜上表記したもの
Stringオブジェクトをint型に変換できる‥‥わけなくて,
「文字列のindex番目の文字を返す。」という意味です。
Cの
int index = 3;
char *str = "abcdefg";
char c = str[index];
のような動作に似ている。この場合 'd' が返されます。
C# だったらきっと indexer 使うんだろうな。
246 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 00:09
char型は一文字しか入らないので switch文で文字列の判定はできません if elseをつかいましょう
247 :
225にあらず :2000/11/13(月) 00:09
>>242 >だから、インターフェイスで定数が定義出来る仕様には、ほかに使い道はあ
るのですか?
>唯一の使い道を気に入らないというならJAVAの仕様が腐ってるんでしょ。
横槍すまんが…。
interface hoge {
int ON = 1;
int OFF = 2;
void hogeSwitch(int dx@`);
}
みたいにInterfaceの中で定義されてる抽象メッソドの引数に使われる定数を定義するために使うっつーのが使い道の一つとしてある様な気がするんだけど…。
まぁ、おいらは汎用関数として使うのも別に構わないと思うけど。
248 :
225にあらず :2000/11/13(月) 00:16
>>247 >まぁ、おいらは汎用関数として使うのも別に構わないと思うけど。
げげっ!!汎用関数じゃなくて汎用定数だった…。
まっ、いっか。
>247 それは正しいやり方な気がするじょ。インタフェースの 定義の場所で、インタフェースのパラメータまで絞って るっていうのは、クライアントから見て非常に分かり やすそうじゃ。
250 :
224 :2000/11/13(月) 01:06
>>247 そのとおりだ、認めます。
enumの代わりに使う場合(つまり値に意味がなく定数名に意味が
ある場合)がありますね。
しかしこの場合でも実装側はON(名前悪いけど)でアクセスする
のは自然だと思う。
251 :
225にあらず :2000/11/13(月) 02:58
???
なんだか良くわからなくなってきたぞ?
まぁ、とりあえず
>>199 の問題については、
1.定数だけのInterfaceってのは…。
→キショイ。final classを使え。
2.interfaceをimplementsしてそのinterface内の定数に直にアクセスする。
→そのinterfaceの中で宣言されてる
抽象メッソドの関連の値として使うなら問題なし。
…って事でみんな意見が一致してる様な気がするんだけどなぁ。
誰か意見モトム。
252 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 09:02
* ** * * * * ***** ↑入力した数と底辺が同じ数になり、中が空洞(↑は5を入力)。 こんなのできる人いるの?
↑すっかりコピペの定番になってしまったのかしら?
>>251 違う。FinalClass.MODAYみたいにはアクセスしたくないんだ(少なくとも
そういう場合がある)。
public interface WeekStringGetable{
String SUNDAY = "日曜日";
}
って考えればこれがデフォルト実装を持ったインターフェイスである
ことが良く分かると思う。
実装があるのにインターフェイスというのはおかしいがそれはJAVAが(以下略)
//Triangle.java public class Triangle { private int num = 0; private final String blankStr = " "; private final String astaStr = "*"; public static void main(String args[]){ Triangle test = null; int num = 5; if (args.length == 1){ try { num = Integer.parseInt(args[ 0 ]); } catch (Exception e){ System.out.println("parameter error."); } } test = new Triangle(num); test.draw(); } public Triangle(int num){ this.num = num; } public void draw(){ System.out.println(astaStr); for (int lp=0; lp<num-1; lp++){ System.out.print(astaStr); for (int lp2=0; lp2<lp; lp2++){ String str = blankStr; if ( lp == (num-1)-1 ){ str = astaStr; } System.out.print(str); } System.out.println(astaStr); } } }
>>255 drawメソッドはこの方がいいと思う↓
public void draw(){
for (int lp=0; lp<num; lp++){
System.out.print(astaStr);
for (int lp2=0;lp2<lp;lp2++){
String str = blankStr;
if( lp2 == lp-1 || lp == (num-1) ){
str = astaStr;
}
System.out.print(str);
}
System.out.println();
}
}
257 :
225にあらず :2000/11/13(月) 11:30
>>254 >違う。FinalClass.MODAYみたいにはアクセスしたくないんだ(少なくとも
>そういう場合がある)。
言いたい事と違う。
それはstatic classを使う場合のアクセスの仕方だろ?
おいらが言ってるのは次みたいなやり方。↓
public final class Week{
String SUNDAY = "さんでー";
・
・
・
}
public class Hoge{
Week Hage = new Week();
・・・・
・・・・
…Hage.SUNDAY;
・・・・
}
よーするに
フィールドに組みこんで、
クラス名.フィールド名
じゃなくて
インスタンス名.フィールド名
でアクセスする様にするということ。
これで実装詳細(?)に触れなくて済むでしょ?
だいたいの場合、定数実装「のみ」のインターフェースはだいたいの場合、
そのインターフェース(にしようとしてるクラス)と
imprimentsしようとしてるクラスとはhas_a関係なんだから
クラス化してフィールドに埋め込むほうが自然だと思う。
>実装があるのにインターフェイスというのはおかしいがそれはJAVAが(以下略)
定数実装がおかしいわけじゃないんだって。
定数「しか」実装されてないのがおかしいって言ってるの。
後は夜~♪
>>257 それは考え着かなかった。有名なテクニックなの?
でも残念だけどこれでも実装詳細に触れているよ。これはインターフェイス
名が変更された場合には対応できるけど、複数のインターフェイスがあって
定義場所が移動した場合、そのクラスだけ一時的に定数の値を替えたい場合
に対応できないじゃない。
利用側がMONDAYという抽象的な値を使いたいのなら、やっぱ無修飾のMONDAY
と記述するしかないと思うのだけど。
>imprimentsしようとしてるクラスとはhas_a関係なんだから
imprimentsしようとしてるクラスは本当はWeekStringGetableから派生さ
せたいんだよ。でも多重継承できないからな…と思ってたところに定数だけの
クラスは多重継承できるって言うから利用しているだけだよ。
259 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 13:27
class Triangle { public static void main(String args[]) { if(args.length >= 1) { int x = Integer.parseInt(args[0]); for(int i = 0;i < x-1;i++) { for(int j = 0;j <= i;j++) { if(j == 0 || j == i) System.out.print("*"); else System.out.print(" "); } System.out.println(); } for(int i = 0;i < x;i++) System.out.print("*"); } else System.out.println("Please input number"); } }
260 :
259 :2000/11/13(月) 13:30
208さんのを直してみましたがどうでしょう?
>>259 それなら↓こうするのが一番シンプルじゃないかな。
アルゴリズム的には256+259という感じ。
これ以上短くなる?
class Triangle {
public static void main(String args[]) {
if(args.length >= 1) {
int x = Integer.parseInt(args[0]);
for(int i = 0;i < x;i++) {
for(int j = 0;j <= i;j++) {
if(j == 0 || j == i || i == x-1)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}
}
else
System.out.println("Please input number");
}
}
最初の行の*が 次の行の**の真ん中に来ないといけない時点で 不可能だというのにはだれも気が付かないのか?
>261 ふむふむ、勉強になります。
264 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 16:21
>>257 オブジェクト.static_method() とか オブジェクト.static_variable
という表記の仕方は,推奨されないそうです。詳しくは
http://java.sun.com/docs/codeconv/html/CodeConventions.doc9.html の10.2をみてね。
>Avoid using an object to access a class (static) variable or method. Use a class name instead. For example:
《いい加減な訳》
あるオブジェクトの静的な変数,およびメソッドにアクセスすることはよくないです。
そうするよりもクラス名を使いなさい。例えばこんな例だよ。
>classMethod(); //OK
>AClass.classMethod(); //OK
>anObject.classMethod(); //AVOID!(だめ)
drawString()使え。FontMetricsで'*'の幅を数えればおげ。
266 :
11月13日 :2000/11/13(月) 17:30
JAVAを使ったゲームで「これはなかなかいいねえ。よくできてる。」 というものがあれば教えてください。
267 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 17:52
268 :
JSDK2.0~ :2000/11/13(月) 18:11
あのぉ、つかぬことをお聞きしますが、、、 JSDK2.0~はどこでDL出来るんでしょうか? SUNのページに行っても無いのですが。。。 どうかこの3日間探し回っている厨房にお教えください。
269 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 18:22
270 :
名無しさん@お腹いっぱい。 :2000/11/13(月) 21:33
デザインパターンについて解説してあるHPしりませんか? ヤフーで探したのですが、本の紹介ばかりでした。 本を買うお金がちょっと今月はないので
271 :
225にあらず :2000/11/13(月) 22:08
>>258 >それは考え着かなかった。有名なテクニックなの?
Delegation。…と言っていいかどうかは少し疑問。
でも使う目的としてはそういう事。
安易な継承を控えるため。
>でも残念だけどこれでも実装詳細に触れているよ。これはインターフェイス
>名が変更された場合には対応できるけど、複数のインターフェイスがあって
>定義場所が移動した場合、そのクラスだけ一時的に定数の値を替えたい場合
>に対応できないじゃない。
逆にいえば「この定数ってどこで定義すれば良いかわかんないし、定数の値もこれで良いのかわかんな~い♪」って事か?
というか、そもそもどこで定義されるかが変わっちゃうような(あやふやな?)定数があるんだったら設計自体からまず練りなおすべきでしょ。定数値を局所的に変えたい時ってのも同じ。設計した時の定数のドメイニングが甘いからそーなるの。(まぁ、仕様変更があったって言う悲しい事情かも知らんが…。)
そーいうインターフェースの使い方って書く方からすれば便利かも知らんけど
手直ししたり再利用したりする側にとっちゃすげー迷惑だと思うんだが。
なんせどこで定数定義されてるかが不明瞭なわけだし。
まぁ、最も「共同作業じゃないしServlet使うからJava使ってるだけでオブジェクト指向なんかあぼ~ん♪」って感じの時にはそーいうコーディングでも問題は無いとは思うけどね。
>>264 今回はクラス変数の話しじゃなくて定数の話しなんでかんけーないと思うけど?
272 :
225にあらず :2000/11/13(月) 22:09
で、こう書くとまた「じゃぁなんでインターフェースで定数が定義できるねん」って話しになりそうだけど、インターフェースで定義する定数ってのは、そのインターフェースがimprimentsされるクラスから生成されるオブジェクトに外部クラス(または外部オブジェクト)がアクセスする際に必要なパラメータを定義する(と言うよりむしろ明記する)のに使われるっつーのが自然な考え方だと思うんだけどどうよ? うげ~、熱が38度もある…。
273 :
264 :2000/11/14(火) 01:27
>>271 言語仕様を把握してますか?
Javaに定数(const)なんてものはありませんよ。
final修飾された変数は,あくまで「一度だけ代入できる変数」ですよ。
274 :
名無しさん@お腹いっぱい。 :2000/11/14(火) 02:18
275 :
225にあらず :2000/11/14(火) 03:01
>>273 >Javaに定数(const)なんてものはありませんよ。
>final修飾された変数は,あくまで「一度だけ代入できる変数」ですよ。
あー、そーだった。
なんか君の参照先の下に思いっきりConstantと化書いてあったから思わず書いちまった。(w
でもどの道static宣言なんてどこでもしてないよ。(w
#
…でも273さんの言ってる事は正しいですね。スマソ。 ホンネじゃMath.PIみたいstaticクラスにして クラスの外で定数定義したいし。 でも224氏が何であそこまで実装詳細に こだわるのがおいらニャ謎なもんで…。
277 :
Jova :2000/11/14(火) 06:32
Javaコンパイラは何がよいですか? 初心者です。よろしくです。ぺこーり。。
278 :
224 :2000/11/14(火) 10:16
>>271 そう仕様変更よ。本当に変わる場合もあるけど仕様のバグも
あるし、デバック目的で一時的に替える場合もある。
MAX_XXXX_NUMとかXXXXX_SERVER_NAMEとか想像してみそ
設計時に決定して替えちゃ行けないのはenum的に使う場合だけ。
>なんせどこで定数定義されてるかが不明瞭なわけだし。
これって225の主張と同じになってないか?
繰り返すけど、どこで定義されているか不明瞭で困るなら、
普通のメソッドだって不明瞭でしょ、困るの?
>でも224氏が何であそこまで実装詳細に
俺は「読みにくくなる」という主張はおかしく、逆にメリットと
して(少なくとも)実装詳細に触れないという点を上げて、この
テクニックを弁護しているだけ。
279 :
225にあらず :2000/11/14(火) 17:55
>繰り返すけど、どこで定義されているか不明瞭で困るなら、 >普通のメソッドだって不明瞭でしょ、困るの? うにゃ? 普通のメッソドもどこにあるのかしっかり指定するっつーの。 それとも、あんちゃんはSystem.out.println()を使うのにSystem.Outを(できないけど)継承するの?Math.abs()を使うのに(これまたできなさそーだけど)継承するの?しないよねぇ? おいらの主張は継承は基本的にSuperClass SC = new ExtendedClass();っちゅー事ができる必要がない限りやらない様にすべきって事よ。 #だからこの点では225と一緒だよ。(w 振るまいが似てるけどis_a_kind_of関係にない時は継承を使わないでDelegationで対処する。外部クラスからアクセスするために使わない定数や変数は全部Private宣言する。で、JavaDocに通した時に外のクラスからアクセスするのに要らん物がドキュメントの中に出ない様にしっかりコードしようって事をいってんの。 確かにあんちゃんの使い方はコード書いてる方からは便利かも知らんけどそれを使うほうからは要らん物が大量に外から見える嫌なコードになってるの。 わかる? …といっても、おいらもたまにそーいう事するけどね。(w
280 :
名無しさん@お腹いっぱい。 :2000/11/14(火) 19:38
>普通のメッソドもどこにあるのかしっかり指定するっつーの。 ベースクラスのメソッドを使うときどこで定義されているかはっきり させる様には書か/書けないでしょ? >System.Outを(できないけど)継承するの? 出来るならするよ。Eiffelでもやってるように実装のための継承ってやつ #本当はimportで持ってきたいんだけど。 >is_a_kind_of関係にない時は継承を使わないで だからis_a_kind_of WeekStringReadable でしょ? これはもはや主観の問題だぞ。 俺は利点とデメリットを比べて、問題がなければいいじゃんという 論旨で説明したんだ。それであなたが言っている「どこで定義され ているか不明瞭」というのはおかしいと説明した。 これについては異論ないよね? 279から判断できるデメリットは「実装のための継承なのにpublic だから外に見えちゃう」だよね。これは納得。気付かなかった。 で、訂正。メリットとデメリットがある以上、これを天秤に掛けな くちゃいけないけどこの場合はプロジェクトの規模や性質、考え方、 開発環境で変わってしまう。 だからこれ以上一般的には議論できない。
281 :
225 :2000/11/14(火) 22:53
>>242 >intereface名.定数名
>ってアクセスするのは実装詳細に立ち入ってるから駄目なのよ。
そのinterefaceをimplementsしてからアクセスしても実装詳細に
立入ってるじゃないですか?
>>定数の定義されているインターフェースの名前が変更されたり、
>>ほかのインターフェイスに移ったときや、あるクラスだけMONDAYの値を
>>変更したくなったらどうするの?
これもimplementsする方法でも解決できないよね。
>>だから、インターフェイスで定数が定義出来る仕様には、ほかに使い道はあ
>>るのですか?
>>唯一の使い道を気に入らないというならJAVAの仕様が腐ってるんでしょ。
interefaceに定数を定義する事自体よりも、それをimplementsするのが気に
入らないのです。
>だから関数でも同じこと。同じ名前の関数を複数引いて困るこ
>とはないの?
ありますよ。ただこのケースではintereface名.定数名で使用さえ
していれば検索など無用だということです。
>定数の定義を頻繁に調べなくてはならないのは、何かほかの理由
>でそのプラグラムの可読性が低いからじゃない?
ゴミのようなプログラムだと言う事は同意だけれど、むやみなimplements
のせいでより一層読みにくいんです。
>ひどい目に合っているのには同情するけど、それだけの理由でこ
>の機能を否定するのは止めてぷりーず。
否定しているのは機能ではなく設計方法です。
282 :
名無しさん@お腹いっぱい。 :2000/11/14(火) 22:58
>274 ありがとー!!
283 :
225 :2000/11/14(火) 23:01
なぜimplementsしてから直接フィールド名をアクセスすると実装詳細 にふれない事になるのかが全然理解できない。 もちろんintereface名.フィールド名でも実装詳細にふれますが、 可読性という点でimplementsするよりはマシじゃないですか?
284 :
名無しさん@お腹いっぱい。 :2000/11/14(火) 23:03
皆さんお聞きしたいのですが、 個人レベルでの開発のスタイルってどんな感じですか? 僕のばあい 1 UMLのツールを使って設計 2 エディタを使ってコーディング 3 コンパイル&デバック 4 Webブラウザで結果を確認 って感じです 1と2と4が別々の環境なので、ちょっと面倒な感じです 最近xemacsでJDEを使うようになって、 コーディングしてコンパイルが大部楽になりました 全部一つの環境でできないものかな
285 :
225 :2000/11/14(火) 23:10
>>279 >おいらの主張は継承は基本的にSuperClass SC = new ExtendedClass();っちゅー事が
>できる必要がない限りやらない様にすべきって事よ。
ポリモルフィズムに利用する事が無く、また継承が一番エレガントな設計
手法になりえないならば、継承は極力さけて委譲を利用します。
このケースについては継承がエレガントだとはとても思えません。
286 :
名無しさん@お腹いっぱい。 :2000/11/14(火) 23:20
277 javacじゃ不満? (なんて詠むの?ジャヴァック?)
287 :
225にあらず :2000/11/14(火) 23:22
>>285 >ポリモルフィズムに利用する事が無く、また継承が一番エレガントな設計
>手法になりえないならば、継承は極力さけて委譲を利用します。
つーか、
そーいう事が言いたかったんだけど、どー読めた?(謎)
288 :
224 :2000/11/14(火) 23:34
>そのinterefaceをimplementsしてからアクセスしても実装詳細に >立入ってるじゃないですか? >これもimplementsする方法でも解決できないよね。 説明不足だったかな? 定数名でアクセスしてればその部分のコードは定数名と言う抽象的なインター フェースを使ってるけど、XXXX.定数名だとXXXXの部分が実装されている場所 を示しているから実装詳細、実装依存でしょ。 >>定数の定義されているインターフェースの名前が変更されたり、 >>ほかのインターフェイスに移ったときや >これもimplementsする方法でも解決できないよね。 implemnts XXXXのところだけ変えればすむでしょ、と言う話。 >>あるクラスだけMONDAYの値を変更したくなったらどうするの? 自分のクラスでMONDAYを再定義すればいいでしょ。 >ありますよ。ただこのケースではintereface名.定数名で使用さえ >していれば検索など無用だということです。 そうなんだけど、だったら関数の場合(BaseClass)this.foo()を使わないのはなぜ? ついでに言えばimport XXX.*も使わないの? メンバ変数にアクセスするときthis.変数名とかClassName.変数名とかする? 自分のネームスペースに識別子をインポートするのは抽象化する上で重要な方法 だと思うんだけど。
289 :
225 :2000/11/14(火) 23:37
見てない間に随分コメントついてたんで、ばらばらなレスで悪いですけれど
>>251 には僕も同意見
僕なりに考えてみたんだけれど、定数だけのclassとかがどうしても必要
ならば
1. final public class に private static finalフィールドとして定義し、
2. public staticなアクセサメソッドを用意する。
と言うのが一番良い気がする。
これならフィールドの値を変更したとしても、使用側のclassをリコンパイル
しなくて良いと思うし。
290 :
225 :2000/11/14(火) 23:40
>>287 225にあらずさんの意見に付け加えて、
「継承が一番エレガントでさえあるならば」
たとえポリモルフィズムに使用しなくとも、継承を使用するということを言いたかったのです。
291 :
225 :2000/11/14(火) 23:54
>>288 224さんの意見には全く同意できません。
>定数名でアクセスしてればその部分のコードは定数名と言う抽象的なインター
>フェースを使ってるけど、XXXX.定数名だとXXXXの部分が実装されている場所
>を示しているから実装詳細、実装依存でしょ。
フィールド名が抽象的であるというのがまず謎です。
スーパークラスのフィールド名を名指しして、
その指し示す場所が動的に変更される事が有り得るのですか?
>implemnts XXXXのところだけ変えればすむでしょ、と言う話
それは僕が前から言っている「コーダーの便宜の為」ではないんですか?
まさか抽象的というのはこの事ですか??
僕が理想とするのは「可読性が高く、ひいては保守性の高いコード」
なんですが、もし224さんの目指すところが「保守性よりコーダの都合」
ならばココは理解し合えない場所かもしれませんね。
>自分のクラスでMONDAYを再定義すればいいでしょ。
それだけは勘弁して下さい。同じ名前のついてるフィールドを
クラス名の定義なしに2重管理する気ですか?
>>そうなんだけど、だったら関数の場合(BaseClass)this.foo()を使わないのはなぜ?
thisは基本的に使用しませんが、superは好んで使用します。僕のコードを後から見る
人がすぐに親クラスのメソッドを探しに行けるようにする為です。
>>ついでに言えばimport XXX.*も使わないの?
使いません、バグの原因となります。
また保守性も低下します。
>>メンバ変数にアクセスするときthis.変数名とかClassName.変数名とかする?
しません。無意味です。クラス指定されてないならば、大抵のひとはまず今読んでいる
クラスの中を捜すからです。つまりはあなたのやり方だと、読む人に「今のクラスの中
を捜す」という無駄な作業をさせる事になります。
292 :
224 :2000/11/14(火) 23:58
>>283 >可読性という点でimplementsするよりはマシじゃないですか?
勝手な想像だけど、225さんは定数を変数の一種として捉えてるんじゃない?
俺は(この場合)関数の一種として捉えてるのよ。
だから重要なのは定義場所や内容でなくて名前なんだわ。
293 :
名無しさん@お腹いっぱい。 :2000/11/14(火) 23:58
>>286 読み方はお好みでどうぞ。
ただ javac というのは Java Compiler を省略したものだから,
「じゃう゛ぁしー」あたりが無難なのでは。
294 :
225にあらず :2000/11/15(水) 00:05
>>290 >「継承が一番エレガントでさえあるならば」
>たとえポリモルフィズムに使用しなくとも、継承を使用するということを言い>たかったのです。
あー、なるほどねぇ…。でもどんな場合だろ…。
そーいう時って、やっぱポリモフィズムしてもおかしくない様になる気がするんだけどなぁ…。
つーか、デザインパターン用のスレ立てる?
295 :
225 :2000/11/15(水) 00:12
>>292 >勝手な想像だけど、225さんは定数を変数の一種として捉えてるんじゃない?
>俺は(この場合)関数の一種として捉えてるのよ。
>だから重要なのは定義場所や内容でなくて名前なんだわ。
ごめん、理解できない。詳細キボン。
ていうか遠距離通勤なのでもう寝ます。 次にコメントするのは数日後になる可能性もありますので あしからず。
297 :
224 :2000/11/15(水) 00:40
>>295 だからMONDAYっちゅーのは
String getStringOfMONDAY(){
return "げつよび":
}
の省略形と捉えてるのよ。
そしてWeekStringGetableの派生クラスとして使いたいのよ。
#この辺オブジェクト指向用語に翻訳してるけど。
だからこいつが何を返してくるかはわからないけど、MONDAY
という抽象的な値が使いたいわけ。
値の内容は実装詳細だからいつ変わるかわからないし、それが
どこで定義されてるかは知りたくない。そしてそれを使うコードは
何か変更があったときになるべく影響を受けたくないわけ。
「コーダーの便宜の為」というのはおかしい。最初にコーディングす
る人間の便宜ではなく、それを保守する人間の便宜だ。
super使ったって、継承元のどこだか特定できないじゃん。
>「今のクラスの中を捜す」という無駄な作業をさせる事になります。
ローカル変数と区別するのに有用だよ。って意味。
ベースクラスで定義されてるなら(BaseClass)this.変数名だ。
あと可読性と言うのをどう考えてるの?文字通り読みやすさ?
俺はバグが入りにくいこと、変更しやすいこと、バグがあったとき
原因を特定しやすいこと、とかひっくるめてなんだけど。
298 :
225にあらず :2000/11/15(水) 00:52
>224さん うーん、実装のための継承かぁ…。 なんかアンチパターンの様な気がするんだけどなぁ…。 #実はEiffel読んだ事ない人(^^; むぅ、明日調べてくるべし。 つーことでおいらもこの事に関しては明日回しじゃっ。
>#実はEiffel読んだ事ない人(^^; Eiffel読むってなんだよ…。>自分
224さんへ あー、わかったぞっ! 実装詳細に触れたくないんだったらこーすりゃいいんだ。 #なんか今更。(^^; static final class week{ String FRIDAY ="きんよー"; ・ ・ ・ } public class Calender{ private final String Holiday; ・ ・ ・ Calender(String _Holiday){ Holiday = _Holiday; ・ ・ ・ } ・ ・ ・ } で、Calenderのオブジェクトを生成する段階になって、 Calender Cal = new Calender(week.FRIDAY);
301 :
225にあらず :2000/11/15(水) 06:51
しまった…下げちまった…。(汗) でもこーすりゃ実装詳細に触れないし、 224さんの目標も達成できそうなんだけどどうよ? …基本中の基本ではあるんだが…。(大汗) って言うか一睡もできなかった…。
302 :
名無しさん@お腹いっぱい。 :2000/11/15(水) 07:06
>>300 やべっ、これじゃコンパイルエラーだ。
って事で便宜上ソース代える。
ポイントはコンストラクタを使うって事ね。
static final class week{
String FRIDAY ="きんよー";
}
public class Calender{
private final String Holiday;
Calender(String _Holiday){
Holiday = _Holiday;
}
・
・
・
}
で、Calenderのオブジェクトを生成する段階になって、
Calender Cal = new Calender(week.FRIDAY);
303 :
名無しさん@お腹いっぱい。 :2000/11/15(水) 09:29
>302 本筋から離れるかも知れんが、コンストラクタ引数がString だと、Stringなら何でもインスタンス生成できてしまうって ことだよね?今のはなしだと、クラス設計者が意図する引数 以外入れられないようにしとかんといかんと思うが。。。 別クラス切った方が良いかも。引数候補オブジェクトの FlyweightパターンかPrototypeパターンかな?
304 :
224 :2000/11/15(水) 10:27
>>302 これほんとに使いたいか?
どうしても継承するのが嫌なら
class Foo{
private final String FRIDAY = Week.FRIDAY;
void HogeFunc(){
String tmp = FRIDAY;
}
}
import XXX.* はいやだけど
import XXX.YYY で列挙すればOKというのと同じ考え方。
もちろんこれにも問題がある。最初はFRIDAYの値を使っていたが、
時が経ち使わなくなったときにプライベート変数FRIDAYを削除し
なくてはならない点。
もちろんほっといてもいいのだが、使ってもいない変数がどんどん
増えていく。もちろんimport XXXX.YYYY のときも同じ問題が起きる。
おっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱい
おっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいv
おっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱい
糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞
糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞
こうやるとスクロールが重くなるのですが、どうしてですか? わからないです。みささんこんにちわ、さよオナラ(あはは) 糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞
さて、相談を続けようか。
312 :
名無しさん@お腹いっぱい。 :2000/11/15(水) 12:31
SuperCede for Java -- ビジュアルな対話型開発環境。開発者は高速のJavaアプリケーションを短期間で開発することができます。 SuperCedeは、開発者が実行中のアプリケーションをリアルタイムに変更できる初めての対話型/コンパイル型Java開発環境で、開発者の生産性は最大5倍も向上します。 最小は何倍ですか?
313 :
225にあらず :2000/11/15(水) 16:47
>>303 >今のはなしだと、クラス設計者が意図する引数
>以外入れられないようにしとかんといかんと思うが。。。
そうなのかもしれませんが、
String型が選択されてること自体が便宜的なもんなんで…。
>別クラス切った方が良いかも。引数候補オブジェクトの
>FlyweightパターンかPrototypeパターンかな?
この場合はMarker Interfaceパターンが一番適切ではないかと思われます。
上記の2パターンはもう少し大きな枠組で使われるべきだと思うんですが…。
>>304 >>302 のソースを見てそーいうソースを書くという事はあなたコンストラクタの役割を理解していませんね?ついでに今までの議論を見る限りポリモーフィズムについても理解されていませんね?
少なくとも、あなたがInterfaceにやらせようとしていた事はコンストラクタを使えば保守性・可読性・安定性などの点において今より優れた設計がかけるようになるはずです。
どーなんでしょう?
>>312 0倍じゃないか?(藁
むしろマイナスn倍かと
315 :
224 :2000/11/15(水) 18:35
>>313 うむ。302については俺の勘違いみたいだ。
Calenderって言うクラスがString Holydayだけを保持していて
FRIDAY とアクセスする代わりに cal.getString()とするのかと思った。
そうじゃなくて利用側のクラスのこと(俺のソースでFooにあたる)をCalender
って呼んでたわけね?
#名前から判断しろよ俺…
でもこれは余計ひどいでしょ。new Calenderする側がなんでWeek.FRIDAY
とか指定しなくちゃいけないの?
いやもっと根本的に元の文脈では"FRIDAY"の値が欲しかったんだけど、なんで
Holydayになってるの?
CalenderクラスでWeekの中の定数値がどう使われるか調べてそれぞれについて
BunkanoHi@`KenkokuKinenbi とか作るってこと?そして全部コンストラクタで
指定するの?
316 :
225にあらず :2000/11/15(水) 22:48
>>315 >224さん
>そうじゃなくて利用側のクラスのこと(俺のソースでFooにあたる)をCalender
>って呼んでたわけね?
だべ。これからは見にくいからCalenderとWeekで統一するべ。
つーことでご協力を~~~~。
>いやもっと根本的に元の文脈では"FRIDAY"の値が欲しかったんだけど、なんで
>Holydayになってるの?
あー、これは単なるミス。(汗)
てー事で、さらに訂正するわ。
コンストラクタに関しては適当だから。
public final class Week {//static宣言しない
String SUNDAY = "日曜日";
String MONDAY = "月曜日";
・
・
・
}
public class Calender{
private String SUNDAY;
private String MONDAY;
・
・
・
Calender(Week WK){
SUN = WK.SUNDAY;
MON = WK.MONDAY;
}
}
要はWeekの部分の定数とCalender部分の定数を
「同じ名前でも別の定数としてしっかり管理する」って事よ。
それで、これがあなたの
>でもこれは余計ひどいでしょ。new Calenderする側がなんでWeek.FRIDAY
>とか指定しなくちゃいけないの?
という問いの答えです。
あなたの定数Interfaceの使い方だとデバッグのためと称してCalender.MONDAYの値をWeek.MONDAYから変える事があっていいわけでしょ?そう言う事をして良いって事は結局、Calender.MONDAYとWeek.MONDAYがまったく別物「だから」でしょ。
だったらこうやってまったく別物として管理するべきじゃないの?
#とりあえず実装詳細云々の話は後回しね。
317 :
224 :2000/11/15(水) 23:43
>>316 なんと言うか、304で俺が書いたソースのほうがよくないか?
なんでコンストラクタにWeekを渡すんだ?引数なしのコンストラクタで
初期化すればいいじゃない。
まあどちらにせよ304ですでにこの方法のデメリットを書いてある。
|時が経ち使わなくなったときにプライベート変数FRIDAYを削除し
|なくてはならない点。
|もちろんほっといてもいいのだが、使ってもいない変数がどんどん
|増えていく。もちろんimport XXXX.YYYY のときも同じ問題が起きる。
>だったらこうやってまったく別物として管理するべきじゃないの?
class A extends B
とあったら A.foo()とB.foo()はまったく別物だけど、いちいち再定義しないよね?
#こう書くとポリモフィズムがわかってないって言われるのか。
前にも書いたけど俺は定数ってのは一種の関数だと捉えてる。関数をベースク
ラスから継承するのが自然なように、定数をベースクラス(この場合はインタ
ーフェイスだけど)から継承して使ったっていいじゃん、何か困るのか?
と言う意見なんだわ
>なんでコンストラクタにWeekを渡すんだ?引数なしのコンストラクタで >初期化すればいいじゃない。 だから、コンストラクタはてきとーにしか作ってないんだっつーのっ!! ただし、これは余談。
224さんへ やっぱり考え方の違いかもしれないなぁ…。 おいらからするとクラスを設計する時ってのは 「そのクラス(またはそのインスタンス)が他のオブジェクトから予期しないような操作を受けないように設計する」 ってーのを優先するのに対して224さんのは 「そのクラスのコードの手入れのしやすさ」 っつーのが優先されてるんじゃないかなぁ・・・。とか思った。 どうよ?
320 :
225にあらず :2000/11/16(木) 01:57
age
321 :
225にあらず :2000/11/16(木) 03:52
>前にも書いたけど俺は定数ってのは一種の関数だと捉えてる。関数をベースク >ラスから継承するのが自然なように、定数をベースクラス(この場合はインタ >ーフェイスだけど)から継承して使ったっていいじゃん、何か困るのか? >と言う意見なんだわ わかった。だから、そもそも、あなたのその「関数をスーパークラスから継承するのが自然だ」って言うのがそもそも間違ってるんだっつー意見なんだわ。 >class A extends B >とあったら A.foo()とB.foo()はまったく別物だけど、いちいち再定義しないよね? とあるけど、それはたまたまA.foo()とB.foo()の機能が全く同じだったからでそれが違うんだったら当然オーバーライドするはずでしょ。オーバーライドしたらもうB.foo()にはfoo()ではアクセスできなくなっちまうの。よーするにB.foo()にfoo()でアクセスできたのは「たまたま」なわけ。 スーパークラスから自然に継承されるのはB.foo()の機能じゃなくてメッソドっちゅー外側に対する振る舞いだけなんだって。わかってる?
「メソッド」は継承できないだろ、ふつー。 まぁ、最近は「メソッド」の定義が変ってきてるみたいだが…
323 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 07:54
>>322 >「メソッド」は継承できないだろ、ふつー。
なんて言語のはなしよ?
324 :
名無しさん@お腹いっぱい。 :2000/11/16(木) 08:04
>class A extends B >とあったら A.foo()とB.foo()はまったく別物だけど、いちいち再定義しないよね? 要するに、 インターフェースの継承のためのその名もずばりinterfaceを、 実装の継承感覚で使ってるんだよ俺は、と言っているわけね。
325 :
224 :2000/11/16(木) 10:01
>って言うのがそもそも間違ってるんだっつー意見なんだわ。 間違ってるというのは主観的な基準によるものなのか?(なら好きにしてくれ) それとも具体的に何か困るのか?(ならそれを示してくれ) >とあるけど、それはたまたまA.foo()とB.foo()の機能が全く同じだったからでそれが違うんだ >ったら当然オーバーライドするはずでしょ。オーバーライドしたらもうB.foo()にはfoo()では >アクセス>できなくなっちまうの。よーするにB.foo()にfoo()でアクセスできたのは「たまた >ま」なわけ。 だからFRIDAYでWeek.FRIDAYにアクセスできるのは「たまたま」だよ。もしCalender.FRIDAYが定 義されてたらそっちを見に行くんでしょ。 |要はWeekの部分の定数とCalender部分の定数を |「同じ名前でも別の定数としてしっかり管理する」って事よ。 ってあなたが言うからA.foo()とB.foo()の例を持ち出したんだけど、 >スーパークラスから自然に継承されるのはB.foo()の機能じゃなくてメッソドっちゅー外側に >対する振る舞いだけなんだって。わかってる? なんて言われたら、 「Weekから自然に継承されるのはWeek.FRIDAYの値ではなくて定数名(FRIDAY)っちゅー外側に 対する振る舞いだけなんだって。わかってよ」 と返すしかないのだが。
326 :
225にあらず :2000/11/16(木) 13:46
>間違ってるというのは主観的な基準によるものなのか?(なら好きにしてくれ) オブジェクト指向と名乗ってるJavaの言語仕様に照らし合わせてっつー事よ。 あなたそのクラスを外から参照する人の事考えてクラス設計してるか? あなたのやってる事は継承にしろ実装にしろ全部クラスの外側に剥き出しなの。 アンタの今作ってるクラスを使って他の奴がプログラムする時にあなたのクラスが予期しない動作を起こす可能性は極力減らすべきだと言ってるんの。 あんたが外側のクラスからは使われないと思って継承してきたメッソドやpublic値が他のクラスから使われてしまった時に予期しない動作が起こる可能性があるの。わかる? >だからFRIDAYでWeek.FRIDAYにアクセスできるのは「たまたま」だよ。もしCalender.FRIDAYが定 義されてたらそっちを見に行くんでしょ。 この場合はCalender.FRYDAYを見に行くの「も」たまたまになっちゃうのよ。 CalenderのインスタンスMyCalがWeek型にキャストされたらMycal.Foo()はCalender.Foo()を見に行くけどMycal.FRYDAYはCalender.FRIDAYを見には行かないよ?Week型を継承したって事はそう言う使われ方もされ得るって事だと言いたいの。
327 :
224 :2000/11/16(木) 15:38
>>326 >オブジェクト指向と名乗ってるJavaの言語仕様に照らし合わせてっ
#言語仕様にはちゃんとのっとってるぞ。
それが主観的な基準というものだ。具体的な不利益・利益だけを問題
にしている。
publicになっちゃうってのは欠点だねって認めてるんだけど。
それが問題になるなら使わなければいいし、デメリットより利点が上
なら使うだけだよ。でそれはプロジェクトによって何を重視するかが
違うんだから、一般的には議論できないって書いたよね?
>この場合はCalender.FRYDAYを見に行くの「も」たまたまにな…
publicになっちゃうから駄目ってことで、上と同じね。
(「メソッドを継承する」とかいう言い方やめてほしいなぁ… メンバ関数やメッセージの「名前」を親からもらって、自分自身で 実装されていないときに親の定義が使えるのが、「継承」ってもん だろ。)
329 :
名無しさん@お腹いっぱい。 :2000/11/17(金) 14:11
<jdk>/jre/libにfont.propertiesってあります。 これを改造して自分だけのfont.propertiesを作って、実行時に使いたいのですが。 自分専用のマシン(そして配布とかを考えない)なら、/jre/libの中をいじっても かまわないけど、共有のマシンでやっているので、個人レベルでなんとかしたい です。 java -Dfont.properties=font.properties とかってやればいいのかと思ったけどだめでした。
330 :
名無しさん@お腹いっぱい。 :2000/11/17(金) 20:06
332 :
225 :2000/11/18(土) 02:49
>>297 どうも224さんは勘違いをしている気がします。
>だからこいつが何を返してくるかはわからないけど、MONDAY
>という抽象的な値が使いたいわけ。
>値の内容は実装詳細だからいつ変わるかわからないし、それが
>どこで定義されてるかは知りたくない。
MONDAYという名のフィールドを持つinterefaceを継承しなおして
再コンパイルすれば「MONDAYの値が動的(?)に変更される」と
224さんは言いたいんですよね、たぶん。
しかしなあ、結局コードを書きなおすわけでしょ?人間が。
だったらimplemensするinterefaceを書き直すのも
A.MONDAYをB.MONDAYに書きなおすのも全く変わらないよなあ。
そもそも人間がコーディング時に親interefaceを明示しておき
ながら「知りたくない」というのも解釈が難しいね。
333 :
225 :2000/11/18(土) 02:57
>あと可読性と言うのをどう考えてるの?文字通り読みやすさ? >俺はバグが入りにくいこと、変更しやすいこと、バグがあったとき >原因を特定しやすいこと、とかひっくるめてなんだけど。 全くもって同感なんだけれど、無意味なimplementsをした方が 保守が難しくなると考える方が当然だと思うんだけれどなあ。 あと、 import XXX.*; とかやる人が保守性とかについて語るのもどうかなと思うぞ^^;
>>333 import XXX.YYY
だと、そのクラスが使われなくなったらきちんと削除できる?
そうしないと可読性は下がると思うけど。
>保守が難しくなると考える方が当然だと思うんだけれどなあ
思うのは勝手だけど、根拠はあるのかとしつこく聞いてるのです。
#publicになっちゃうというのはがいしゅつ
336 :
225 :2000/11/18(土) 13:20
>>334 >だと、そのクラスが使われなくなったらきちんと削除できる?
それも、パッケージを丸ごと取り込んでる人が言うべき事ではないぞ^^;
あなたは不要なクラスを何十個もまとめて取り込んでおきながら、
1つ2つの余計な取り込みを気にするのですか?
かなり矛盾してないかい?
なぜimportでのワイルドカードの使用がまずいかというと
1.可読性の低下
コード中に出てくるクラス名がどのパッケージに属するのかが、コードを
読む人にはわからなくなってしまう。
2.importできるクラス数の限界
importできるクラス数には限界があるようで、それを超えると不具合が生じ
る可能性がある。むやみやたらにワイルドカードを使用した場合、その制限
を超える可能性が高くなってしまう。
3.クラス名の重複によるバグ
importした複数のパッケージに同じ名前のクラスが存在したばあい、そのクラ
スを自クラスで使用しようとしたばあい、「クラスがあいまい」になってしま
う。(パッケージ名を明示しないかぎりコンパイル不可)
さらに、自クラスのパッケージにも存在した場合にはコンパイルエラーにすら
ならず、意図したクラスとは全く別なクラスを使用する事になってしまう。
これは発見が困難なバグの原因となる。
337 :
225 :2000/11/18(土) 13:31
>>334 >思うのは勝手だけど、根拠はあるのかとしつこく聞いてるのです。
1.可読性の低下
そのフィールドがどこに定義されているのかがコードを読む人には
わかりにくくなってしまう。
2.値の重複
自クラスにも同じフィールド名が存在したばあい、そちらが優先
されてしまい、意図した値が使用されなくなる。
3.不要なデータの取り込み
implementsするinterefaceにある自クラス側から使用するつもりの
無い(コーダーが意識すらしてないかもしれない)フィールドまで
取り込んでしまう。2と合わせて危険。
これらを無視して、224さんのいう動的(?)なimplementsが優先
しなければならない理由は無いと思う。
338 :
224 :2000/11/18(土) 14:17
>>336 >1つ2つの余計な取り込みを気にするのですか?
import XXX.* のならそのいパッケージが使いたいと読める。
import XXX.YYY だと何か理由があってほかのクラスを使っていないと読めるので
可読性が低下すると書いた
importにはドキュメントとしての意味はないというなら別にいいが。
>1.可読性の低下
>コード中に出てくるクラス名がどのパッケージに属するのかが、コードを
>読む人にはわからなくなってしまう。
???読むときにはどの道わからないんじゃない?
調べやすいってならわかるけど。(それはデバッカーの便宜?)
>2.importできるクラス数の限界
それは知らんかった。でもそうなったら考えるとするよ。
>3.クラス名の重複によるバグ
これはよく言われることだけど、おかしい。
XXX.FooClass を使いたいのに自パッケージの FooClass をみてしまうのは
import XXX.FooClassを忘れれば同じことでしょ。
#複数パッケージの場合はコンパイルできないんだから問題ないよね?
>>337 >1.可読性の低下
>そのフィールドがどこに定義されているのかがコードを読む人には
前にも書いたけど、なんで読むときに定義されている場所を知らなく
ちゃいけないの?
デバックしてるときには便利だが、それをいったら実際にどのメソッ
ドが呼ばれているかなんてますますわからないぞ。
そのためにデバッガがあるんでしょ?
読んでるときにはどこで定義されるか知る必要ないんだって。
>2.値の重複
>されてしまい、意図した値が使用されなくなる。
意図した値がどうしてもClass.変数名じゃないとあかんのなら
Class.定数名でいいと思うが。(俺はClass.変数名をやめろといってる
わけじゃないぞ)
>3.不要なデータの取り込み
>implementsするinterefaceにある自クラス側から使用するつもりの
>無い(コーダーが意識すらしてないかもしれない)フィールドまで
>取り込んでしまう。2と合わせて危険。
2を否定したから別にいいんだよね?
340 :
225 :2000/11/18(土) 18:01
>>338 >???読むときにはどの道わからないんじゃない?
>調べやすいってならわかるけど。(それはデバッカーの便宜?)
package aaa;
import bbb.*;
import ccc.*;
import ddd.*;
import eee.*;
public class Foo{
Hoge h = new Hoge();
・
・
・
}
コードを読んでる人にとってHogeクラスが未知の場合、
まずどこのパッケージから探せばよいのですか?教えて下さい。
とりあえずaaaの中から総当りで探します?
341 :
225 :2000/11/18(土) 18:03
>>338 >import XXX.YYY だと何か理由があってほかのクラスを使っていないと読めるので
>可読性が低下すると書いた
使っていない理由は、それを使わないからです。(それ以外にあるのか?)
使用しないクラスを明示する必要があるのか教えて下さい。
そもそも使用しなくなったimport文は削除するのが常識なんだけれど。
342 :
225 :2000/11/18(土) 18:10
>>338 >XXX.FooClass を使いたいのに自パッケージの FooClass をみてしまうのは
>import XXX.FooClassを忘れれば同じことでしょ。
そんな事すら忘れる人はimport XXX.*すら忘れるのではないか?
343 :
225 :2000/11/18(土) 18:14
>339 >デバックしてるときには便利だが、それをいったら実際にどのメソッ >ドが呼ばれているかなんてますますわからないぞ。 >そのためにデバッガがあるんでしょ? >読んでるときにはどこで定義されるか知る必要ないんだって。 確かにそうだ。 でも、コンパイル時に明らかに決定している「固定値」をワザワザ どこで定義されているのかわからなくする必要性が何故あると思う のか教えて下さい。
なんか、だんだんJavaHouseの高木さんの気持ちが理解できるように なってきました^^;
345 :
225 :2000/11/18(土) 18:30
あと、そもそも何故それほどまでにimplementsにこだわる必要性が あるのかを教えて下さい。 再コンパイル時に、それまで使用していたinterefaceと全く同じ フィールドを持つinterefaceを新たにimplemensしなおせば、そ れで元通り使えるからですか? それはA.MONDAYをB.MONDAYと書きかえるのに比べてどれほど 楽だというのですか? そんな、コンパイル時にたった一度だけしか行わない単純作業が、 これから他の複数の人間が複数の機会に何度も読むかもしれない コードをあえて無意味に複雑化するデメリットよりも優先されま すか?
346 :
外野 :2000/11/18(土) 19:08
すげー書き込みだなー Java初心者なんで素直に読んでます import数に制限があるなんて初めて聞いたぞ
349 :
224 :2000/11/18(土) 22:39
>>340 長文失礼
Hoge h = new Hoge();
が出てきたらいちいちファイルの上の方のimportを検索するんでしょ?
同じようになにか検索機能使えばいいじゃん。だから調べやすいってのには
同意してるよ。
>使用しないクラスを明示する必要があるのか教えて下さい。
パッケージのすべての機能を利用するのか、一部だけを利用するのかを
明示しておいたほうが、読むときに楽だと思うが。
>そもそも使用しなくなったimport文は削除するのが常識なんだけれど。
それを維持するのが非常に大変なのを知ってるの?
もしかしてコーディングはしたことないのでしょうか?
>そんな事すら忘れる人はimport XXX.*すら忘れるのではないか?
JTableを使っているコードがJTableHeaderを使うようになったときにimportを
増やさなくてはいけないのは忘れがちでしょ?
>でも、コンパイル時に明らかに決定している「固定値」をワザワザ...
おいおい、コンパイル時に決定しているかどうかは関係ないだろ。
そんなこといったらメンバ変数にthis.変数名でアクセスしろってことだけど。
#高木さんも時々自分の説を正当化するためにめちゃくちゃな論理
#を使うけど、その点では似てますね。
>あと、そもそも何故それほどまでにimplementsにこだわる必要性が
>あるのかを教えて下さい。
TokyoDataBases.CUSTOMER_SERVER_NAME
OsakaDataBases.CUSTOMER_SERVER_NAME
があったときにコードの抽象度を高めるためにはクラス名を明示した
くないでしょ。
>それはA.MONDAYをB.MONDAYと書きかえるのに比べてどれほど
すべてのA.XXXをB.XXXに変えればいいのなら簡単だけど、そうとは仮定
できないでしょ。
>コードをあえて無意味に複雑化するデメリットよりも優先されま
複雑化じゃない、抽象化だ。
350 :
名無しさん@お腹いっぱい。 :2000/11/18(土) 23:33
>が出てきたらいちいちファイルの上の方のimportを検索するんでしょ? >同じようになにか検索機能使えばいいじゃん。 もう、滅茶苦茶だよ。 じゃあなにか?例えばviとかでそのコードを読んでたときは自力で全ての パッケージの中を順番にしらみつぶしに探せといっているの? import文で明示してあげればそんな無駄な作業は全く発生しないんだよ? 相手にそんな完璧に無駄な作業をさせておいてまで何故import文に*を使用 しなければならないのか? どうも224さんは自分が楽をする事しか頭にないようですね。 >パッケージのすべての機能を利用するのか、一部だけを利用するのかを >明示しておいたほうが、読むときに楽だと思うが。 あなたのことだから、多分import java.util.*;とかする事も当然あるか と思いますが、そのパッケージ内の全てのクラスを使用するクラスを毎回 作っているとでもいうのですか? そして、具体的にどういう場合に楽になるの??? import java.util.Vector;とか有ったら、「なぜHashtableやその他のクラス は使用しないんだ??」とか疑問に思ったりする人がいるのか? >それを維持するのが非常に大変なのを知ってるの? >もしかしてコーディングはしたことないのでしょうか? import文に*つかう人や、imterefaceの本来の目的から違ったimplementsを 使用する人に言われたく有りません。もちろん仕事でjavaは使用してます。 逆にあなたは他人のコードを保守したことがあるのですか? >おいおい、コンパイル時に決定しているかどうかは関係ないだろ。 >そんなこといったらメンバ変数にthis.変数名でアクセスしろってことだけど。 だから、どうして明確であるフィールドの宣言場所をワザワザ無意味なimport を用いて読みづらくする必要があるのか教えて下さいよ。 >TokyoDataBases.CUSTOMER_SERVER_NAME >OsakaDataBases.CUSTOMER_SERVER_NAME >があったときにコードの抽象度を高めるためにはクラス名を明示した >くないでしょ。 だから、なんで明示しているものを抽象化しければならないのか甚だ 疑問なんだけれど。そこを詳しく教えて下さい。 コードにCUSTOMER_SERVER_NAMEとだけあるせいで、 TokyoDataBases.CUSTOMER_SERVER_NAMEと OsakaDataBases.CUSTOMER_SERVER_NAMEをうっかり勘違いしてしまう人が 居たとしても良いわけだ? >複雑化じゃない、抽象化だ。 なぜ明示可能なものを抽象化(ですらないけれど。import文でコンパイル時に 明示してるし)しなければならないのか教えて下さい。
350は僕の文ね。 しかし224さんは抽象化の意味をかなり誤解していると見た。
「抽象化」については、180度意見の違う同士の議論がどっかにあったなぁ…
横からみてると、224の人のいってることが なんとなく厨房臭い気がするが…
おれも、224の言ってることのほうがへんな気がするけど、 いつのまにか225も同じレベルに降りてしまっているような気もする。
横レスand長文失礼。 224さんは、誤解しているというより実装詳細という言葉に縛られすぎ なのではと思います。 224さんへ。 定義と実装を分離して“ひとつ”のinterface定義を使いたおすことに 意味があるのに、定数という実装そのものを使って、 それが全然別のinterface間で“たまたま”名前が同じだったから 実装に依存していない、抽象性がある、というのはちがうと思いました。 少なくともJavaにはそんなことはわからないでしょうね。 例えば、私の作ったinterfaceにCUSTOMER_SERVER_NAMEって定数があったら 私と224さんのinterfaceには意図しないプログラミング上の抽象的な関係が あるのでしょうか?あったら私が困るし(interfaceの独立性が・・・)、 でも無いと224さんが困りそうだし。 CUSTOMER_SERVER_NAMEって言葉の意味を掴んで名前をつけるのでしょうが、 それだと抽象性って言うのはネーミングセンスに依存しちゃう。 たしかに名前が同じというのもある種の抽象性といえると思います。 でもそれは、人間が見たら抽象性が感じられる、というものです。 コンパイラは「なんか違うinterfaceに同じ名前があるなあ」ということ すら考えないと思いますよ。 ああ、そうそう、同じ名前の定数があるinterfaceを2つ implementsしたいときはどうします? 実装詳細というなら、それこそgetCustomerNameメソッドのある interfaceを作って、それを実装したTokyoDatabasesクラスと OsakaDatabasesクラスを作ってinterface宣言に代入して getCustomerNameメソッドを呼び出すべきです。 面倒だけど、それが今のJavaにもわかるレベルの抽象性です。 interfaceにできることはせいぜいプログラムレベルの話で オブジェクト指向もプログラミングの域を出るような万能のものではないと 思います。224さんのような高度な抽象性は、少なくともjavaのinterfaceの 身に余ることでしょう。 でも、テクニックとしては定数interfaceをimplementsすることはあります。 定義する定数などが多い場合は、すべてにTokyoDatabases.とつけるよりは implementsするほうを選ぶ場合があります。だからimplementsの部分を 書き換えるだけですべて直せるテクニックとして有用だと思います。 また、人間には抽象的に見えるということもとても意味があると思います。 コーディング規約やプログラミング論に属する内容ではないでしょうか。 (最初からそのレベルの話をされていたのならごめんなさいですが。) 考えさせられるところの多い議論でついつい長文になってしまいましたが 以上です。 勘違いがあったり話の腰を折っているようだったらすいません。
225のいってることが普通で正しい。 224のいうのは抽象化ではなく、厨笑化だな。 224はプロパティー使ったほうが幸せにならんか?
まぁ、抽象化と汎用化がごっちゃになってる例かもね。
358 :
名無しさん@お腹いっぱい。 :2000/11/19(日) 16:30
違うディレクトリにあるクラスどうしで、 やりとりをしたいのですが、うまくできません。 基礎的なところですいませんがヒントを頂けたらと 思います import java.applet.Applet; import java.awt.Graphics; このクラスをapplet/ において public class Applet0 extends Applet{ public void paint(Graphics g){ Applet1 a = new Applet1(); g.drawString(a.getData()@` 50@` 50); } } でこのクラスを applet/test/ においてます public class Applet1{ Applet1(){ } public String getData(){ String a = "hello"; return a; } } で cd (略)/applet javac Applet0.java javac -classpath test/ Applet1.java でコンパイルして ブラウザでApplet0を表示させたのですが、 なにも文字が表示されません Applet1をApplet0と同じ階層においてコンパイルした 場合はうまく表示できました
>358 コンパイル時にCLASSPATH指定してるのに実行時に指定してないから。
360 :
名無しさん@お腹いっぱい。 :2000/11/19(日) 20:10
4444
361 :
IBMの研修のテスト問題 :2000/11/19(日) 20:38
* ** * * * * ***** ↑入力した数と底辺が同じ数になり、中が空洞(↑は5を入力)。 こんなのできる人いるの? これが出来なくて落ちた人多いでしょ?
362 :
224 :2000/11/19(日) 21:25
>じゃあなにか?例えばviとかでそのコードを読んでたときは自力で全ての >パッケージの中を順番にしらみつぶしに探せといっているの? findで一発じゃんもしくは、すべてのクラスを列挙した(lsなりdir)した ファイルを作っておけばいいんじゃないの?(俺はfindだけど) >import文で明示してあげればそんな無駄な作業は全く発生しないんだよ? コンパイル時のクラスパスが複数あったら結局全部探すんだよ。 あなた本当にimport.*使わないの? >パッケージのすべての機能を利用するのか、一部だけを利用するのかを >明示しておいたほうが、読むときに楽だと思うが。 まあこれは忘れてくれ。俺がそう思ってるだけだ。 >>それを維持するのが非常に大変なのを知ってるの? >もちろん仕事でjavaは使用してます。 結局それを維持するのが非常に大変なのを知ってるの? #importについてはこれ以上やると話がややこしくなるからやめない? >だから、どうして明確であるフィールドの宣言場所をワザワザ無意味なimport interfaceの間違いだよね。だから変更のときに楽だから。 >だから、なんで明示しているものを抽象化しければならないのか甚だ >疑問なんだけれど。そこを詳しく教えて下さい。 抽象化の利点は主に、変更のときにコストが減ること。 >OsakaDataBases.CUSTOMER_SERVER_NAMEをうっかり勘違いしてしまう人が >居たとしても良いわけだ? 勘違いも何もどっちでもいいんだよ。CUSTOMER_SERVER_NAMEにアクセスし たいのであってそれが何なのかは知らない、そういう場合に使うんだ。 そうじゃなくて何かはっきりさせたかったら明示するよ。 >なぜ明示可能なものを抽象化(ですらないけれど。import文でコンパイル時に >明示してるし)しなければならないのか教えて下さい。 import???
363 :
224 :2000/11/19(日) 21:52
>>355 >224さんは、誤解しているというより実装詳細という言葉に縛られす
imterfaceで定数を実装する方法の利点を、説明するのにこの言葉が
一番説明しやすかっただけです。
>定義と実装を分離して“ひとつ”のinterface定義を使いたおすことに
>意味があるのに、定数という実装そのものを使って、
>それが全然別のinterface間で“たまたま”名前が同じだったから
もちろん「たまたま」じゃありません。意図して名をつけるのです。
しかしこの例は悪かったかも。
TokyoDataBases.CUSTOMER_SERVER_NAMEが
PrimeDataBases.CUSTOMER_SERVER_NAMEに変わったらのほうがいいか。
>少なくともJavaにはそんなことはわからないでしょうね。
そのとおりです。コンパイラの助けは借りられないでしょう。
>例えば、私の作ったinterfaceにCUSTOMER_SERVER_NAMEって定数があったら
>私と224さんのinterfaceには意図しないプログラミング上の抽象的な関係が
>あるのでしょうか?あったら私が困るし(interfaceの独立性が・・・)、
>でも無いと224さんが困りそうだし。
別になくても困りませんよ。
>CUSTOMER_SERVER_NAMEって言葉の意味を掴んで名前をつけるのでしょうが、
>それだと抽象性って言うのはネーミングセンスに依存しちゃう。
そういう意味で抽象化という言葉を使ったのですが。なぜ言語がサ
ポートしない抽象化は駄目なの?
>ああ、そうそう、同じ名前の定数があるinterfaceを2つ
明示します。必要になったことはありませんが。
224さん。 掲出文が長文で申し訳ないですが全文お読みくださいましたか? >言語がサポートしない抽象化は駄目なの? 後半部分に、そのような抽象化も存在し、より高度だと思うと書いてあります。 でも、これでだいぶ整理できました。 「意図して同じ名前を付けるという行為は 名づけた人の内部における抽象性の現れであり その主な利点は変更のときにコストが減ることである」 横レス失礼しました。抽象化という深い議論だったのでついでしゃばりました。 私の意見はこれでおしまいです。
>>364 ちゃんと最後まで読みましたよ。
あの一文はほかにそう思っている人も多いかなと思って書きました。
勘違いさせてごめんなさい。
366 :
225 :2000/11/19(日) 23:14
こうなれば、とことん最後まで付き合いましょう! >>findで一発じゃんもしくは、すべてのクラスを列挙した(lsなりdir)した >>ファイルを作っておけばいいんじゃないの?(俺はfindだけど) 繰り返しになるけれど、なぜ相手にそんな余計な作業をさせてまでimport文に ワイルドカードを使う必要性があると考えるのですか? コーディング時に一度だけプログラマが苦労するのと、今後複数の他人が複数の 機会に渡ってコードを読む時に苦労するのとでは前者の方がコストが低いと思う のですが、それは貴方にとってはとるに足らない事なのですか? >>コンパイル時のクラスパスが複数あったら結局全部探すんだよ。 >>あなた本当にimport.*使わないの? 探すといっても、僕の経験では多くてもimport分は2、30行くらいだよ。 その中から探すのは、全てのパッケージの中から探すよりも随分楽だよね。 あと、import文にワイルドカードを使用した事は、僕は断じて一度たり とも無い。仕事で他人に見せる物はね。 実を言うと、一番最初に仕事でJavaを使用した時のコーディング規約が、 ワイルドカードの仕様を禁じていて、僕もその時は「めんどくさい」とか 思ってたんだけれど、他人のバグ改修とかしているうちにその正しさが 骨身にしみてわかったよ。 >>結局それを維持するのが非常に大変なのを知ってるの? そんな事言われたって、仕事で実際にやってるんだもん。 繰り返すけれど、あなたは他人のコードを保守したりする仕事をした事はあるの かな? 僕はそういう仕事で苦労するたびに「僕は絶対こんないいかげんなコード は書かないぞ」と心に誓っちゃうんだけれど。 >>#importについてはこれ以上やると話がややこしくなるからやめない? 上の質問に答えて欲しいです。 貴方が間違いを見とめるか、もしくは「だって自分が楽したいんだもん」と 言うのなら止めましょう。
367 :
225 :2000/11/19(日) 23:35
>>362 >>interfaceの間違いだよね。だから変更のときに楽だから。
なるほど、楽なのですか。でも、interface名.フィールド名
がコードを読む人にとって楽であることも貴方は見とめてま
したよね。
じゃあ、どちらがより重要でしょう?
コーディングする時だけ楽なのと、コーディングの後で他人が
読むときに何度も楽できるのと。
>>抽象化の利点は主に、変更のときにコストが減ること。
この場合のコストってさ、implementsするinterface名を変更
する事が、複数のinterface名.フィールド名の名を変更する
事よりも楽だって事だよね。
でもさ、まず第一にinterface名をそんなに頻繁に変えるなんて
事が現実にあるのかな?もちろんタマには変えるけれどさ、その時に
A.MONDAYをB.MONDAYに変えるのってそんなに大変な事なのかな?
例えばWindowsに標準でついているメモ帳ですら文字列の検索機能は
付いているよね。その時に"A."で検索してあげれば良いと思うよ。
コーダーがそうやって一度だけ検索してあげたらさ、今後他の人が
この定数の値はどこで定義されてるんだ?って検索する必要がなくな
るんだしね。
その一方で、フィールドのみ定義したinterfaceをimplementsしてる
クラスを保守した事は何回かあるんだけれど(正に今も)、
僕がそれで苦労した事は沢山経験があるわけで、貴方の言うメリット
が僕の言うデメリットより頻繁に発生する事例だとは到底思えないんだ
よね。
368 :
225 :2000/11/19(日) 23:44
>>362 >>勘違いも何もどっちでもいいんだよ。CUSTOMER_SERVER_NAMEにアクセスし
>>たいのであってそれが何なのかは知らない、そういう場合に使うんだ。
public class Hoge implements TokyoDataBases{
public String getCustomerServerName(){
return CUSTOMER_SERVER_NAME;
}
}
貴方の例を使用するけれど、良く考えてみて。
この場合、CUSTOMER_SERVER_NAMEは明らかにTokyoDataBaseのフィールドを
指してるよね。コーダーも当然それを認識しているわけだよね。
明示しているのに抽象化というのはおかしくないかな?
抽象化というのはさ、コードを書きなおしたりしなくても汎用的につかえる
時にこそメリットを発揮するものではないのかな?
だって書きなおすんだったら別に抽象化してなくたって良いわけじゃない?
誤字とかは適当に正しい文字とかを推測してよんでちょ。
あう。色々考えてたんだけど、 なんか225さんの言う事がいちいちもっとも過ぎて 口はさめないっす。うげげ。 という事で224さんも225さんとの議論に終始きぼん。 #かなり厨房だな、俺も…。
終始をきぼんしてどうする?
なんと言うか 理想と現実な感じ 224はばけつでどばどばするタイプなのか?(古
>理想と現実な感じ それほどでもないでしょう。 せいぜい、まともといびつ、 って程度の違い。 いびつなのはもち偶数の方ね。
374 :
224 :2000/11/20(月) 13:18
>繰り返しになるけれど、なぜ相手にそんな余計な作業をさせてまでimport文に >ワイルドカードを使う必要性があると考えるのですか? 相手にとってそんな余計な作業と考えていないから。 >>コンパイル時のクラスパスが複数あったら結局全部探すんだよ。 についてはどう思うの? >コーディング時に一度だけプログラマが苦労するのと、今後複数の他人が複数の >機会に渡ってコードを読む時に苦労するのとでは前者の方がコストが低いと思う >のですが、それは貴方にとってはとるに足らない事なのですか? 要らなくなったimportを削除しないなら(少なくとも強制しないなら)あなたの 言う通りだ。 でも俺はimportしてたのが要らなくなったら削除したいから、頻繁に 使うクラスが変わるパッケージは*で、そうでないやつはXXX.YYYを使うのよ。 >>結局それを維持するのが非常に大変なのを知ってるの? >そんな事言われたって、仕事で実際にやってるんだもん。 大変だよね。これは十分に使わない理由になると思うぞ。 >繰り返すけれど、あなたは他人のコードを保守したりする仕事をした事はあるの 最近はほとんど保守だよ。ほとんど毎日変更。だから変更のコストを押さ えるのは重要なことなんだよ。 >貴方が間違いを見とめるか、もしくは「だって自分が楽したいんだもん」と 自分が楽したいのではない。プロジェクト全体で楽したいのだ。 あなたのプロジェクトでは、import.*は禁止なのは良く分かった。その点で「どん なプロジェクトでもimport *に利点がある」と読める表現をしたのは間違いだった。 でもそれはプロジェクト依存だ。変更容易性より厳密性が重視されているとかプロ ジェクトに関わる人間が非常に多いかとか。 ちなみにimplementsのほうは最初から「どんな場合でも使うべき」とはいってないぞ。
375 :
224 :2000/11/20(月) 13:19
>なるほど、楽なのですか。でも、interface名.フィールド名 >がコードを読む人にとって楽であることも貴方は見とめてま いつ認めたの? 楽になるのは読むときじゃなくてそれが実際に何を示してい るのか知りたいとき(大体デバック時でしょう)だよ >この場合のコストってさ、implementsするinterface名を変更 >... >この定数の値はどこで定義されてるんだ?って検索する必要がなくな だから全てのA.XXXXをB.XXXXに替えれば済むなら問題ないと前にも 書いたじゃない。問題はA.MONDAYのみB.MONDAYに変わるとかコードの中で "デフォルトの"CUSTOMER_SERVER_NAMEにアクセスしてる部分と TokyoDatabases.CUSTOMER_SERVER_NAMEにアクセスしてる部分が混在してる ときなのよ。 >その一方で、フィールドのみ定義したinterfaceをimplementsしてる >... >が僕の言うデメリットより頻繁に発生する事例だとは到底思えないんだ 逆に俺はメリットを感じた経験が多くあるのよ。 >public class Hoge implements TokyoDataBases{ > public String getCustomerServerName(){ > return CUSTOMER_SERVER_NAME; > } >} この場合はTokyoDataBase.CUSTOMER_SERVER_NAMEって書くぞ。そうじゃなくて public XXX getCustomerByID( int id ){ openDatabae( CUSTOMER_SERVER_NAME ); ... } みたいなときに使うんだよ。
>375 >この場合はTokyoDataBase.CUSTOMER_SERVER_NAMEって書くぞ。そうじゃなくて >public XXX getCustomerByID( int id ){ > openDatabae( CUSTOMER_SERVER_NAME ); > ... >} >みたいなときに使うんだよ。 やっぱ、プロパティーで十分じゃん。
>だから全てのA.XXXXをB.XXXXに替えれば済むなら問題ないと前にも >書いたじゃない。 訂正。やっぱ少しでもソースコードを変更するのは恐い。変更箇所が少な いほうが、バグの入り込む余地は少ないと思う。 さらにベースクラスでimplementsしている場合なら派生クラスはリコンパ イルだけで済む。
378 :
名無しさん@お腹いっぱい。 :2000/11/20(月) 22:16
>>>コンパイル時のクラスパスが複数あったら結局全部探すんだよ。 >についてはどう思うの? 「全部探す」というのが少しだけ解らないけれど、 とりあえず、コード読んでるうちに未知なクラス名が出てきたら、 確かにそれを探すよね。 IDEとか使ってる人とかは、さらっとクラスの検索機能を使っちゃ うんだろうけれど、そういうツールを使ってない人や、使ってたと しても幾つも候補が上がってしまってよく解らない場合には次に import文を見に行じゃない? そんな時に import xxx.xxx.Yaa; import yyy.yyy.Foo; import zzz.zzz.Hoge; とか書いてあれば、「ああ、Hogeはzzz.zzz配下にあるんだな」と 即座にHogeクラスの調査に掛かれるけれど、 import xxx.xxx.*; import yyy.yyy.*; import zzz.zzz.*; と書いてあれば、「Hogeの調査の前にHogeの有りかをまず探す」と いう余計なステップが入るんだよね。 それでも224さんだったらサラッと探せちゃうのかもしれないし、 それ専用に簡単なツールを作るのも厭わないのかもしれないけれど、 僕が見たところでは、そうでない人のほうが多いような気がする。 JavaHouseとか他者のグループを見ててもimportはフルパスで書かれて た方が好まれる傾向にあるみたいだし、実際に僕の同僚達も怠け者ばか りだからね。 だから、もしも224さんの周りで*の方が好まれてるとしたら、それは特別に 凄い集団なのかもしれないよ。 確かに僕みたいに全部フルパスっていうのは逆に極端なのかもしれないから 取りあえずjava.utilみたいな、広く用いられているパッケージとか、 またはimport文が一つしか無いようなコードだったら*を使う事も考えて みようかなとも感じてます。
379 :
255 :2000/11/20(月) 22:28
378も僕ね。 >>要らなくなったimportを削除しないなら(少なくとも強制しないなら)あなたの >>言う通りだ。 >>でも俺はimportしてたのが要らなくなったら削除したいから、頻繁に >>使うクラスが変わるパッケージは*で、そうでないやつはXXX.YYYを使うのよ。 確かにうっかりimport文を付け忘れたり、消し忘れたりする事はありがちかも知れ ないね。だから、自分が書いているコードのimport文に*を使うのは確かに有効な 手段かも。 それと同時に、importをフルパスで書いてあげると読みやすいのも又事実で、 特にプロジェクト独自の普通の人には知られてないようなパッケージとかだと その有難味は大きく増すよね。 だから、コードの変更が少なくなって来る時を見計らってimport文を見やすく修正 してあげれば、他人にも見やすくなって一番良いと思いました。
380 :
255 :2000/11/20(月) 22:52
>>自分が楽したいのではない。プロジェクト全体で楽したいのだ。 実を言うと、崩壊しちゃったプロジェクトとかにも僕は参加した事が あるんですよね。僕が参加したせいで崩壊しちゃったとは思いたく 無いですけれど。 で、崩壊した後で「何故崩壊しちゃったのか」について僕なりに色々 考えてみたんですけれど、その中の一つに「とりあえず動けばいい」 というキーワードが浮かんだんです。 綺麗なコード書くのに時間掛けるなら、汚くても良いから動くものを つくれって事だよね。 でも、少し前に読んだ本に良い事が書いてあった。マネージャーに対 して「遅いように見えても、美しいコードを書くのが実は一番早いん ですよ」(たしかこんな感じ)と言ってやりなさいと書いてあったん です。 僕は結構本とかに影響されやすい人だからかも知れないけれども、 import文に*を使わない事とか、定数のみのinterfaceをimplementし ているクラスを見つけたら直接interface名.フィールド名を指すよう に変更しちゃう事は、じつは面倒なように見えるけれど、トータルと して考えればそれが一番最速な手段であり、楽をできる手段ではない かと考えるわけです。
美しいコードより、美しい構造を心がけています(なんつて)
382 :
255 :2000/11/20(月) 23:27
>"デフォルトの"CUSTOMER_SERVER_NAMEにアクセスしてる部分と >TokyoDatabases.CUSTOMER_SERVER_NAMEにアクセスしてる部分が混在してる >ときなのよ。 例えばこういう場合はどうするのかな? 複数つかっている定数のうち、その幾つかを別なinterfaceなりclassなりに 変える事って、多分interface名を変える事以上に発生しやすい事だと思うんですよ。 結果として、例えばコンな感じなんだけれど public class BaseBall extends Sports implements Player@` Stadium@` Rule{ public void playBall(){ System.out.println(XXX + "さんこんにちは"); System.out.println(YYY + "球場にようこそ"); System.out.println(ZZZ + "を守って楽しみましょう"); } } こんな時は public class BaseBall extends Sports{ public void playBall(){ System.out.println(Player.XXX + "さんこんにちは"); System.out.println(Stadium.YYY + "球場にようこそ"); System.out.println(Rule.ZZZ + "を守って楽しみましょう"); } } のほうがスっきりしてて良いと思うけれど こういう場合は(複数implemetsする必要が出てくる場合) 224さんはどうするのでしょう?
あ、255になってしまった
384 :
224 :2000/11/21(火) 21:38
>しても幾つも候補が上がってしまってよく解らない場合には次に この場合はコンパイルできないんだからありえないよね。 >「全部探す」というのが少しだけ解らないけれど、 クラスパスが/opt/javaと/homeだとしてimport XXX.YYYとあったら /opt/java/XXX/YYY.javaと/home/XXX/YYY.javaを探さないといけないでしょ? 俺はこのときのために結局find(正確にはfindを使うスクリプト)を使って るんだけど、だったらクラス名を指定しても変わらない。 #findは標準のツールだよ。Windowsならエクスプローラーの検索とか >僕が見たところでは、そうでない人のほうが多いような気がする。 確かにこれは気づかなかった。findを知らない人やコードを見るのに viや(viマスターってのもいるんだろうけど)そのほかへぼいエディタ で読む人もいるのかもしれない。 #ちなみに俺のEmacsはF11キーで先のスクリプトを呼び出して自動的に #そのファイルを開く そういう人たちと仕事をしなくちゃいけなくなったらいろいろ制限が かかるのだろう。 >System.out.println(Player.XXX + "さんこんにちは"); >System.out.println(Stadium.YYY + "球場にようこそ"); >System.out.println(Rule.ZZZ + "を守って楽しみましょう"); System.out.println(YB_TANISHIGE + "さんこんにちは"); System.out.println(STADIUM_YOKOHAMA + "球場にようこそ"); System.out.println(DONOT_THROW_CAN + "を守って楽しみましょう"); のほうがすっきりしてると思う。要は定数名のつけ方で、定数名だけでは 曖昧になる場合それの属するクラスを明記することによって曖昧さを取り 除く。 だから最初からこういう使い方を想定しないで定数名をつけているのなら ClassName.定数名のほうがわかりやすいだろう。 #ついでに言っておくとfind grepを使えばその定数がどこで定義されてい #るかは一発で見つかる。特にTagsファイルを作ってないときやIDEがない #時とかには有効だ。
385 :
224 :2000/11/21(火) 21:42
>この場合はコンパイルできないんだからありえないよね 訂正。ありうるね。多分こういう場合にはXXX.YYYを使うと思う。
386 :
2年目PG :2000/11/22(水) 19:29
一所懸命Java勉強中の者です。 jdk1.1.8で開発しています。jdk1.2.*は都合で使えない状況下にあります。 たとえば、ブラウザから要求があり、その内容によって、サーバー側であらかじめ用意されている 画像(JPEG)に対し、たとえば文字や別の画像を合成、新たにJPEGを生成し、ブラウザに返すようなものを考えています。 Java2Dなるものを使えば可能なようでしたが、Java2でなければいけないようです。 SUNのWebSiteにこうした画像処理をするためのライブラリがあったのですが、 私用しているOS環境(MacOS X Server使ってます。これも都合で他のOSへ 切り替えることができません...)で実験した結果、どうもエラーが出てしまいます。 この他に画像処理を扱うライブラリはありますでしょうか。ご存知の方がおられましたら教えていただけるとありがたいです。 (オープンソースのものですと助かります) 長々とすいませんでした。
387 :
名無しさん@お腹いっぱい。 :2000/11/22(水) 20:20
CLASSPATHを通してるところにhoge.jarを置いてその中のクラスを使いたい。 例外発生:使おうとすると、ClassNotFoundException。 そこで、 解決方法1: % jar xvf hoge.jarで解凍(?)して使う。 解決方法2:CLASSPATHに<mypath>/hoge.jarと完全指定する。 で解決するのはいいけど、CLASSPATHを通してるところに*.jarを放り込むだけで 使えるようにはできないもんですなんですか?一般ユーザなので、<jdk>/jre/lib/ext なんてところにはインストールできないです。
>387 できません。 CLASSPATHはjarを直指定しなければ駄目。 そのかわりjarがディレクトリ構造を固めてあったら、その ルートにCLASSPATHとおしたのと同じになるんじゃないかな? だから、なんかライブラリ作ったらその都度そのjarに追加 すりゃ良い。zipも可。
389 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 00:37
static inner class使うと嫌われますか? とあるstaticメソッド内部で、幾つかの変数の値をif文で決定して 使用していたのですが、メソッド本来の目的とは関連のないif文を わずらわしく感じて private static class Hoge{ int x@` y@` z; Hoge(XXX){ if(XXX){ x = XXX; y = XXX; z = XXX; }else{ x = XXX; y = XXX; z = XXX; } } みたいなinner classを作っておいて、あとは Hoge h = new Hoge(XXX); x = h.getX(); という感じでif文の代わりにして見ました。 でも、配列とかベクタとかを返すprivate static なメソッドで やった方が良いのだろうか? 前に参加したプロジェクトは何故かinner class禁止だったし。 static inner classとかは他人のコードで見たことすら無い。
390 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 14:10
>>387 クラスローダ自作すれば良いらしい
(でも自分で作ったこと無いスマン)
tomcatがまさにそんなことやってるね。
391 :
名無しさん@お腹いっぱい。 :2000/11/23(木) 16:18
インターフェースの使い方がいまいち良く分かりません。 ↓みたいにアプリケーションから実装したいクラスが、 条件によって変わって来る場合、使うってのはありなのでしょうか? 使い方のサンプルとか、どういうときに使うか教えて頂ければ と思います class app { public static void main(String args[]){ Aisatu a = hantei(args[0]); a.print(); } static Aisatu hantei(String s){ if (s.equals("Asa")){ return(new Asa()); } else if (s.equals("Hiru")) { return(new Hiru()); } else { return (new Itsuyanenn()); } } } interface Aisatu { public void print(); } class Asa implements Aisatu { public void print(){ System.out.println("ottuha-!"); } } class Hiru implements Aisatu { public void print(){ System.out.println("konchiwa!"); } } class Itsuyanenn implements Aisatu { public void print(){ System.out.println("Itsuyanen"); } }
392 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 04:30
すいません、質問させてください。 私はこれまでC++をやっていたのですが、Javaをすることになって さっそくJDK1.3をDLしてきてインストールしたのですが、 その過程で、PATHの設定というのはできたと思うのですが、CLASSPATH変数の 更新というのが具体的にどうするのか良く分かりません。 そのため、それをしないでHELLO WORLDを書いて実行してみたところ、 コンパイルはできるのですが、いざ実行しようとすると F:\jdk1.3\Programs>java Example1 Exception in thread "main" java.lang.NoClassDefFoundError: Example1 このようにエラーが出ます。単純な打ち間違いは無いと思うのですが、 どうすればいいのでしょうか? なにしろ、独習JAVAの最初の最初でして、手も足も出ません・・・。
>>392 とりあえず
>java -cp . Example1
でもやってみて。
CLASSPATHの設定は
Win9xならautoexec.batに 「set CLASSPATH=.」 を追加。
NT/2Kならコンパネの[システム]-[環境変数]で
CLASSPATHを追加、値を . に。
ところでC++をどのくらいやっていたのか聞いてもいいですか?
とか言ってみたり。
394 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 04:49
>>393 >ところでC++をどのくらいやっていたのか聞いてもいいですか?
たぶん「答え」はあなたの想像どおりだと思う。(ヲ
395 :
392 :2000/11/24(金) 05:11
-cp .で見事に通ってしまいました。 なぜに~?インストールガイドにはデフォルトで.になってるって書いてるのに・・・。 それでWin2Kですので環境変数にCLASSPASSを追加したのですが、 その後java Example1とやっても同じエラーが出ます・・・。??? 他になにかしておくべきことがあるのでしょうか? あ、C++の方は察しのとおり別にがりがりやってたわけではなくて 趣味みたいなもんです。なぜかフリーウェア公開してたりするんですが。
>>395 うーむ。
ところでCLASSPATHのスペルが違うと突っ込んでみてもいいですか?
とか言ってみたり。
397 :
392 :2000/11/24(金) 05:37
>>396 ああ、その点は単にこっち側だけのうっかりミスでした。
環境変数の方はTHに。ただ、ユーザ環境変数の方には新規に登録したのですが、
システム環境変数の方にはすでに、%QTjava%なるものがあったため特に手を
つけなかったのですが、こちら側も;で区切ってつけたしてしまうのでしょうか?
398 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 05:52
>>392 それ、実際にプロンプトからecho %CLASSPATH%してみて確認した??
399 :
392 :2000/11/24(金) 05:53
解凍してくださった方、ありがとうございました。 原因が分かりました!! というのも、翔泳社のHPを念のためチェックしに行ったところ、 よくある質問として、 Q.コンパイルしてクラスファイルの生成まではできるのですが、実行しようとすると、 「Exception in thread "main"java.lang.NoClass DefFoundError:Example1」 というエラーが表示されます。 A.CLASSPATHステートメントがあると、Javaの実行時に不具合が発生することがあります。 次のように行頭にREMを追加してコメントアウトしてください。 REM SET CLASSPATH=C:\Progra~1\LIB\CLASS.ZIP というQ&Aがありました。意味はよく分かりませんがこれを実行すると みごとに解決しました。なお、あらかじめ付け足したCLASSPATHは消しておきました。 まあ、出版社のHPをチェックするというのは基本でしたね。すいません。 しかし、こんなことSUNのHPのインストールガイドには書いてなかったなあ。 翔泳社様々といったところです。 このコマンドの意味分かります?
400 :
392 :2000/11/24(金) 06:00
あ、しかし、結局の所CLASSPATHは何も設定しなくていいのかなぁ・・・?
>このコマンドの意味分かります? 自分で書いてるが。 >REMを追加してコメントアウトしてください SET CLASSPATH=%QTJava%;. にしないとQuickTimeが動かなくなると思う。 それ以前にそれはどこでどう実行したんだ? もしやautoexec.bat?
402 :
392 :2000/11/24(金) 06:06
いやいや、単にコマンドプロンプトにコピペですよ。
403 :
392 :2000/11/24(金) 06:10
しかし、良く考えてみると、C:\Program Files\にLIBなんてフォルダは無いし そもそもこれはどこのファイルのどの行をコメントアウトしたんだろう?? ただ、正常になったから文句はないんだけど・・・。不思議だ。
404 :
392 :2000/11/24(金) 06:13
や、やっぱり直って無かったです・・・。 どうしてあの時は通ったんだ??? ますます不可解だ。どうすればいいんだろう?
何でコメント文を実行すると解決されるんだ。 誰か解説きぼん・・・ 環境変数は、システム環境変数->ユーザ環境変数の順に設定されるため、 同じ名前の環境変数がある場合にはユーザ環境変数で書き換えられる、はずだ。 何か自信なくなってきたが。 一番手っ取り早いのはシステム環境変数のCLASSPATHの最後に ;. を付け足すこと。
おっと。 そしてユーザ環境変数のCLASSPATH は %CLASSPATH% としてくれ。
407 :
392 :2000/11/24(金) 06:19
>>405 やはりそれだけで良かったみたいです。
う~ん、翔泳社・・・。食わせ物だ・・・。
何はともあれ、おそらくこれで解決したと思います。
ありがとうございました!!!
(本当に本当かな?ちょい不安)
>A.CLASSPATHステートメントがあると、Javaの実行時に不具合が発生することがあります。 >次のように行頭にREMを追加してコメントアウトしてください。 >REM SET CLASSPATH=C:\Progra~1\LIB\CLASS.ZIP これ解説になってないなぁ。昔class.zipに含まれていたクラスはJava1.1以降は 環境変数CLASSPATHの記述にかかわらず検索されるから、環境変数CLASSPATHに 含めちゃうと複数のバージョンが存在するときにはまるって定番パターンを避けるため のものだよね。だから必ずしもCLASSPATHを設定してはいけないわけではない。 で、java -cp オプションは環境変数CLASSPATHを上書きするから、-cp .を 指定すると、結果として実際のjava.class.pathにはJavaAPIとカレントディレクトリ を合わせたものになる。当初、392の環境でjava -cp . で実行できるように なったということは、どこかで環境変数CLASSPATHが妙な形で設定されて いたんだろうな。で、こういう設定を繰り返すときには、なにか変えたら echo %CLASSPATH%していちいち確認していくことが結局は近道なんだけど 392に理解してもらえてたのだろうか...
なんかよくわからん説明だな。訂正
「昔class.zipに含まれていたクラスはJava1.1以降は環境変数CLASSPATHの記述にかかわらず
検索されるから、環境変数CLASSPATHに含める必要はない。むしろ含めちゃうと複数の
バージョンが存在するときにはまる。だからコメントアウトしているのは読者の環境
が想定できないのでJavaAPIとカレントディレクトリしか使わない最低限の実行環境を作るためだよね。」
だね。で、392の失敗は、
http://java-house.etl.go.jp/ml/archive/j-h-b/021880.html#body の「ありがちな失敗」に見事に解説されているのではないだろうか。
ってecho %CLASSPATH%してみないと実際のとこはわかんないけどね。
410 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 07:51
>409 >Java1.1以降は環境変数CLASSPATHの記述にかかわらず JDK1.2以降ね。 >echo %CLASSPATH%してみないと実際のとこはわかんないけどね 完全じゃないね。ま、やらんよりはマシか。
>>388 ありがとうございます。
結局jarを直接指定でいきます。
412 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 12:34
import java.awt.*; import java.awt.event.*; import javax.swing.*; class FrameTest extends JFrame { public static void main(String args[]){ new FrameTest(); } FrameTest() { getContentPane().add( new PaintTest() ); setSize( 300@` 300 ); setVisible( true ); } } class PaintTest extends JComponent implements KeyListener { PaintTest() { addKeyListener( this ); } public void paintComponent( Graphics g ) { g.drawString( "2ch"@` 100@` 100 ); } public void keyPressed( KeyEvent ke ) { System.out.println( "pressed" ); } public void keyReleased( KeyEvent ke ) { System.out.println( "released" ); } public void keyTyped( KeyEvent ke ) { System.out.println( "typed" ); } } JComponentを継承したPaintTestクラス内でKeyListenerが使いたいけどうまくいきません。 FrameTestクラスでimplements KeyListener...と書くとできるけど、PaintTestクラスでやりたい. JComponentをJPanelにしても同様の結果です。できません。
413 :
千宇房 :2000/11/24(金) 18:01
htmlの遷移によって切り替えられる異なったアプレット間でデータを受け渡したいのですが、いい手はないでしょうか。外部Javascriptを使用したかったのですが、アプレットからJavascriptにデータを渡す方法が見つかりません。ブラウザはIEです。
414 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 20:08
415 :
名無しさん@お腹いっぱい。 :2000/11/24(金) 20:13
>>414 ごめん嘘付いた
netscape.javascript.JSObject.getWindow(applet).eval("ジャバスクリプト");
ね。
で上記のappletは呼び出し元のAppletオブジェクト。
で、getWindwowでジャバスクリプトのアプレットのおかれたウィンドウオブジェクトを取得するわけ。
>>410 >>Java1.1以降は環境変数CLASSPATHの記述にかかわらず
>JDK1.2以降ね。
ちがうね。JavaAPIの探索がCLASSPATHの記述に係わらないのは確かにJava1.1からだよ。
ただし、java.exeのコマンドラインからの明示的なクラスパスの指定で上書きされる。
Java2から変わったのはこのコマンドラインでのクラスパスによっても上書き
されず、かならずJavaAPIは探索されるということ。あ、あとlib/extにある
クラスファイルの探索も追加されたか。
>416 ぼうや、そんなこと10秒で結果がでるんだよ。 JDK1.1.?で、java -classpath . なんでもいいよなー ってうってみろや。 日本はもうおしまいだな、べつにオレはいいけどよ。(ぷ
>>417 [d:/javalib/src]%c:/java11/bin/java -classpath . sample
Unable to initialize threads: cannot find class java/lang/Thread
-classpath . で上書きされるからJavaAPIは実行できないんだよ。5秒
[d:/javalib/src]%CLASSPATH=. c:/java11/bin/java sample
Hello World!
CLASSPATHに . しか指定してないがJavaAPIを実行できる。10秒。
確かに日本は終わりだな。
終了
419 :
名無しさん@お腹いっぱい。 :2000/11/25(土) 14:36
>>418 おれの負けだ。すまそ。ズラとるからゆるしてくれよ。
420 :
名無しさん@お腹いっぱい。 :2000/11/25(土) 15:18
ねえねえ、Java(TM) 2 SDK@` Standard Edition Version 1.3.0_01の Windows版ってちゃんと動きます? C:>java Error occurred during initialization of VM java/lang/ClassNotFoundException: sun/io/ByteToCharMS932 C:> って怒られるわ、 (ライブラリ覗いてもsun\io\ByteToCharMS932.classなんぞ見つからん) コントロールパネルのDUKEは何もせずに終了するわ、 Mozilla nightlyのディレクトリにプラグイン入れてくれたのはいいけど そのせいでMozillaが立ちあがらなくなるわ、散々なんですけども。
421 :
420 :2000/11/26(日) 03:13
>java/lang/ClassNotFoundException: sun/io/ByteToCharMS932 なんかMSのjava.exe起動してました。初歩的ミスやなあ。てへへ。 残りの2つは分からん。どうなってるんだろう。
422 :
質問君ミレニアム :2000/11/26(日) 17:55
VAJ3.5をWIN98で使用しています。
ヘルプファイルがHTML形式になっていて、ヘルプを起動すると
http://localhost:49213/cgi-bin/vahw ~を参照しています。
が、開けません。
localhost→127.0.0.1の名前解決はできてるんですが、ポート
49213が開いていない模様です。関連ページはほぼ調べたんです
が。
423 :
名無しさん@お腹いっぱい。 :2000/11/26(日) 21:18
>>422 VAJにICSのサブセットが付いてきますが、それは起動されている状態ですか?
実行ファイル名はhttpdl.exeだったと思うけど。
424 :
質問君ミレニアム :2000/11/26(日) 22:21
423さんありがとうございます。 なるほど、IBM独自のHTTPサーバーの設定周りを調べれば いいんですね。 まだ、Internal Server Errorですけど、どうにかなりそ うです。ありがとうございました。 PS 説明があまりに雑だよ。あんまりだよ。>IBM
425 :
423 :2000/11/26(日) 23:54
>PS 説明があまりに雑だよ。あんまりだよ。>IBM いや、本当はインストールするだけでいいはずなので説明はいらないんです。 ただ、どうかすると起動してくれないんですよね。VAC++のヘルプシステム と共有なので、VAC++のヘルプメニューから起動すると動いたり、挙動が よくわからんです。
426 :
Javasyoniti :2000/11/27(月) 15:58
D:\Java\レッスン\list3-7>javac Kuku.java Kuku.java:16: 型がありません。 System.out.println(""); ^
427 :
Java初日 :2000/11/27(月) 16:00
失礼しました。 D:\Java\レッスン\list3-7>javac Kuku.java Kuku.java:16: 型がありません。 System.out.println(""); ^ こんなエラーが出て、前に進めません。誰か助けて下さい!
428 :
Java初日 :2000/11/27(月) 16:41
とても、とてもくだらない間違いをしていました。どうも。
429 :
名無しさん@お腹いっぱい。 :2000/11/27(月) 16:50
だれか java.lang.ClassLoaderとか java.security.PermissionDomainとか この辺を使って証明書付きクラスの動的ローディングとか について説明の載ってるWebページ知りませんか? JDK1.2っす。
430 :
名無しさん@お腹いっぱい。 :2000/11/27(月) 18:16
>>427 小さなプログラム(&著作権上の問題がないの)なら全文を掲載してください。
| Kuku.java:16: 型がありません。
だけでは実際に何が原因なのかわかりません。
431 :
名無しさん@お腹いっぱい。 :2000/11/27(月) 19:19
>>427 前の行の最後のセミコロンが抜けてるか、括弧の閉じ過ぎでしょう。
前のほうをもっとよくみるべし。
432 :
Java初日 :2000/11/27(月) 23:05
>>430 -431さん
どうもありがとうございました。
確かに前の行のセミコロンが抜けていました。
私はVBのIDEに慣れすぎたせいか、エラーが多くて情けないです。しかも
くだないエラー。メモ帳でソースを書くのはシビアですね。
433 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 01:23
Timer(javax.swing)について質問です。 一つのオブジェクトを同時に複数のTimerで操作する時にも、 Threadを用いたときのように、同期をとる必要がありますか? ある場合その方法は、Threadの時と同じ方法(synchronized)ですか?
433です。 ↑の問題については、解決しました。
435 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 23:26
パッケージの名前の付け方ってセオリーみたいのありますか? 本とかのサンプルはインターネットのアドレスみたいに jp.org.xxx.xxx.xxx って感じでつけてるのが多いんだけど? それと僕はソースファイルの管理が下手みたいで、 気が付くとフォルダーの中にバージョンとか内容が不明な ファイルがごろごろしています ソースファイルの管理のコツとか気を付けてることがあったら 御教授願います
436 :
名無しさん@お腹いっぱい。 :2000/11/28(火) 23:40
>本とかのサンプルはインターネットのアドレスみたいに
>jp.org.xxx.xxx.xxx
>って感じでつけてるのが多いんだけど?
多いというかそう決まっています。もしそのような識別子を用意できない人のために
http://www.java-conf.gr.jp/wg_bof/package/ では世界でただ一つのパッケージ名を提供するサービスを行っています。
>ソースファイルの管理のコツとか気を付けてることがあったら
>御教授願います
なんでもいいから方針を決めて、例外を認めずそれに従う。例えば、
「バージョン番号や枝番の付け方」とか「ソースのアーカイブの作り方」
とか「バージョンを記録するファイルを作ってソース中のコメントを
抽出してまとめておくやりかた」とか「ディレクトリツリーの構造」とか。
で、次はmakeやdiffやgrepやCVSなどで先に定めた方針を楽に行えるような環境を整える。
このような環境がそろえられないと実行が難しい方針はあきらめる。楽をした
い場合はバージョン管理機構を備えた統合環境を使うというのも手。うちではJDK
を使わないプロジェクトにはVisualAge for Java3.02を使ってます。3.5はこのスレ
の上の方でめためたにけなしていたようなきがするがよくわからん。いちお、あるけど。
437 :
千宇房 :2000/11/29(水) 09:01
アプレットからASPにデータを渡したいのですが,showDocumentメソッドを使うとき、METHOD=POSTとMETHOD=GETをコントロールする方法ありますでしょうか?
438 :
名無しさん@お腹いっぱい。 :2000/11/29(水) 23:42
>436 ありがとうございました! 早速パッケージ登録してきました ソースコードの管理はとりあえず以下の方法でやってみます。 他に気を付けるべき点とかありますか? 多分このあたりのノウハウはネットにありそうなんで探してみます ソースコードの旧バージョンのファイルにバージョンを付ける (例 現在使ってるファイル - aaaa.java 世代前のファイル aaaa_ver1_0.java 名前の規則は クラス名_メジャー番号_マイナー番号.java) ソースを置くディレクトリは、パッケージと同じディレクトリに 例外として テスト用のディレクトリにtest 後で参照用に使いたいソース用にsample を使用する
439 :
>>438 :2000/11/30(木) 21:29
CVSだのRCSだのバージョン管理ソフトつかえばそんなに バージョン番号ムキになってつける必要もないよ。 Javaのファイル名は(publicな)クラス名と同一でないといけないから ちょっと昔のバージョンでコンパイルしたくなったときにも コピーやらリネームやら面倒でない?
440 :
名無しさん@お腹いっぱい。 :2000/11/30(木) 22:32
そっかー やっぱり文明の利器は利用すべきなんですね といてもIDEは重いし・・
441 :
436 :2000/11/30(木) 22:49
442 :
名無しさん@お腹いっぱい。 :2000/11/30(木) 23:08
ありがとうございます! Linux(TLWS6.0)です。 しかし・・難しそうですね 時間があるときにトライしてみます
443 :
田中角栄 :2000/11/30(木) 23:55
javaのよい参考書を探しています。是非ご教授ください。本と言いましても初級から上級まで現在幅広く出版されていまして、どれを買って良いかわからないというのが現状であり、相談の理由でもあります。私の望むものとしましては、まず、あまり基本的すぎないことです。いいかげん”基本データ型”から本を読むのには飽き飽きしてまいりました。どちらかといえば、アルゴリズムを中心にプログラムの例が多数載っている、わかりやすく、実践的な本というのを探しております。自らはjavaの神だ!俺はこの本で学んだからここまできた!という方、是非ともお教えください。また、本は使わなくても楽勝だったという方、是非ともその勉強方法をお教えくださると大変うれしく思います。どうぞよろしくお願いします。
444 :
名無しさん@お腹いっぱい。 :2000/12/01(金) 00:36
>>443 基本文法を押さえているのなら、次はちょっと古いけど、
Javaプログラムクイックリファレンス: David Flanagan@` オライリージャパン
かなぁ。
Javaプログラムデザイン: 戸松豊和@` ソフトバンク
も読み物的に読むのは面白かったですね。
445 :
age :2000/12/01(金) 21:19
age
446 :
名無しさん@お腹いっぱい。 :2000/12/03(日) 16:15
メールクライアントを作っているのですが、 メールの保存をDBにするかXMLにするか、ファイルにしてフォルダに保存にするか 悩んでいます。 コーディングの楽さは DB>XML 構築の楽さは XML>DB 速度的には?? 規模的には、おいおいグループウエア的にマルチユーザーで使えるものを 作りたいとおもってます
448 :
名無しさん@お腹いっぱい。 :2000/12/05(火) 22:40
使う人間は1~多くても20人くらい どちらかと言うと自分の勉強のために作るって感じです。 イメージとしては個人グループでつかう、 dosule見たいなものを目指してます。 クライアントのインターフェースは、ブラウザ。 HTMLかアプレットで書こうと思います。 クライアントのOSはブラウザが動くもの、 もしくはJava2の動く環境。 WebアプリケーションサーバはJRUN3.0 DBは未定です。
449 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 00:12
>>448 あんま深く考えてないのでアレなんですが、
勉強目的ならXMLが妥当でわ?
とにかくメールデータはサーバ側に持たせるってことですよね。
あとどうでも良いんだけど、
>クライアントのOSはブラウザが動くもの、
>もしくはJava2の動く環境。
これって「どっちかの環境をターゲットとして作る」って意味?
それとも「どっちかの環境があれば動くように作る」って意味?
後者だったら何かヘンだなと思いました。
いや、ホントにどうでも良いんですが。
450 :
名無しさん@お腹いっぱい。 :2000/12/06(水) 00:37
プログラムもデータもサーバーに持たせようと思います。 (クライアントの世話に手間をかけたくないので) 最低限ブラウザがあれば動作できるいうことで。 さらにJavaが動くクライアントなら、 ユーザーインターフェースをアプレットにして、 操作性を稼ごうかと (両方選択できる仕組みにしたい) こういうのって、やっぱりへんかな~
451 :
名無しさん@お腹いっぱい。 :2000/12/07(木) 16:45
1.4はいつでるの?
452 :
名無しさん@お腹いっぱい。 :2000/12/07(木) 19:51
453 :
名無しさん@お腹いっぱい。 :2000/12/07(木) 21:12
Font specified in font.properties not found [-wadalab-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0] こんなエラーがいろんなプログラムを実行するたびにでるんですが、 なんなんでしょう?? 環境はTurboLinuxでxemacsでjdk1.3です 実行したのはなんの変哲もないプログラムなんだけど import java.awt.Frame; public class Cal extends Frame { public static void main(String args[]){ AppFrame frame = new AppFrame(); frame.setSize(200@` 200); frame.show(); } } class AppFrame extends Frame { }
454 :
ジャヴァとら :2000/12/08(金) 01:55
javaコンパイラってなにがいいのでしょうか? それからJavaクイックリファレンス第3版(トラ本)が 今月の25日にでるそうですが、買ってもいいですか?
455 :
名無しさん@お腹いっぱい。 :2000/12/08(金) 03:21
>>454 >javaコンパイラってなにがいいのでしょうか?
これは私も知りたい。
雰囲気的に最適化の良し悪しはどのコンパイラもだいたい一緒で,
JVM(Java仮想マシン)の違いで性能に開きが出る気がします。
>それからJavaクイックリファレンス第3版(トラ本)が
買っても損はしないと思うけど,
こればっかりは読んでみないと分りません。
ちなみに,JAVAプログラムクイック・リファレンス(ワニ本)は
内容が広く浅すぎて,どちらかというとダメ本でした。
http://www.oreilly.co.jp/BOOK/jexample/
457 :
名無しさん@お腹いっぱい。 :2000/12/08(金) 23:01
VisualCafeのStandardEditionってJDBCは入っているんでしょうか? 研修で習ったこと自分のPCではできないんです。 検索してもそれらしいファイルがないんで、ないような気もします。 それと、JDBCはどうやってダウンロードしたら良いでしょう? sunのHPでDocumentはダウンロードできたんですけど、 肝心のモノがどれなのかわかりませんでした。 どなたか親切な方教えてくださいませんか? 超初心者でごめんなさい。
458 :
名無しさん@お腹いっぱい。 :2000/12/08(金) 23:34
JDKのJDBC-ODBCならデフォルトで入ってた気が・・・ DBはなに?
459 :
457 :2000/12/09(土) 00:09
そうなんですか。入ってるんですか。 研修の時先生に聞いた時もそう言ってたんで おかしいとは思ったんです。 DBはとりあえずAccess使おうと思ってます。 Oracleでもいいんですけど。試しにやってみたいだけなんで。 コケるところは、最初にJDBC用ドライバのクラスが存在するか 調べるところです。 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } これでいいんですよね? これってinport文でも指定できて、あるかどうかわからないから この形にしてるんですよね?(と研修で習った) そう思って、試しに"import sun."ってやってみても、 何もでないんで(普通、使えるクラスがリストのように出てくるのに)、 「ないんだ~」と思ったんですけど。 クラスがあるかどうかってどうやって調べたらいいんですか? またまた初心者な質問でごめんなさい。
460 :
名無しさん@お腹いっぱい。 :2000/12/09(土) 01:14
>>459 おそらく君のPCにはいってるJDKが1.2以上(Java2 SDKってやっちゃーな)なのが原因じゃ。
Java2SDK以降ではsun.*パッケージはほとんどjavax.*に移行してる。
詳しくはドキュメントを見れ。
461 :
ジャヴァとら :2000/12/09(土) 01:20
>>455 情報をありがとう。 >ワニ本
僕はCを始めて2週間足らずのP見習い師です。
本格的にJavaについて勉強したいのでとりあえず買っときますね。>トラ本
これからもよろしくどーぞ。。
462 :
名無しさん@新人王 :2000/12/09(土) 22:52
Javaって、実際の仕事ではどういう風に使われているんでしょうか? アプレットですか? 参考書でJAppletをやたら継承させているんですが 実際の仕事でも使っているんでしょうか? だったらやっぱりアプレットビューワ使っているんでしょうか? ちょっと疑問です。
463 :
名無しさん@お腹いっぱい。 :2000/12/10(日) 01:22
javax.mail.* でプロバイダのpop3からメールを取ってくる方法なんですが、 セッションのつくりかたでつまずいてます Nosuchprovider exceptionがでてしまいます。 セッションは接続先を指定してつくるのかと思いきや、 サンプルを2つほどみても自分を指定してるみたいです。 それとstoreの考えかた今一つぴんとこないのですが、 自分のフォルダにメールを取り込むからstoreクラスってことなのでしょうか? Folderもメールサーバのフォルダなのか、自分のフォルダなのか 訳が分からなくなりつつあります Properties sysProperties = System.getProperties(); Session session = Session.getDefaultInstance(sysProperties@` null); session.setDebug(debugOn); System.out.println(POP_MAIL); Store store = session.getStore("pop3"); store.connect(pop3Host@` -1@` _user@` _password);
464 :
名無しさん@お腹いっぱい。 :2000/12/10(日) 01:24
捕捉です no such provierExceptio :No provider pop3 がでるのは Strore store = session.getStrore("pop3"); のところです
エラーメッセージ通り、pop3プロバイダが無いか見つかんないんでしょ。
466 :
>>462 :2000/12/10(日) 03:16
今javax.servlet.http.HttpServletを継承して サーブレット&JSPで業務画面作ってるよ JavaアプレットOFFでもOKだし クライアントから見ればブラウザでCGIやってるのと変わらない 最近はたいていの人はブラウザの操作には慣れてるから客受けもいいよ。 DBもJDBC経由でアクセスできるしね。 あと自分はまだ仕事で使ってないけどXML関係はJavaが強いみたいね。
467 :
ちゅーぼー :2000/12/10(日) 03:43
Javaをコンソールで使ってますが、 ブレークポイントやスッテプイン等の操作は できるのでしょうか?
468 :
名無しさん@お腹いっぱい。 :2000/12/10(日) 09:05
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); とキー入力を待っている状態で、別スレッドから割り込みかけるとかして readLine()から脱出させる方法ってありますか? BufferedReader#readLine()がInterruptedExceptionとかInterruptedIOException とか投げてくれないので、Thread#interrupt()しても反応無いっす。 というか、Win32のWaitForMultipleObjects()みたいのがあるとうれしいん だけど。
469 :
>>467 :2000/12/10(日) 12:08
>>468 brをclose()してしまえ(わらい)
471 :
468 :2000/12/10(日) 18:19
>>470 それでも変化なし。例外も起きない。
BufferedReader extendsしたクラス作ってやるしかないんかな。
473 :
名無しさん@お腹いっぱい。 :2000/12/10(日) 22:45
164> pop3には古いjavax.mailは対応してないよ 新しいバージョン使うべし それからj2eeのjavax.mailもpop3対応してないかも
474 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 08:50
CF-S23(RAM64MB)というノートパソコンにVineLinux2.1をインストールして使って います。ここにJava2SDK(JDK1.3)をインストールしてHello!Worldをコンパイルし ようとした時点でいきなり詰まってしまいました。 PATH、CLASSPATHを設定して javac hello.java とやると延々と反応が戻ってきません。ctrl+Cで止めるまで何時間でも何日でもずっと考え てます。エラーメッセージも出ません。HDDにアクセスもしていません。 swap領域(200MB確保)が足らないのか?classpathが間違ってるのか?RAM64MBじゃ足らない? 1週間くらい試行錯誤&WEB検索でヒント探して10回以上再インストールしてもこれで止まってて マジへこんでます。 なんかいいアイデアないでしょか?
475 :
474 :2000/12/11(月) 08:59
classpathは …/java/jdk1.3/jre/lib/rt.jar:. に設定してます。
476 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 09:50
JAVA技術者の資格試験ってあるんでしょうか?
477 :
>474 :2000/12/11(月) 15:38
VineLinux2.1じゃJDK1.3は逆立ちしても動かんよ。 何をどうやっても無駄。 JDK1.2.2をダウンロードして使いな。あっちは きちんと使えるから。
478 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 15:51
479 :
名無しさん@お腹いっぱい。 :2000/12/11(月) 17:31
>>474 そのクラスパスって違うんじゃない・・・
....../java/jdk1.3/bin だと思うんだけど・・・
それと、そのパスを .bashrc かなんかに書いてる?
480 :
名無しさん@お腹いっぱい。 :2000/12/12(火) 00:46
javadocでパッケージ階層全部をdocumentにするのってどうやるの?? 普通にやればできるのかな? これって実際にどれくらいつかわれるんだろ? (sunのAPI DOC以外あまり見たこと無いような)
481 :
名無しさん@お腹いっぱい。 :2000/12/12(火) 00:48
JbuilderのエンプラとウエブアプリサーバのCDが届きました (お試し番) 60日は登録してからなのかな? もったいないので時間があるときに登録します
482 :
名無しさん@お腹いっぱい。 :2000/12/12(火) 02:52
>>480 一太郎ArkのAPIドキュメントはjavadocだったような気が。
ソースに埋め込んだコメントがそのままAPIドキュメントになるという
発想はすばらしいのだが,コードの可読性が悪くなるのが難点ではないかと。
なぜならドキュメントの分量が多くなると,プログラムが隅に追いやられるような
雰囲気になるので。
よいツールはないものでしょうか。
>>482 Arkのソースってそうなの?
JDKのソースはべつにあんなもんだと思うが。
484 :
名無しさん@お腹いっぱい。 :2000/12/12(火) 23:27
コメントにルールを持たせると言う意味ではいいんだけど、 ちょっとコメントが長くなりがちだよね
485 :
483 :2000/12/13(水) 17:52
クラスの頭と関数の頭にそれぞれ
でかいコメントが有るくらいいいんじゃないかな
コード自体は別に普通でしょ
>>482 @`
>>483 仕事だとプロジェクトによっては
それくらいのコメント書かされるのは珍しくないよ
ソースのコメントとその「よいツール」の両方に
説明を書かなきゃいけないんだったら片方だけで済むほうが俺はいいな。
486 :
名無しさん@お腹いっぱい。 :2000/12/14(木) 00:07
>477 おいおい。俺は使えてるぞ。
487 :
名無しさん@お腹いっぱい。 :2000/12/16(土) 19:11
素朴な疑問なんですけど自分で作ったJavaのソースってどこに置いてますか? 自分の場合は /home/hoge/java/source/jp/gr/java_conf/hoge/ って感じなんですが、 サーブレットのコードはwebサーバに置いてしまってるので、 ソースが2箇所になってます
488 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 01:01
Javaアプリを、Windowsのエキスプローラから、 ダブルクリックで直接起動させる為には、 どうしたらよいのでしょうか? どなたか教えてくださいませ。
age
490 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 01:20
>488 >Windowsのエキスプローラ ちょっとだけワラタ
492 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 03:38
あげ
ネタ提供する気も無いのにあげるなぼけ。>492
494 :
488 :2000/12/17(日) 10:21
ありがとうございました>490
495 :
名無しさん@お腹いっぱい。 :2000/12/17(日) 14:22
技術評論社のCD付のJAVAの入門書があったのですが、(2000円くらいです) どうですか?
496 :
PG :2000/12/20(水) 17:47
■ダブルクリックの質問です。(JavaScript)
以下のコードでは2回目をはじくことができるのですが、
var submitFlg = false;
function canSubmit() {
if (submitFlg) return false;
submitFlg = true;
return true;
}
function foo2() {
if (!canSubmit()) return;
location.replace('
http://www.vector.co.jp ');
}
<input type="button" name="Test" value="ダブルクリックテスト" onclick="foo2()">
これだと上手く行きません。A タグでのダブルクリック対応って無理?
<A href=JavaScript:foo2()><B>テスト</B></A>
497 :
↑ :2000/12/20(水) 19:16
果てしなく場違いなモヨリ (Mac板でハンバーガーの質問するくらい)
あれ、「JavaScript 相談室(仮)」ってのがあったのね。 失礼。無視してくれ。
ん、サーブレットなどでダブルクリック対応せんのか。 連打されるとサーバの負荷がつらくないか。
501 :
JAVA初心者 :2000/12/21(木) 12:04
JAVA初心者なんですが、ジャンケンプログラムを作ってみたけれどボタンを押しても結果が出ません。 誰か間違っているところを教えて下さい@`お願いします。m(_ _)mimport java.applet.Applet; import java.awt.*; import java.util.*; import java.math.*; import java.awt.event.*; public class jyanken extends java.applet.Applet{ Button[] myBtn; Label myLbl; int r; Random ran; public void init(){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("ジャンケンゲーム"); myBtn = new Button[3]; add(myBtn[0] = new Button("グー")); add(myBtn[1] = new Button("チョキ")); add(myBtn[2] = new Button("パー")); ran=new Random(); r =(int)(Math.random()*2); //グー myBtn[0].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(r==0){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("グー!あいこです。"); } else if(r==1){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("パー!あなたの負けです。"); } else if(r==2){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("チョキ!あなたの勝ちです。"); } } }); //チョキ myBtn[1].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(r==0){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("チョキ!あいこです。"); } else if(r==1){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("グー!あなたの負けです。"); } else if(r==2){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("パー!あなたの勝ちです。"); } } }); //パー myBtn[2].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(r==0){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("パー!あいこです。"); } else if(r==1){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("チョキ!あなたの負けです。"); } else if(r==2){ myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("グー!あなたの勝ちです。"); } } }); } }
502 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 13:48
>>501 画面初期化してやればいいと思う。
あとなんか押す前に勝負の結果が決まってて萎えました
503 :
JAVA初心者 :2000/12/21(木) 17:42
教えてくれてありがとうございます。m(_ _)m 画面を初期化ってHTMLをリロードですか?
504 :
名無しさん@お腹いっぱい。 :2000/12/21(木) 21:57
myLbl = new Label(""@`Label.CENTER); add("Center"@`myLbl); myLbl.setText("グー!あいこです。"); ここが貴方の意図している動きとは違うようです initの中ですでにオブジェクトとして存在しているのですから、 newしないでそのままsetTextでオブジェクトに メッセージを送ってやればOK // myLbl = new Label(""@`Label.CENTER); // add("Center"@`myLbl); myLbl.setText("グー!あいこです。"); イベントを処理しているメソッドのなかで、Appletに対して addしても、なにもしてくれないと思います。 init()のなかでaddすべき? それとクラスの名前は大文字から始めましょう メゾット名とクラス名の区別がつけやすいです
子音抜きはやめようよ....
アホ。母音だろ>505
子音抜きはカコイィな。 myae=new Label(""@`Label.CENTER);
508 :
名無しさん@お腹いっぱい。 :2000/12/22(金) 17:12
現在JSP+Servletをやっているのですが、 JDBC経由でMySQLに接続したいのですが mm.mysql.jdbc-1.2のmysql_comp.jar mysql_uncomp.jarを どこにおいたらいいのですか? Tomcat3.1のlibとかにおいているんですけど、No such driverいわれます。 どこにいれたらいいですか?
509 :
508 :2000/12/22(金) 17:55
自己レス getConnection の URLをjdbc:mysql:///hogehoge にしたらできました。すいませんでした。
510 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 01:07
現在Javaでネットワークプログラム書いてます。 簡単で良いですね。 ところでJavaで作ったプログラム(jarファイル)を配布した場合、ユーザーのPC(JDKがインストールされてない環境)でそのまま動くものなんですか? アプレットが動くくらいだからブラウザがインストールされていれば大丈夫なんですか?
511 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 01:09
>510 動かないよ~ん
512 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 01:16
513 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 01:41
>512 SDKかRuntime Environmentっていうやつ。配布できるかどうかは知らない
ちなみにMacだとMRJ
516 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 02:18
JDKかJREいれてある環境なら jarのマニフェストに Main-Class: [mainメソッドのあるクラスのパッケージ&クラス名] って一行いれとけばダブルクリックで起動するよ マックは知らない
で、512はjarの 「マニフェスト追加するのはどうするの?」 と言う質問をしてくるのに100クルゼーロ
518 :
512 :2000/12/24(日) 03:01
>>517 jar cmf hoge.mf hoge.jar hoge.class *.gif
ていうかそんな素人じゃないって。
マニフェストの設定くらい知ってるもん。
結論:Javaプログラムはそこら辺の一般人のPCでは JRE ってのが無いと動かない。
ってことだよね?
519 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 00:15
赤外線通信はできますか??
520 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 00:31
>518 結論が自力で想像できないという事実がすでに素人
知ってるもん!
522 :
初心者女子 :2000/12/25(月) 07:37
こんにちは。javaを勉強し始めて一週間の超初心者です。 今アプレットを作っていて質問があります。 1.二つの文字列s1@`s2を比べてs2がs1に含まれているか調べる メソッドってありますか。cのstrstrの機能です。 2.Labelクラスで文字列をアプレットに表示したいのですが、 Labelで二列にわたる文字列を指定することはできないのでしょうか・ Label l1=new Label("ここで \n 改行")とやっても文字化けしてしまって。 よろしくお願いします。
523 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 07:53
String.indexOf(string)
524 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 07:58
遅くなるが、 JLabel label1 = new JLabel("<HTML><BODY>line.1<BR>line.2</BODY></HTML>"); って、やってみな。
525 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 09:40
>522 後者はともかく、前者は調べればすぐにわかりそうだが。 そんなこといちいち聞いてると学習効率悪いぞ。
526 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 11:56
>522 GridLayoutかなんかでコンポーネントに縦二段の レイアウトを設定してそれぞれにLabel貼ってくだされ。
527 :
>>518 :2000/12/25(月) 15:28
winでIEとそのJavaがインストールされている状態なら (最近はIE入っててもJavaがデフォルトでインストールされないこともあるらしい) jview /cp [実行したいjar@`zipファイルを含むクラスパス] [メインクラス] でも一応動く。(さすがにダブルクリック起動はショートカット作らない限り無理) ただしJDK1.1相当だしAWTの挙動がかなり違う(テスト工数が、、) (まあ、IEのアプレットと同じなんだけど)
528 :
初心者女子 :2000/12/25(月) 15:29
みなさん回答ありがとうございました。 524のやりかたもあったんですね。目から鱗です。 >526 gridlayoutつかうと、g.drawImageで貼ったイメージが後ろに 隠れてしまうのでできなかったんです。かくれないやりかたも あるのでしょうが。
529 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 17:50
>(最近はIE入っててもJavaがデフォルトでインストールされないこともあるらしい) これ最近よく聞くんですけど、実態はどんな感じなんでしょうね。 IEのアップデートにMSVMのチェックがデフォルトで入ってないのは見たけど WinMeやWin2kを標準でインストールしたら どっちも入ったから、安心していいのかな。 MSVM入ってないIEでアプレットのあるページ行ったら どういう挙動するんでしょ? 今HDDがギチギチで実験できなくて。
530 :
赤外線通信>>519 :2000/12/25(月) 19:12
531 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 20:16
質問です。 MacでJavaを触ってみたいとおもっているんですけど まず最初にすることは何ですか? どこから何を落としたらいいんでしょうか?
532 :
名無しさん :2000/12/25(月) 22:41
目から鱗
533 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 23:54
>>531 最近のは始めっから入ってるんじゃないの?
534 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 01:52
Javaの勉強しようと思ってMSDNに入っていたVJ++のサンプル見てビックリ。 拡張子が .exe だよ。 完全に Windows アプリじゃん。 JDK1.2.2 をインストールしてるPCで実行できないし。 .Net でもやろうかな~。 Javaの中級くらいのレベルのサンプルコード公開してるページってない? from VC++プログラマ
535 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 02:26
536 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 02:27
>ケッジヤル 毛子覆おうあるめん
537 :
534 :2000/12/26(火) 04:16
>>535 どうもありがとう。
英語か・・・。
Java覚える前に英語覚えようかな・・・
538 :
初心者 :2000/12/26(火) 05:23
昨日の初心者です。 質問です。 g.drawImage(x@`y@`width@`height)で画像を貼り付けているのですが、JDKのアプレットビュー和 ではちゃんとみえるのですが、実際アップしてみて、ブラウザで 見ると上の方4分の一くらいしか見えないんです。これは どうしてでしょうか??
539 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 05:55
>>538 ImageObserver周りの仕組みは理解してるかい?
このあたりはたぶん誰もがつまずくところなので
一度JavaHouseのトピックスやクラスライブラリのソースで
徹底的に調べてみるといいよ。
540 :
初心者 :2000/12/26(火) 09:54
>>539 しくみ、理解していませんjavaHouseとはいったい??
検索して行ってみます。
541 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 14:03
542 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 14:26
>>540 あ、JavaHouseは見つけても迂闊に質問はしないようにね。
まずトピックスを徹底的に探しましょう。
なければ「過去の記事の検索」で調べてみましょう。
543 :
名無しさん@お腹いっぱい。 :2000/12/26(火) 14:37
544 :
名無しさん@お腹いっぱい。 :2000/12/27(水) 00:39
545 :
デフォルトの名無しさん :2000/12/27(水) 00:51
>>538 HTMLの方のAppletタグ(Object使ってるかもしらんが)のタテヨコの指定はしっかり調節してある?
546 :
デフォルトの名無しさん :2000/12/27(水) 10:48
前から気になっていたんですが,自作プログラムのアイコン(ツールバーなどなど) って,どこから調達しているんですか?>皆さん どこか,お奨めのものってあります?
547 :
デフォルトの名無しさん :2000/12/27(水) 14:24
JavaScriptでopen()とすることによって新しいブラウザを出せますが、 それJavaではどうやってやるんですか?
548 :
デフォルトの名無しさん :2000/12/27(水) 14:33
>>547 >JavaScriptでopen()とすることによって新しいブラウザを出せますが、
>それJavaではどうやってやるんですか?
getAppletContext().showDocument( "
http://xxx/xxx.xx "@` "_blank" );
・トピックス
+ブラウザとの連携
+Appletから指定したURLのページをブラウザに表示させる
※Jハウス風レス
ちょっと間違えた。(←バカ
getAppletContext().showDocument(new URL("
http://xxx/xxx.xx ")@` "_blank");
ですな。
550 :
初心者 :2000/12/27(水) 16:13
java houseだと返り討ちに会いそうでこわいのでこちらでしつもんします URLからソースを一度バッファに読み込んでから書き出したいのですが、 下のようにするとどうしても日本語ノブ分が文字化けしてしまいます。 OutputStream out=System.outとしてバッファに入れないで書き出すと 文字化けしません。bufはStringBufferです。どうしたら文字化けしないように なるでしょうか? while((c=in.read())!=-1){ buf.append((char)c); //out.write(c);
551 :
名無しさん@お腹いっぱい。 :2000/12/27(水) 16:36
>550 Streamそのまま使わないでWriter、Readerクラスで デコレートしてください。
552 :
初心者 :2000/12/27(水) 17:32
writerクラスでデコレートするとはどういう事でしょうか。。 witerクラスのインスタンスを生成しなくてはならないの でしょうか、そうするとこれはabstructなのでimplementが 必要なのでしょうか、ああ、分からない。 ついでに質問すると上の例ではcはintで宣言されていますが writeするとちゃんとcharになっているのはなぜでしょう?
553 :
>>552 :2000/12/27(水) 17:37
さあ、JavaHouseらしくなってまいりました。
555 :
デフォルトの名無しさん :2000/12/27(水) 18:53
>>546 VC++に大量についてきたような。
あとは自分でドットエディタでも使って描くんちゃう?
556 :
初心者 :2000/12/27(水) 19:13
ジャバアプリケーションを作っているのですが,フレームクラスの中で ImageオブジェクトにPNGとかの画像ファイルをロードする時,みなさん どうしてるんですか? アプレットではgetImage()が使えて楽だったんですけど自力でデコード するしかないんでしょうか?
557 :
名無しさん@お腹へった :2000/12/27(水) 19:14
558 :
こちらも初心者 :2000/12/27(水) 22:29
>>556 アプレット:
Applet.getImage()
アプリ:
Toolkit.getImage()・・・・java.awt.Toolkitのメゾット
ききたいのってこれ?
559 :
名無しさん@お腹いっぱい。 :2000/12/28(木) 00:14
PNGって開けたっけ?
560 :
デフォルトの名無しさん :2000/12/28(木) 00:16
1.3から対応してるよぉ~~~ん
561 :
名無しさん@お腹いっぱい。 :2000/12/28(木) 00:25
>>560 そうなんだ。
俺は1.2.2使ってる。
PNGの保存もできる?
562 :
デフォルトの名無しさん :2000/12/28(木) 03:42
っていうか、GIFの保存もできないわけだしぃ~。
563 :
名無しさん@お腹いっぱい。 :2000/12/28(木) 03:49
JPEGは保存用のクラスあるじゃん。 Sunが勝手に作ってる奴。(com.sun.image.codec.jpeg) PNGもあるのかな~と思って。
564 :
名無しさん@お腹いっぱい。 :2000/12/28(木) 03:59
Forte for Java ってどんな感じ? 今までDOS窓でコンパイルしてたんだけど。 どっちが便利? Forte for Java 使ってる人いる?
565 :
デフォルトの名無しさん :2000/12/28(木) 04:04
異様に重かった気がする。 使ってないけど、使うとしたらJBuilderのほうがマシかなって感じ。 あたしはファイラーで擬似統合環境作ってます。
566 :
名無しさん@お腹いっぱい。 :2000/12/28(木) 04:12
なるほどなるほど。 Forte for Java は辞めとこう。 JBuilder ってタダじゃないよね? やっぱ自分でなんか作ろうかな。 コマンドラインは流石に面倒だ。
567 :
名無しさん@お腹いっぱい :2000/12/28(木) 04:23
JAVAでゲーム作ったので配布したいなと思っているのですが いまのままではJDKやJREがインストールされていないと 使えないんです。なんとかすべてのファイルをexe形式にしたり することはできないんですかね?
568 :
デフォルトの名無しさん :2000/12/28(木) 05:37
>>567 Visual Cafe
×Java SDK(MS) bin\jexegen.exe
569 :
デフォルトの名無しさん :2000/12/28(木) 08:53
570 :
デフォルトの名無しさん :2000/12/28(木) 08:54
Visual Cafeってどこから出ているのでしょう.... Symantecだったような記憶があるのでSymantecのサイトを 見たのですが、見あたりません。 どなたか御存知ないでしょうか?
572 :
デフォルトの名無しさん :2000/12/28(木) 10:04
>>571 有り難う御座います。
(しかしいつの間に...)
573 :
デフォルトの名無しさん :2000/12/28(木) 12:09
write 566 >コマンドラインは流石に面倒だ。 そんな貴方に「Emacs+JDE」(笑)
575 :
名無しさん@お腹いっぱい :2000/12/28(木) 16:44
>578 ありがとうございます。 体験版でも324メガあるんですね・・・・・・・・
576 :
名無しさん@お腹いっぱい :2000/12/28(木) 16:47
追加質問で悪いんですが VisualJではできないんですか?
なかなか笑えます
ttp://www.okweb.ne.jp/kotaeru.php3?q=21979 Javaは初めて学ぶ言語として非常に理想的。
もっとも賢明な選択といえます。
今後C++に移行するにせよ、また、JavaScriptを
記述するにせよ。Javaの考え方を知っているか知っていないかでは、大きな差が出ます。
Cから始めてC++に移行する人よりも、JavaからはじめてC++など他の言語をマスターする人の方が、はるかに美しいソース(美しい設計)を記述する傾向が高いからです。
皆さんがおっしゃるように、はじめのうちはJDKで開発をすすめるのがよいと思います。とりあえず、2@`3ヶ月程度はJDKで開発をすすめて、Javaの言語としての側面のみならず、その全体的な仕組みや環境の構築も身につけておいたほうが、後々のためです。
地盤がしっかいしていない土地に高い建物を建てようとすると、失敗します。まずは地盤を固めましょう。
ツールについてですが、個人として使用するのであれば、JBuilderがお勧めですが、将来キャリアにしたいということであれば、やはりVisualJ++ということになります。
これは単体の言語開発環境としては、JBuilderを選択してもVisualJ++を選択してもたいして違いはありませんが、
(現在少々違いがあっても将来的には埋まってしまうものです)
企業が使用しているヒット率というてんで、C++BuilderよりもVisualC++の方が圧倒的に確率が高く、当然、アプリケーションの連携という観点から、単体としてすぐれているかもしれないJBuilderよりも既存のVisualC++との相性が良いVisualJ++を採用する可能性が高いためです。
というわけで、趣味の範囲をでることはまずない!!
ということであれば、JBuilderを
のちのちは本格的にビジネスまでも見据えて…
ということであれば、VisualJ++を
を使用してみるのがよいのではないでしょうか。
578 :
初心者 :2000/12/28(木) 18:23
558さんどうもありがとうございました. getImage()と書いたらコンパイラ通りませんでしたが, Toolkit.getDefaultToolkit().getImage(); としたら通りました. ちなみに俺はforte使ってます. ただですし,使いやすいですよ. 起動は物凄い時間かかりますが,他は普通だと思うっす. LinuxでJBuilderちょっと使った事ありますが,あんまり変わらないっすよ.
579 :
デフォルトの名無しさん :2000/12/28(木) 18:33
>577 投稿日00-12-25?良回答?VisualJ++?
580 :
こちらも初心者 :2000/12/28(木) 21:53
581 :
デフォルトの名無しさん :2000/12/28(木) 23:13
JBuilder Foundation は、エディタは便利で気に入っているが、 デザイナとかはあまり使わないな。 GridBagLayout使おうとしたら収集のつかんことになったし。 (pro以上のVerticalLayoutなんて意味あるのか?)
582 :
禁断の名無しさん :2000/12/28(木) 23:24
その後 JBuilder のエディタは VJ++6.0 に追いついたの? VJ++から乗り換えた人の情報求む
583 :
デフォルトの名無しさん :2000/12/28(木) 23:37
収集->収拾だった。
584 :
デフォルトの名無しさん :2000/12/30(土) 06:55
Swingデフォルトのlook&feelのmetalって、 すごく格好悪いなあ、と思うのは私だけでしょうかねえ。 特にボタン周り
585 :
デフォルトの名無しさん :2000/12/30(土) 07:05
>584 正解ですがタブーです。
586 :
デフォルトの名無しさん :2000/12/30(土) 07:35
>>583 大いに賛成します。
まだしもWidowsの方がましです。
587 :
デフォルトの名無しさん :2000/12/30(土) 07:35
588 :
584 :2000/12/30(土) 09:05
タブーなんですか? なして?
589 :
デフォルトの名無しさん :2000/12/30(土) 23:49
Javaで配列の初期化?ってどうやるの? 配列のコピーは System.arraycopy を使えばできるけど 配列の初期化(塗りつぶし)はどうやるの? Cでいうところの memset みたいなやつ。 ループで回せばできないこともないけどJavaだと遅いから・・・ 教えてください。 とりあえず、 ハッピー if(イヤー != null) delete イヤー new イヤー
590 :
名無しやん :2000/12/31(日) 00:34
JOptionPaneのデフォルトアイコン 「?」とかのアイコンの画像はいったいどこから取得しているんでしょう?
591 :
589 :2000/12/31(日) 00:57
自己レスです。 調べたら Arrays.fill ってのがあった。 おやすみなさ~い。
592 :
デフォルトの名無しさん :2000/12/31(日) 01:13
>>589 ループのほうが速いことも往々にしてあるので要注意だ。
593 :
うちう :2000/12/31(日) 02:05
30日まで&3日から出勤する羽目になった初心者をお助けください。 Buttonコンポーネントに(ラベル的に)横向きの三角形の図形を書きたいんですが、以下のコードをどう組み込めばよいのか分かりません。 int x1[] = {41@`41@`58}; int y1[] = { 3@`23@`13}; g.fillPolygon(x1@`y1@`3); 良かったら教えてくださいな。
594 :
名無しさん@お腹いっぱい。 :2000/12/31(日) 02:11
>>593 矢印を画像にしてボタンに貼るのが一番楽。
595 :
無党派さん :2000/12/31(日) 02:29
596 :
奥さん、名無しです :2000/12/31(日) 02:38
>593 AWTならButtonを継承してComponent.paint()を、 SwingならJButtonを継承してJCopmonent.paintComponent()を その処理でオーバーライドかければいいかな。 小さい書き込みなら画像張るほうが早そうだけど。
597 :
593 :2000/12/31(日) 11:37
なるほど。やってみます。ありがと御座います。
598 :
デフォルトの名無しさん :2000/12/31(日) 23:43
import java.applet.*; import java.awt.*; import java.awt.color.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.event.*; import java.awt.font.*; import java.awt.geom.*; import java.awt.im.*; import java.awt.im.spi.*; import java.awt.image.*; import java.awt.image.renderable.*; import java.awt.print.*; import java.beans.*; import java.beans.beancontext.*; import java.io.*; import java.lang.ref.*; import java.lang.reflect.*; import java.math.*; import java.net.*; import java.rmi.*; import java.rmi.activation.*; import java.rmi.dgc.*; import java.rmi.registry.*; import java.rmi.server.*; import java.security.*; import java.security.acl.*; import java.security.cert.*; import java.security.interfaces.*; import java.security.spec.*; import java.sql.*; import java.text.*; import java.util.*; import java.util.jar.*; import java.util.zip.*; import javax.accessibility.*; import javax.naming.*; import javax.naming.directory.*; import javax.naming.event.*; import javax.naming.ldap.*; import javax.naming.spi.*; import javax.rmi.*; import javax.rmi.CORBA.*; import javax.sound.midi.*; import javax.sound.midi.spi.*; import javax.sound.sampled.*; import javax.sound.sampled.spi.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.colorchooser.*; import javax.swing.event.*; import javax.swing.filechooser.*; import javax.swing.plaf.*; import javax.swing.plaf.basic.*; import javax.swing.plaf.metal.*; import javax.swing.plaf.multi.*; import javax.swing.table.*; import javax.swing.text.*; import javax.swing.text.html.*; import javax.swing.text.html.parser.*; import javax.swing.text.rtf.*; import javax.swing.tree.*; import javax.swing.undo.*; import javax.transaction.*; class IMPORT {}
599 :
デフォルトの名無しさん :2001/01/01(月) 01:28
java.awt.List で一度に表示できる項目を2つにしたいのですが、 ↓のコードだと全て表示されてしまいます。 なぜなんでしょうか?? import java.awt.List; import java.awt.Frame; public class ListTest extends Frame { ListTest() { List list = new List(2); list.add("ho"); list.add("ge"); list.add("ho"); list.add("ge"); add(list); setSize(100@`100); setVisible(true); show(); } public static void main(String args[]) { ListTest listTest = new ListTest(); } }
600いただき >list.add("ho"); >list.add("ge"); >list.add("ho"); >list.add("ge"); これが原因だろが
601 :
デフォルトの名無しさん :2001/01/01(月) 01:40
List list = new List(2); だから一度に表示されるのは2つで、 4ついれたばあいはスクロールになると思うけど?
602 :
奥さん、名無しです :2001/01/01(月) 01:59
>601 初期化するだけで、最大値を設定してるわけじゃないぞ。 APIドキュメントちゃんとよめ。
List public List(int rows) 指定された数の表示行を持つように初期化された新しいスクロールリストを作成します。デフォルトでは、複数の選択はでき ません。 パラメータ: rows - 表示される項目の数 でも、setMaxRow(int rows) とかないじゃん・・・。
604 :
奥さん、名無しです :2001/01/01(月) 02:08
>603 だから、最大値は設定できないんだってばさ。 表示したくなければremove()せい。
AWTってのはそういう不自由なものなのです。
健常者に生まれてよかった。と、親に感謝しなさい>ALL
607 :
デフォルトの名無しさん :2001/01/01(月) 09:29
なんで13にCardLayoutを教えてやらなかったんだ?
608 :
デフォルトの名無しさん :2001/01/01(月) 10:01
ちがうだろ
609 :
デフォルトの名無しさん :2001/01/01(月) 18:26
JBuilder4Foundationを使ってみたら、チュートリある やってるとき固まった もっとさくさく動くと使いやすいんだろけど 結局エディータ+JDKに逆戻り
610 :
デフォルトの名無しさん :2001/01/01(月) 18:30
Celeron366+192MB(Win98) だと、起動に五分、デザイナの起動に2@`3分かかる。 その間なんとなく本でも読んでる。(他のは動かないし)
Celeron300+64MB(Win98) で運が悪いと止まる。
612 :
デフォルトの名無しさん :2001/01/02(火) 00:01
Forteを、ネットでリモートアップデートしてJDKを1.3に換えたら、なんかイイ感じ (それでもかなり重いんだけど)のスピードになったよ。HotSpotうんぬんと、Swing の高速化が進んでるのね。(P3-450+192MB) JBuilderはJDK換えてみるとどうなるでしょか?
613 :
デフォルトの名無しさん :2001/01/02(火) 02:25
Forteって無料版もServletとJSPが使えるだっけ? 使い勝手どう?
614 :
@ :2001/01/02(火) 23:32
イメージをロードするとき、どれぐらいロードされてるかは、どうって知るんですか?
615 :
>>614 :2001/01/03(水) 03:25
>>つか、このスレの質問のほとんどは >>JDKのドキュメントとJavaHouseの検索使えばたいていのことは解決 >>すると思うのは俺だけではあるまい。 鋭どすぎ。天才だね。
617 :
デフォルトの名無しさん :2001/01/03(水) 03:45
>609 そう、JBuilder4Foundationはヘルプ使うと危険だよ。
618 :
デフォルトの名無しさん :2001/01/03(水) 07:02
Jbuilderに限らないが、こういったツールの吐くソースって、 何でこう腐ってるんだ?
619 :
デフォルトの名無しさん :2001/01/03(水) 07:18
>>618 マウスでD&Dで配置するより、手で書いた方が早いし、
精神的にも良いよ。
620 :
デフォルトの名無しさん :2001/01/03(水) 17:56
RADツールの生産性って手書きより早いという先入観があるんだけど、 実際両方つかってる人はどっちが早くて、メンテが楽? プロの現場はどんなツールを使ってるのか興味あります。 HTMLも職人さんになると、FRONTPAGEとかHOMEPAGEBUILDER使わないで、 手書きって話を聞いたことがあります
621 :
デフォルトの名無しさん :2001/01/03(水) 18:32
結局蓄積がどれだけあるかでしょう。 それでも、RADツールで、コンポーネントを作りながら使うのが一番と思いますが・・・
622 :
デフォルトの名無しさん :2001/01/03(水) 21:42
無名クラスの例外処理でなやんでます throws IOExceptionを書くとコンパイル時に以下のエラーが でてしまいます。 例外をだす処理を消して、throws IOExceptionを消して コンパイルするとOKです 無名クラスで例外処理を加える場合はどう書けばいいのでしょうか? JavaHouseを検索したのですが、良く分かりませんでした MailGui.java:101: ';' がありません。 ActionListener buttonAction = new ActionListener() throws IOException { ^ MailGui.java:101: java.awt.event.ActionListener は abstract です。インスタンスを生成することはできません。 ActionListener buttonAction = new ActionListener() throws IOException { ActionListener buttonAction = new ActionListener() thorws IOException { public void actionPerformed(ActionEvent actionEvent) { } 例外(IOException)を出す処理 };
623 :
デフォルトの名無しさん :2001/01/03(水) 22:14
>622 tryとcatch
624 :
お前名無しだろ :2001/01/03(水) 22:14
すいません。 classファイルを逆アセンブラしたいのですが ソフトを知りませんか? j2cなんかはclassファイルからCのソースを出力するらしいですが どこにあるか知りませんか?
逆アセンブル
627 :
デフォルトの名無しさん :2001/01/03(水) 22:45
>>622 何をされたいのかよく分らないのですが。
>new ActionListener() thorws IOException {
これは
class MyActionListener implements ActionListener thorws IOException {
...<省略>...
}
というクラス定義と等価になると思うので,当然文法エラーです。
例外を投げるのはメソッドです。クラスが例外を投げるということはありえません。
それから,try catchをどこにどのように書くおつもりなのか
教えてください。
628 :
初心者 :2001/01/04(木) 05:43
これは上げねば
629 :
デフォルトの名無しさん :2001/01/04(木) 13:59
まあ、JBuilderも立ち上げてしまえば、そんなに重くはないんですけどね。
630 :
デフォルトの名無しさん :2001/01/04(木) 14:11
java開発ツール何使ってますか?(JBuilder等・・・) ちなみに私は、メモ帳・・・
631 :
デフォルトの名無しさん :2001/01/04(木) 14:54
MIFES
632 :
奥さん、名無しです :2001/01/04(木) 17:25
>630 特定語句強調表示機能つきエディタならなんでも。 コレだけで十分だと、個人的には思う。
633 :
デフォルトの名無しさん :2001/01/04(木) 22:29
俺も好き<mifes
635 :
Java厨房その位置 :2001/01/05(金) 06:13
DefaultMutableTreeNode を extends したクラスのインスタンスを deep copy するには、どうすればよいのでしょうか?
636 :
Java厨房その位置 :2001/01/05(金) 06:15
super.clone()だと parent =null; child = null; なんてされているので
637 :
630 :2001/01/05(金) 11:39
MIFESのサイト見ました。 「「ATOK12」で日本語処理能力を高めた」っていう一文で萎えた・・・ CPad for Java2 SDKっていうのはどうです? 使っている人いますか? Vectorのダウンロードランキングで結構良い順位。
638 :
デフォルトの名無しさん :2001/01/05(金) 15:19
Megasoftのネガティブキャンペーンまがいのアンケートはどうなった?
639 :
デフォルトの名無しさん :2001/01/05(金) 22:54
っっれえええええええ
640 :
デフォルトの名無しさん :2001/01/05(金) 22:55
美しいlook&feelはありませんか? 個人的にはGTK+風のが欲しいなあ
641 :
640 :2001/01/06(土) 12:31
642 :
デフォルトの名無しさん :2001/01/06(土) 12:35
643 :
デフォルトの名無しさん :2001/01/06(土) 12:53
いいね。
644 :
こちらも初心者 :2001/01/06(土) 17:56
<<641 最高!! いい誕生日プレゼントもらった。
645 :
こちらも初心者 :2001/01/06(土) 18:01
う、>>だった。
646 :
デフォルトの名無しさん :2001/01/07(日) 00:46
素朴な疑問なんですけど、classのなかのmethodの順番って どうしてます mainが最後コンストラクタが最初であとは、処理が関連しているのを ならべてって感じでしょうか?
647 :
デフォルトの名無しさん :2001/01/07(日) 01:04
IDEの好きなところ GUIつくるのが楽 コード補間はちょっと嬉しい 嫌いなところ 起動が遅い 使い方を覚えるのが面倒(厨房) JDKが新しくなったとき使えなくなる。 なんとなく閉じ込められた感じがいやーん
648 :
デフォルトの名無しさん :2001/01/07(日) 01:08
エディタ+JDKの好きな所 emacs+JDEマンセー 自由度が高い(気がする) 嫌いなところ classが増えたとき管理がしんどい コード補完できんもんかの? windowsのデフォルトシェル(dos)じゃきついっす
649 :
デフォルトの名無しさん :2001/01/07(日) 01:11
IDEのツールでUMLと連動してコーディングできるのって なぜないんでしょ? argoUMLってのを使ってます。 クラス図を指定して中にコードを書くこともできるみたいですが、 ちょっとコーディングには機能的に辛い。 (強調機能とか無いみたいだし) スケルトンを吐いてくれるんで、そこそこ便利
650 :
デフォルトの名無しさん :2001/01/07(日) 09:24
sun.net.*パッケージはどこにあるのでしょうか? (探すの疲れました...)
651 :
デフォルトの名無しさん :2001/01/07(日) 09:37
少しく古い本だが、 『Java ネットワーキング&コミュニケーション』ピアソン って、酷い日本語だな。 かわんでよかった
652 :
デフォルトの名無しさん :2001/01/07(日) 12:33
>650 java.io.net じゃだめなん?
同感 ていうか、sun.net.* はだいぶ前に廃止されたから最近のJDKでは使えないよ。
654 :
デフォルトの名無しさん :2001/01/07(日) 13:33
655 :
デフォルトの名無しさん :2001/01/07(日) 15:58
Javaの初心者です。 Javaで、ファイルの保存、読み込み、書き込みも出来るんでしょうか?
>>655 なぜ出来ないと思われたのかその前提情報と判断の過程をお聞かせください。
657 :
デフォルトの名無しさん :2001/01/07(日) 18:19
>>652 -654
652@`653@`654さん、ありがとう御座います。
いや、ただ単にFTPクライアントを作成しようと思ったのですが、
APIドキュメントにはHttpURLConnectionというのは有ってもFTPについては
ほとんど記述がなかったので、大丈夫かいな?と思い、
そう言えばsun.net.ftpというのがあったなあ、と思いだして探したところ、
どうしても見つからなかった、というわけです。ハイ
Ftpについては、
http://www.geocities.com/SiliconValley/Code/9129/javabean/ftpbean/ (ソース付き)でライブラリを見つけましたので、これを改造して使うことにします。
>ていうか、sun.net.* はだいぶ前に廃止されたから最近のJDKでは使えないよ。
いや、知りませんでした(あほだ.....)
658 :
デフォルトの名無しさん :2001/01/07(日) 18:45
>657 TCP/IP Javaネットワークプログラミング ってほんがとってもお勧め。 俺はこれ参考にメールクライアント作ってます
659 :
657 :2001/01/07(日) 19:05
>>658 『TCP/IP Javaネットワークプログラミング』オーム社 小高知宏著
ですね。
あ、小生も持ってます。
この本はとても参考になります~
趣味でいろいろやってみたい人間にはとても有り難いです。ハイ
2400円
JAVAで作ったアプリでWEBにアクセスする場合、
どうやったらプロクシを経由できますか?
例えば、
URLConnection uc = new URLConnection(new URL("
http://java.sun.com/index.html "));
これでURLConnectionオブジェクトを生成し、
getInputStreamメソッドをつかって
ファイルを読みこむ事が可能ですが、
プロクシを経由してませんよね?
プロクシサーバーを経由してWEB上のファイルにアクセスする方法を
教えてください、お願いします。
661 :
デフォルトの名無しさん :2001/01/07(日) 23:11
ファイルから設定値を読みこんで、 他のクラスから値の参照に使いたいクラスがあるとします。 この場合でも、他のクラスからフィールドにアクセスするのは よろしくないですか? メゾット経由にすると、価ごとにset getのメゾットをつくるのは まどろっこしいんですが import.java.io.*; import.java.util.*; public class A_class { String a; String b; Properties property; public void A_class() { property = new Properties(); property.load(new FileInputStream("hoge.ini")); /* read Properties */ a = property.getProperty("a"); b = propetry.getProperty("b"); } } class B_class{ A_class a_class = new A_class(); void hoge(){ a_class.a; } hoge.ini a= a b= b
メゾット...? それは俺も使ったことがないから、 いちいち経由しなくてもいいぞ!!! (きっと、誰も使ったことがないと思うぞ) (でも、setterやgetterは作法だと思ってやっとけ)
663 :
奥さん、名無しです :2001/01/08(月) 01:35
664 :
初心者 :2001/01/08(月) 12:57
Javaプログラム中から、perlプログラムを動かして 結果を取得することはできますか?
665 :
デフォルトの名無しさん :2001/01/08(月) 22:39
>>654 「できますか」
とのことですので、できます、と答えておきます。
666 :
デフォルトの名無しさん :2001/01/08(月) 22:39
そう言うやつMLとかにもいるな。 うざいからやめてほしい。
668 :
( ´~`)さん :2001/01/09(火) 02:42
どっちもどっちじゃん・・
>>663 教えてくれてありがとうございます、参考になりました。
670 :
名無しさん@お腹いっぱい。 :2001/01/10(水) 15:22
JAVAの関数リファレンスみたいなのが日本語で置いてあるサイトを 教えてください。
671 :
デフォルトの名無しさん :2001/01/10(水) 15:40
>>671 おお、ありがとう。
「関数」じゃなくて「クラス」とかいうんだっけ?
Cしか知らないもので…(しかもC++じゃないC)
これからJAVAを勉強するつもりです。
674 :
デフォルトの名無しさん :2001/01/10(水) 18:26
>「クラス」と「メソッド」の概念は最低理解しましょう。 加えて「インスタンス」もね。 そしてその次の段階は「継承」と「多態」だ がむばれよ~
675 :
小僧、Java食っとけ! :2001/01/12(金) 01:04
ねぇねぇ聞いてよ、「Javaクイックリファレンス第3版」ってどうなの? 買った人いる? ためになる? 感想聞かせてよ。 僕、初心者だから、あんまムズくなくても平気。 つーか、初級者から上級者まで使えるリファレンスなんですか? 早急に教えて~。ほ。し。い。
676 :
Raguna :2001/01/12(金) 01:13
JavaのクラスライブラリはMSDNでも十分。
677 :
デフォルトの名無しさん :2001/01/12(金) 01:52
678 :
奥さん、名無しです :2001/01/12(金) 02:17
J2EEやJ2ME、MIDP、CLDC関係とかの日本語APIドキュメント ってないのかな?
>>677 いや、でも紙は画面と比べて断然読みやすいよ…
>>679 うちの教授はメールをプリントアウトして読んでるぞ。
「ふむ、こちらの方が読みやすい」って。
まあ、人に依るんだろうな。
俺も
>>677 >リファレンスに金使うヤツはアホ
これには賛成なんだが....
682 :
名無しさん@お腹いっぱい。 :2001/01/12(金) 11:34
VisualCafeのImagePanelオブジェクトをフォームに配置して、 Gifアニメを表示させたんですけど、異様にちらつきます。 検索したところダブルバッファリングを使えばちらつきが解消するらしいですけど、 ImagePanel.javaをどういじればよいのか分かりません。 どうすればよろしいのでしょうか?
683 :
名無しさん@お腹いっぱい。 :2001/01/12(金) 11:39
>682 一番簡単なのは、ダブルバッファリングを標準で実装してる SwingのJPanelつかうこと。 AWTならJHouseとかでダブルバッファリングのやり方説明 してたような。
684 :
682 :2001/01/12(金) 18:50
>>683 レスありがとうございます。
ダブルバッファリングを実装していることを知りませんでした。
JPanelに画像を表示させる方法は良く分かりませんでしたが、
JLabelでダブルバッファOnにして、ImageIconを使ったらうまくできました。
ありがとうございました。
ところで、Win32Awtアプリケーションで、ImageIconを使おうとすると、実行時に
プロシージャエントリポイントがダイナミックリンクライブラリからみつかりませんでしたと
エラーが出るのですが、ネイティブアプリケーションでSwingが使えないことと関係があるのですか?
JTextLabelやJPanelだけだったら、実行できるのですが・・・。
>>681 ありがとうございます。Runtimeというものが
あるんですね。早速ためしてみまして、
Javaから外部コマンドが起動できるようになりました。
(perlじゃなくて、exeファイルですけど。)
めでたしめでたし、と思っていたのですが、
今度はServletから外部コマンドを動かさないといけなくなりました。
Servletからだと、なぜか動きませんでした。
JavaHouseの過去ログに、原田さんの本に載っているとの
情報がありましたので、これからためしてみます。
それでは、ごきげんよう。
>>677 今日届いてた。一生懸命使い回します。それじゃ!!
687 :
デフォルトの名無しさん :2001/01/13(土) 16:07
大学生ならレファレンスは大学で落そう。ってうか家じゃ無理だろ ちなみにimode用のレファレンス2部計で250ぐらいのやつ印刷したら 大学の情報センターからお叱りを受けた
>>687 お前か今日「紙使いランキング」で張り出されてたやつうぁ !!
689 :
デフォルトの名無しさん :2001/01/14(日) 02:38
独習JAVA、もう少し日本で使うことを考えてくれ。DATEクラスの実行例 でいきなりアメリカ東部時間を出されても困る。
690 :
デフォルトの名無しさん :2001/01/14(日) 13:18
>>689 つーかそろそろJDK1.2/1.3対応に書き直して欲しい感じ。
691 :
デフォルトの名無しさん :2001/01/15(月) 06:13
透明なウィンドウって、作れませんか? setOpaque(boolean); では無理ですし....
692 :
デフォルトの名無しさん :2001/01/15(月) 15:07
アクセスのデータをJAVAとSQLを使っていじるプログラムがわからん。わかるつ狂者いる? ちなみに1つ目のテーブルのデータはいじれるけど2つ目のテーブルがいじれない。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName("org.iwatsuki.jec.JdbcEncodingConverter"); java.util.Properties info = new java.util.Properties(); info.put("user"@`"guest"); info.put("password"@`"guest"); info.put("charSet"@`"8859_1"); conn = DriverManager.getConnection(":jdbc:odbc:sati"@`info); ちなみにこんなの使ってるんだけど。
693 :
デフォルトの名無しさん :2001/01/15(月) 15:23
Sessionって何?
694 :
デフォルトの名無しさん :2001/01/15(月) 17:02
Session: 《名》会期、開会、集まり、立会い時間
695 :
デフォルトの名無しさん :2001/01/15(月) 17:29
Swingでチャットアプリ作ってます。 ログの表示にJTextArea使っているんですが、行末に来たとき、 自動的にスクロールさせるにはどうすればよろしいのでしょうか?
696 :
デフォルトの名無しさん :2001/01/15(月) 17:59
>>695 textArea.append(text + "\n");
textArea.setCaretPosition( textArea.getText().length() );
697 :
デフォルトの名無しさん :2001/01/15(月) 19:25
AWTでチャットアプレット作ってます。 めっちゃわかんないので教えてくださいませ~!! 1、TextAreaにソケットから受け取った文字情報を記すとき。 TextArea(t2)に表示させるには、そのままt2.setText(getString)で いいのでしょうか? ちなみにgetStringの内容はBufferdReaderのreadLine()で読み取り済みです。 それともまたPrintWriterを設定して繋げないといけないでしょうか? 2、チャットで複数情報を渡す時 別のテキストフィールドからの情報を区別する方法ってありますか? 文字の送信の他に、名前とかも送りたかったんですが、どうやって送れば いいのか……。 最初のソケットを繋ぐ時点で引数として渡して、それ以後はテキストの 送受信に専念させるのが無難でしょうか? ちなみにサーバ側は、単に受け取った情報を全員に送り返すだけの仕様 にしています。 3、文章を追加する方法。 setTextだと次の文章を受け取ると前の分が消えてしまうのですが、 できれば通常のチャットのようにどんどん意見が追加されていく形に したいのです。 どうすれば実現できるのでしょう? API仕様書とにらめっこしてText Firldクラスとかio関係のクラスを読んでみるも、さっぱり発見できず。 addTextのようなメソッドってないものでしょうか? そもそもsetText って本当に合ってるのでしょうか? (printlnが使えるならそっちを使い たかったり) ちなみに現時点では、setTextにしてて、一行ごとにリフレッシュされて ます(泣) ど、どうか教えてください~(泣) サイトか書籍でも助かります(書籍を探すもよくわからず)
698 :
デフォルトの名無しさん :2001/01/15(月) 19:41
>>697 ざっと読んだだけで外してるかもしれんけど。
>1
試してみた?
>2
意味わからんかった。
CGIから受信したメッセージデータが、自分が送信したデータかどうかをチェックすると言うこと?
だとしたら、自分が送信したデータも送信時じゃなく受信してから表示するようにしてみ。
>3
TextArea#append(String)じゃ駄目?
699 :
697 :2001/01/15(月) 20:52
>698さん >1 いえ、これからです(すみません)。 さんざん失敗しまくってて、どこが失敗の原因か自体わからず、 「根本的に間違ってるんじゃないか僕は?」と不安だったので 試すまえに書いてしまいました。 試してみます。(該当部分は、今日読んでた参考書の方法から推測 してみた方法ものです) >2 いえいえ、ふつーに「名前とかってどうやって認識するん?」っていう 根本的な部分で引っ掛かってるだけです。 テキスト送る方法しかわからず。。。 >3 おお、なるほど! さっそく試します。気づきませんでした。ありがとうございます!
700 :
697 :2001/01/15(月) 20:53
ちなみに今、僕は、「クライアントはサーバーからDOS窓で打ち込んだ情報を送る」 「サーバーはそれを一字づつ返す」「使うのはreadメソッドとprintメソッド。 あとInputStreamとOutputStream」っていう原始的なアプリケーション(授業の 教材)を拡張してチャットを作ろうとしてて、途方にくれてる状態なのです。 「Systym.out.print()で表示してたモンを、どーやってGUIに表示するのさ!?」 「うがー! クライアントの読み取りだけBufferdReaderのreadLineに変えると読み 取りで不可解な動きが!? けどStrin以外をTextAreaに表示する方法はわからんし、 他にバイトストリームからStringを生成する方法は知らないし。。。やむをえぬ。 サーバーとクライアント双方をBufferdReaderとPrintWriterクラスを作って対応 しよう」 「。。。名前入力なんてどうやって処理するんだろ」 「新しい行を読むと前のが消えるよー(泣)」 こんな感じです。 ネットでも探したのですが、当時はソース見ても意味がわかんなかったので、 API仕様書とか参考書を読んで概念とか調べつつ。 (そのものズバリは見つけられず、意味を分析して、応用を試して...の段階です) 助言ありがとうございました! すごく助かります!! また頑張ってソースと格闘してきます!!
701 :
697 :2001/01/15(月) 21:02
うわ、修正せねば。 「クライアントはDOS窓に打ちこまれた情報(文字)をサーバーに送り、サーバー から返信された情報(文字)をそのまま表示する」です。 System.in.read() - out.write() - in.read() - System.out.print() な流れなのが元プログラムです。
702 :
デフォルトの名無しさん :2001/01/15(月) 21:45
>>700 >原始的なアプリケーション(授業の教材)を拡張してチャットを作ろうとしてて
お、前向きだね。いいぞいいぞ。
サーバはCGIだと思ってたけど、Javaアプリケーションなのかしら?
だとしたら、汎用性のある(チャット以外の通信にも再利用可能な)方法として、
オブジェクト送信用キャリアークラスを作って通信する方法があるぞ。
で、オブジェクトには利用者名と会話データを入れておくのだ。
これだったら「お絵かきチャット」みたいなのも実現可能だ。
……ちょっといまやろうとしてることからは外れるかな?(w
追加。
>>699 >ふつーに「名前とかってどうやって認識するん?」っていう
>根本的な部分で引っ掛かってるだけです。
>テキスト送る方法しかわからず。。。
送るのがストリング型だけなんだったら、
「名前+セパレータ+本文」として送ってStringTokenizerで切り分けるのが
簡単では?
それから書き忘れてたけど、702も698ね。
704 :
697 :2001/01/15(月) 22:42
>698さん おお、即レス! はい、サーバーに使ってるのはJAVAアプリです。 (CGIでもできるのですか? CGIもパケットも初めてです) >オブジェクト送信用キャリアークラス うおう、面白そうです! キャリアークラスの意味がよくわからないのですが、それってObjectStreamとかを 使ってオブジェクトを配列で送る方法でしょうか? (今慌てて調べました) なるほど、そうやって描画データと送信者名と会話データを送れば「お絵かき チャット」とかも実現できるわけですね。 (このオブジェクトの切り分けるのでしょうか?) >送るのがストリング型だけなんだったら、 >「名前+セパレータ+本文」として送ってStringTokenizerで切り分けるのが >簡単では? おお、なるほど! そっかー、StringTokenizerなんてものがあったんですね。そのときは意味わかり ませんでした。こういうのに使うんですね。 ありがとうございますっっ♪
705 :
697 :2001/01/15(月) 22:46
あ、ちなみにStringTokenizer使うときのおすすめ区切り文字とかってあります? なるべく本文で使われない文字がいいと思うのですが(空白や*は多用されそう なので)、「お約束」「一般にはこの文字を指定する」などがあれば、ぜひ。
706 :
奥さん、名無しです :2001/01/16(火) 00:50
\t
707 :
695 :2001/01/16(火) 01:43
>>697 レスありがとうございます。キャレットを使う方法ですね。
試してみましたが、うまく動きませんでした。
他の方法を探してみます。
>>697 私も以前Telnetアプリケーションを作っていたときに、バイトストリーム
をString型に変換する方法で躓きました。
型変換の方法は、String str = new String(buff@` "eucjp");でございまする。
708 :
695 :2001/01/16(火) 01:44
709 :
デフォルトの名無しさん :2001/01/16(火) 18:11
VisualCafe使っているんですけど、 JFCアプリケーションにJTextAreaを配置して、実行してみました。 Win2kのタスクマネージャを開いていて気付いたのですが、JTextAreaにキャレット があるとき、java.exeのメモリ使用量が減ることなくどんどん増えていっています。 現在、メモリ使用量が50MBを突破。どーなってんの? これは何か、プログラム的にメモリの開放が必要なのでしょうか。 それとも、JAVAの仕様なので仕方がないのでしょうか?
710 :
696 :2001/01/16(火) 19:02
>>695 JTextArea textArea = new JTextArea(8@` 40);
JPanel panel = new JPanel();
JScrollPane textAreaScrPane = new JScrollPane(textArea);
panel.add(textAreaScrPane);
という風に JScrollPane を textArea に張り付けてから、
textArea.append(text + "\n");
textArea.setCaretPosition( textArea.getText().length() );
でもダメかな?
↑のコードは自作チャットアプリ ( swing使用 ) のコードから
抜粋してるからイクはずだよ。
もし良かったら、あなたのソースを一部書き込んでみてちょ。
ミスがあったら添削するよ。
711 :
質問厨房 :2001/01/16(火) 19:18
あのー、凄く初歩的な質問なんですけど、 OutputStream系のクラスにある flush()メソッドって何の意味があるんですか? 別に使わなくても正しく処理されるような気がするんですが。
712 :
デフォルトの名無しさん :2001/01/16(火) 20:14
>>711 なくちゃ駄目だ!
確かにStreamはcloseすれば勝手にflushしてくれるので
必要性に疑問を抱くかも知れないが、
例えばSocket通信を行ったときとかにその必要性を痛感する。(ハズだ)
713 :
695 :2001/01/16(火) 21:32
>>696 さん
あ、なるほど。JScrollPaneというものがあったんですね。
バッチリ動きました。感謝感謝です。
ありがとうございました。
714 :
デフォルトの名無しさん :2001/01/16(火) 21:44
>711 flush()もclose()も必要。確かに使わなくても動くかもしれない。 しかし、その辺のストリームは入れ子にして使う場合が多く、途中 のストリームに712の言うソケットや、バッファが使う可能性もあ るから。自分でInputStream/OutputStreamのサブクラスを作る場合 も考慮。
715 :
デフォルトの名無しさん :2001/01/17(水) 08:34
jar でまとめたファイルを展開されるのが嫌なのですが (正確にいうと逆アセンブルされてメソッド名とか見られたくない) なにか方法ありますでしょうか
716 :
名無しさん@お腹いっぱい。 :2001/01/17(水) 09:52
>715 暗号化しておいて、使う時は復号してからClassLoaderで 動的ローディングとかはだめ?
717 :
714 :2001/01/17(水) 10:45
>>715 オブファスケータ obfuscator というプログラムは、jarファイルの
中にあるクラスのクラス名やメソッド名HogeHogeを aとかbといった
意味不明の短い記号に置き換えます。
逆アセンブルされてもどこでどのような処理がされているのかわかりま
せん。jarのサイズも小さくなります。しかし、例外が発生した際、ど
こでどのような例外が発生したのかわからなくなります。
718 :
デフォルトの名無しさん :2001/01/17(水) 14:47
変数の型を調べる関・・・メソッドて言うのはなんでしょうか。
719 :
デフォルトの名無しさん :2001/01/17(水) 14:47
g.setColor(new Color(R@`G@`B@`A)) g.fillRect(x@`y@`w@`h); のように、ColorクラスのsRGBをアプレット内で使ったものを appletviewerで動かすと問題無く、半透明になるのですが、 ブラウザ上(IE5)で実行するとNoSuchMethodErrorが出て止まってしまいます。 ブラウザ上で半透明を実現する方法は、あるのでしょうか?
720 :
714 :2001/01/17(水) 14:54
>>718 java.lang.reflect
>>719 IE5は標準でJDK1.1ベース。1.2のAPI使ってない?
721 :
デフォルトの名無しさん :2001/01/17(水) 14:55
>718 instanceof?
722 :
718 :2001/01/17(水) 15:09
723 :
719 :2001/01/17(水) 15:19
半透明の質問をした者です。 720さんありがとうございますー。 なるほど、するとこれはブラウザ側の未対応なようですね。 おそらくJREというのを入れれば見れるようになる。ということでしょうか。 でも、JREプラグインを入れてまで見てくれるほどの、 気合の入った閲覧者はあまりいないと思うので、使わないのが無難ですね。(HP展示用としては) ところで、質問のついでに聞きたいのですが、APIのバージョンは調べる方法はあるのでしょうか? 半透明については、ちょっと調べたのですが、フィルタを使うという方法があるようですね。 それでなんとかブラウザでも、表示できましたが、 遅い事この上無いし、いまいち網掛けっぽくなっていけないですね。
724 :
714 :2001/01/17(水) 16:18
>APIのバージョンは調べる方法 java.lang.System#getProperty("java.version") じゃないかな。 1.1ベースでも、自前のフィルタ使えば、半透明でも網掛けでも可能 でしょう。ここ数年アプレット作ってないから覚えてないけど。
725 :
デフォルトの名無しさん :2001/01/17(水) 17:22
727 :
715 :2001/01/17(水) 17:46
717さんありがとうございます。 早速検索して RetroGuard なるものをDLしました 実行したところ a.class b.class ・・・となり、 結果は上々です^^、
728 :
デフォルトの名無しさん :2001/01/18(木) 01:00
729 :
デフォルトの名無しさん :2001/01/18(木) 01:04
>728 それくらい自分で組め!
730 :
デフォルトの名無しさん :2001/01/18(木) 01:51
>>729 ディゾルブのアルゴリズムってどんなん?
731 :
714 :2001/01/18(木) 02:08
ディソルブって、画面がスコシづつ(1ドットづつ)次の画面に変化す る奴?
732 :
デフォルトの名無しさん :2001/01/18(木) 02:15
パワーポイントのアニメをみたところ、そんな感じだね。<<ディゾルブ
733 :
714 :2001/01/18(木) 02:29
(1)ドットの数だけ、1次元配列 a[n] を用意する。 (2)配列の要素に、インデックスと同じ数値ををセットする a[i] = i; (3)ランダムに選んだ二つの配列の値を入れ替える。適当回数繰り返す。 v = a[r1]; a[r1]= a[r2]; a[r2] = v; (4)a[0]から順番に、配列の要素が指し示す位置のドットを、次の画面の色に 塗り替える。 あ、通じた?ごめんもう眠い。
a
>716さん すいません、せっかくレス頂いたのに気づきませんでした、、 ありがとうございました。
736 :
デフォルトの名無しさん :2001/01/19(金) 09:36
age
737 :
でふぉるとのななしさん :2001/01/19(金) 18:03
"static" をmainにつけると、クラスのインスタンスではなくクラスそのものに関連付けられる。 と、独習java(p9)に書いてあるんですが。 ”クラスそのものに関連付けられている。”の意味がいまいち不明。 どのような意味なんでしょう?
738 :
デフォルトの名無しさん :2001/01/19(金) 18:21
>737 クラスファイルは、メモリ上のクラスファイルロード領域にロードされ、 その後インスタンス生成要求が有るたびにそのロードされている クラスファイルのデータを元にメモリのヒープ領域にクラス インスタンスが生成されるっすよ。 で、インスタンスメソッド、インスタンスフィールド(非static)は、 インスタンスの領域の中に作成されるけど、 クラスメソッドやフィールドと呼ばれるstaticメソッド、フィールドは インスタンスの中には作成されず、唯一一個だけクラスファイルロード 領域内の、該当するクラスファイルデータ領域の中にあるっすよ。 分かる?
739 :
デフォルトの名無しさん :2001/01/19(金) 18:36
クラスオブジェクトが1個だけあって、そこからインスタンスオブジェクトが 沢山生成されると考えるといいかも。
740 :
デフォルトの名無しさん :2001/01/19(金) 18:44
Class.forName("ClassName"); これって何のためにあるんですか? クラスパスに目的のクラスが入ってたら、特になにもしなくても そのクラスを利用できるわけじゃないんですか?
742 :
デフォルトの名無しさん :2001/01/19(金) 18:49
>740 クラスパスに入ってなくても呼べる。ネット越しにでも呼べる。 共有サーバから呼べる。
743 :
でふぉるとのななしさん :2001/01/19(金) 18:54
えと、 >staticメソッド、フィールドは >インスタンスの中には作成されず、唯一一個だけクラスファイルロード >領域内の、該当するクラスファイルデータ領域の中にあるっすよ。 って言うのが、クラスオブジェクトって事ですか? 作られる領域が違うって事はわかるんですが・・・・ >staticメソッド、フィールドは >インスタンスの中には作成されず、唯一一個だけクラスファイルロード >領域内の、該当するクラスファイルデータ領域の中にあるっすよ。 唯一一個とは、static宣言されているmainの事ですか?
744 :
740 :2001/01/19(金) 18:58
>>741 @`742
存在意義はなんとなくわかったのですが、
try
{
Class.forName("org.postgresql.Driver");
}
catch(ClassNotFoundException ex)
{}
この場合、Class.forName("org.postgresql.Driver");
を実行したことによって、具体的にVM上で何が変化するのでしょうか?
745 :
743 :2001/01/19(金) 18:59
なんか、嫌な聞き方してますね。 申し訳ないですが、宜しくお願いします。
746 :
デフォルトの名無しさん :2001/01/19(金) 19:04
>>740 自作のソフトでプラグイン対応させたいと思いねえ。
将来作成されるであろうプラグインのクラス名(&パッケージ名)を
すべてあらかじめソースに記述しておくことは出来ないっしょ?
あと、JBuilderとかJavaでできたRADツールもユーザーが作ったHogeだの
Fooだのいろんな名前のクラスにアクセスしなきゃ
いけないだろうし。
実行時にロードするクラス名を動的に決められるといろんなことが
できるなり。
747 :
デフォルトの名無しさん :2001/01/19(金) 19:13
>744 引数で指定したクラスファイルがメモリ上のクラスファイルロード領域 にロードされる。 そうなればインスタンス生成もstaticメソッドアクセスもやりたい放題。
748 :
デフォルトの名無しさん :2001/01/19(金) 19:16
>743 言葉の意味としては、インスタンス=オブジェクトが普通なので、 その言い方は変な気がするけど、そういうことでOK。
749 :
名無し :2001/01/19(金) 19:47
オセロのプログラム(2人対戦型)ですが、どこがおかしいか分かりません import java.awt.*; import java.applet.*; import java.awt.event.*; public class Othello4 extends Applet implements MouseListener{ int width=50; int height=50; int i@`j@`i1@`j1; int x@`y; int turn=1; int piece[][]; public void init(){ setBackground(Color.green); addMouseListener(this); piece=new int[8][8]; for(i=0;i<=7;i++){ for(j=0;j<=7;j++){ piece[i][j]=2; System.out.println(piece[i][j]+"("+i+j+")"); } } }
750 :
名無し :2001/01/19(金) 19:48
public void paint(Graphics g){ for(i=0;i<=8;i++) for(j=0;j<=8;j++){ g.setColor(Color.black); g.drawLine(i*width@`0@`i*width@`400); g.drawLine(0@`j*height@`400@`j*height); } piece[3][3]=piece[4][4]=0; g.setColor(Color.black); g.fillOval(50*3+5@`50*3+5@`40@`40); g.fillOval(50*4+5@`50*4+5@`40@`40); piece[3][4]=piece[4][3]=1; g.setColor(Color.white); g.fillOval(50*3+5@`50*4+5@`40@`40); g.fillOval(50*4+5@`50*3+5@`40@`40); }
751 :
名無し :2001/01/19(金) 19:49
public void BValid(int x@`int y){ Graphics g=this.getGraphics(); // if(y!=0) if(piece[x][y-1]==1){ for(j=y-1;j>=0;j--){ if(piece[x][j]==0||piece[x][j]==2)break; } System.out.println(x+"("+j); if(piece[x][j]==0){ for(j1=j+1;j1<=y;j1++){ piece[x][j1]=0; g.setColor(Color.black); g.fillOval(50*x+5@`50*j1+5@`40@`40); } } }
752 :
名無し :2001/01/19(金) 19:51
if(x!=7) if(piece[x+1][y]==1){ for(i=x+1;i<=7;i++){ if(piece[i][y]==0||piece[i][y]==2)break; } System.out.println(i+"@`"+y); if(piece[i][y]==0){ for(i1=x;i1<=i-1;i1++){ piece[i1][y]=0; g.setColor(Color.black); g.fillOval(50*i1+5@`50*y+5@`40@`40); } } }
き、汚いプログラム(T_T
754 :
名無し :2001/01/19(金) 19:55
省略 .................................................................... if(x!=0&&y!=0) if(piece[x-1][y-1]==0){ for(i=x-1@`j=y-1;i>=0&&j>=0;i--@`j--){ if(piece[i][j]==1||piece[i][j]==2)break; } System.out.println(i+"@`"+j); if(piece[i][j]==1){ for(i1=x@`j1=y;i1>=i+1&&j1>=j+1;i1--@`j1--){ piece[i1][j1]=1; g.setColor(Color.white); g.fillOval(50*i1+5@`50*j1+5@`40@`40); } } } }
755 :
名無し :2001/01/19(金) 19:56
public void mousePressed(MouseEvent e){ x=e.getX(); y=e.getY(); x=(int)(x/50); y=(int)(y/50); int Bsum=0; int Wsum=0; System.out.println("("+x+"@`"+y+")"); System.out.println("turn="+turn); if(turn%2==1){ System.out.println("NOW Black!"); BValid(x@`y); } else if(turn%2==0){ System.out.println("NOW White!"); WValid(x@`y); } for(int i=0;i<=7;i++){ for(int j=0;j<=7;j++){ if(piece[i][j]==0){ Bsum=Bsum+1; System.out.println("Bsum="+Bsum); } else if(piece[i][j]==1){ Wsum=Wsum+1; System.out.println("Wsum="+Wsum); } } } turn++; } public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }
756 :
デフォルトの名無しさん :2001/01/19(金) 20:57
どんなエラーが出てるのよ。
どこがいいのかもわからんな
758 :
デフォルトの名無しさん :2001/01/19(金) 22:35
あほだ。読んでもらえるのが当然だと思ってる時点で逝ってよし。 ついでに言うと、設計最悪。OOPちっとは勉強しろ。
759 :
728 :2001/01/19(金) 22:41
>>714 さん
ディゾルブのアルゴリズム解説ありがとうございました。
ぼんやりとイメージができてきました。
ランダムに1枚目の画像と2枚目の画像のピクセルを入れ替えていけばいいんですよね?
試してみます。
ただ、アニメーションGifの画像をディゾルブ処理をするとどうなるのか疑問です。
760 :
デフォルトの名無しさん :2001/01/19(金) 22:52
>>709 で似たような質問がありましたが、回答がなかったようなので質問してもよろしいでしょうか?
私も、JAVAでチャットを作っているんですが、皆さんはメモリの処理はどうしていますか?
何もしなくてもメモリの使用量が増えるだけで一向に減る気配がありません。
System.gc();コマンドでテキストの送信のたびにガべージコレクションを行っているんですが
あまり効果が出ませんです。(400KBくらい減って、一瞬でまた増える)
OSがW2Kなので落ちたことはありませんが、JAVAではメモリを気にする必要は本当にないんでしょうか?
761 :
714 :2001/01/19(金) 23:02
>>760 ポイントは、
(1)開いたストリームをclose()で閉じているか。
(2)閉じたFrame@`Dialog@`Windowをdispose()しているか。
(3)取得したImageをflush()しているか。
こんなところをチェックしてみてください。(1)-(3)はJavaから見ると外部のリソ
ースですから、ガベージコレクションで勝手に捨てられることはありません。
762 :
714 :2001/01/19(金) 23:04
>アニメーションGifの画像をディゾルブ処理をするとどうなるのか >疑問です。 え?これはアニメーションを再生中にということ?アニメーションを 再生しているのはJavaじゃないよね?ごめん僕もよくわからないや。
763 :
でふぉるとのななしさん :2001/01/20(土) 02:22
743です。 ゆっくり考えをまとめてみたら、理解できました。 有り難うございます。 738@`739@`748さん。 ありがとぅ!!
764 :
デフォルトの名無しさん :2001/01/20(土) 03:18
他人が書いたJAVAのプログラムを最小限の機能に絞れと言われて、 その作業をしているのですが、使われてないメソッドとかクラスとかを 削除していくには人力によるテスト以外ないのでしょうか。 実行中に一回も使われないメソッドやクラスを調べる方法 ありませんか?
765 :
デフォルトの名無しさん :2001/01/20(土) 03:26
>>764 コンパイラの警告レベル上げてみれば?
JAVAコンパイラはリンカで未使用ルーチンを弾いたりしないの?
gccは使ってないって警告してくれるので便利なんだけど。
766 :
デフォルトの名無しさん :2001/01/20(土) 03:28
あ、gccも公開関数とかは無理だったかな? つーか、プログラマなら参照元を調べるツールぐらい作れよ。
767 :
デフォルトの名無しさん :2001/01/20(土) 03:53
>>764 いわゆるObfuscatorと呼ばれる製品群を試してみましょう。
768 :
デフォルトの名無しさん :2001/01/20(土) 03:55
>>765 ていうか、そもそもJavaにはリンクなんて概念がないしぃ。
769 :
714 :2001/01/20(土) 04:25
>>767 764は、ソースレベルでの最適化を求めているのではないかな。
それは多分コードのメンテナンスやテストのため。
770 :
デフォルトの名無しさん :2001/01/20(土) 05:22
makedep>764
771 :
>764 :2001/01/20(土) 08:55
javaの実行オプション周りで何か使えるのがあったような気がします。
772 :
デフォルトの名無しさん :2001/01/20(土) 10:13
class Person { int age; Person(int age) { this.age = age; } } class Javatest { public static void main(String args[]) { String s1 = "p1"; Person p1 = new Person(44); System.out.println(s1.age); } } s1にp1という文字列を代入しておいて変数展開をして p1クラスのメソッドを使用しようと思ったのですがうまくいきません。 どうやったら変数展開をしようできるようになりますか?
773 :
_gunzip@Java初心者 :2001/01/20(土) 10:27
意図するところがよーわからんけど、 System.out.println(s1.age); ぢゃなくて、 System.out.println(p1.age); ぢゃないの? ....という問題ではなくて、こういう場合、HashMap使うんでないの? #ageを「あげ」と読んでしまう.....鬱だ
775 :
772 :2001/01/20(土) 11:49
System.out.println(s1.age); このs1にp1が代入してあるのでperlみたいに$s1 って感じで 変数展開できないかとおもったのでこれであってます
776 :
>>772 :2001/01/20(土) 13:13
>>772 ムーリー(;´Д`)
コンパイラに無茶さすなや
777 :
名無しさんダーバード :2001/01/20(土) 14:13
p1をJavatestのフィールドにすればリフレクションを使って 出来ると思うよ。java.lang.Classや、java.lang.reflect.Field あたりを見よう。
778 :
名無しさんダーバード :2001/01/20(土) 14:24
public class Person { public int age; Person(int age) { this.age = age; } } public class Javatest { public Person p1; public static void main(String args[]) { Javatest test = new Javatest(); try { test.doTest(); } catch (Exception ex) { ex.printStackTrace(); } } Javatest() { p1 = new Person(44); } private void doTest() throws Exception { //String s1 = "p1"; //System.out.println(s1.age); Class clazz = this.getClass(); Field f = clazz.getField("p1"); Person p2 = (Person)f.get(this); System.out.println(p2.age); } }
779 :
デフォルトの名無しさん :2001/01/20(土) 19:07
>764 C/C++ならcflowとかcxref、cscopeなど色々あるようだけど。 多分JAVAも探せば見つかるでしょう。 なければcflowとかを改造すれば良いでしょ。
780 :
デフォルトの名無しさん :2001/01/20(土) 23:29
一旦コンパイルして、その後ちょっと元ファイルを変更して、リコンパイルしたところ、 なんかJDKがちゃんとリコンパイルしてくれません。 それで一旦クラスファイルを消してから、 再びコンパイルすると、うまくいきました。 これっていうのはJDKのバグなんでしょうか? 環境: JDK1.3.0 Win98SEのDOSプロンプトよりJAVACでコンパイル
同じ環境だが、そんな事は、あったためしがないが?
>>780
782 :
780 :2001/01/20(土) 23:33
自己レスになりますが、 予想: JDKは変更点だけをコンパイルするが、何らかの原因で、 変更した事に気付かなかった? 追記: あ、あと、このクラスはメインの関数から呼び出されたクラスの中から、 さらに呼び出されるクラスです。
783 :
デフォルトの名無しさん :2001/01/21(日) 00:20
>>780 リファレンスより引用。
>>検索結果にソースファイルとクラスファイルの両方がある場合、javac は、クラスファイルが古くなっているかどうかを調べます。クラスファイルが古くなっている場合は、ソースファイルを再コンパイルし、更新後のクラスファイルを使用します。それ以外の場合は、見つかったクラスファイルを使用します。
つまり、class A@`B@`Cとあって、AがBを参照し、BがCを参照するような構造の場合、Cが変更されてもそのCを参照してるBのクラスファイルが古くなっていない(つまりBのソースが更新されていない)場合、クラスCはリコンパイルされない。
っちゅー事だ。素直に*.javaをコンパイルしたまへ。(藁
784 :
780 :2001/01/21(日) 01:32
>>783 様
なるほど。謎が全てとけました。ありがとうございます。
コンパイル関連でもう一つ質問したいのですが、
コンパイル時のエラーメッセージを読む事はできますか?
普通のDOSコマンドなら「command > log.txt」でリダイレクトできますが、
javacは何故か出来ないので。
785 :
デフォルトの名無しさん :2001/01/21(日) 01:39
>784 javacはstdoutじゃなくてstderrにメッセージ吐いてんじゃないの? だから其の辺を何とかすれば。
786 :
783 :2001/01/21(日) 01:55
こーいう風にすれば良いんじゃね-の?? javac -J-Djavac.pipe.output=true TestString.java > cm.log つーか、一回リファレンスと JavaHouseのトピックスに目を通したほうがいいよ…。
787 :
783 :2001/01/21(日) 01:57
788 :
>764 :2001/01/21(日) 02:11
>>784 Windows2000にしましょう。
スクロールバーつき、コピー&ペースト可能の
素晴らしいコマンドプロンプトがアナタを待っています。
レジストリいじればTABキーのファイル名補完もできるよ!
789 :
デフォルトの名無しさん :2001/01/21(日) 02:41
DOSプロンプトくらい自分で作れ! DOS全部は無理でもアリプの実行と標準入出力の制御くらいは作れるぞ!
790 :
デフォルトの名無しさん :2001/01/21(日) 03:10
>>786 それJDK1.3から使えない
oldjavac使えばできるけど
791 :
デフォルトの名無しさん :2001/01/21(日) 03:24
>>784 -785
出力先を変更する話は既出(きしゅつ)です。
cmd.exe(WindowsNT/2000のシェル)なら,入出力ストリームのリダイレクションが
できるのでそれを使います。具体的にはコマンドの末尾に 2>&1 というおまじないをする。
(と,Windowsのオンラインヘルプに書いてある。)
例えば
javac filename >log 2>&1
とします。
あるいは Javaコンパイラに oldjavac を使うのなら -Xstdout オプション
が使えます。このオプションを指定すると,stdout にエラーメッセージ
が出力されます。
つまり
oldjavac -Xstdout filename
など。
792 :
783 :2001/01/21(日) 03:31
>>789 うわっ、ホントだ、気付かなかった…。(汗)
フォローサンクスです。
それじゃCygwinかなんかで他のシェルを使うか、
それともSystem.setErr(System.out);を使うか…?
うわっ、もしかしてこっちも駄目になってるって事は無いよなぁ…。(汗)
793 :
>791 :2001/01/21(日) 03:48
-XstdoutもJDK1.3から使えない
794 :
デフォルトの名無しさん :2001/01/21(日) 03:56
796 :
デフォルトの名無しさん :2001/01/21(日) 09:16
javac filename 2> log でいいと思ふ。
それはNTもしくは2000のみ
798 :
デフォルトの名無しさん :2001/01/21(日) 12:39
どうでもいいけど、Javaを初心者に勧めるとき 一番困るのがこの辺なんだよな。
799 :
デフォルトの名無しさん :2001/01/21(日) 14:07
>>798 JBuilderFoundationとかのツールも
一緒に紹介すれば問題ないでしょう。
800 :
760 :2001/01/22(月) 13:50
>>761 の
>>714 さん、
レスありがとうございます。返事が遅くなってすみません。
(1)~(3)のこと、知りませんでした。おかげさまで大分改善したみたいです。
ところで、flushはImageのキャッシュを開放する命令ですよね?
JLabelにImageIconでImageを表示している場合に、flushをする方法について調べてみたのですが、
よく分かりませんでした。
JAVAハウスで、メモリ開放関連の記事でこうありましたが、
「JInternalFrameを使って、どんどんFrameを作成していたわけですが、
前画面にもどる際にdisposeすると同時に、親のJDesktopPaneから
removeしていなかった為に、
レイヤーのインデックスがどんどん増えていってしまっていたみたいです。」
removeという命令は必要なものなのでしょうか?内容がいまいちよく理解できません。
801 :
デフォルトの名無しさん :2001/01/22(月) 15:32
ファイルのエンコーディングを取得するにはどうしたらいいのですか。 getEncoding()までは分かったのですが・・・
802 :
714 :2001/01/22(月) 15:47
>>801 InputStreamReader#getEncoding()のことですか?これはInputStreamReader
オブジェクトが変換の際に利用する文字コードの取得ですよね。
私が知る限り、文字コードが未知のファイルのエンコーディング名
を取得するAPIはない。私も知りたい。
エンコーディング名を指定する箇所にJISAutoDetectと指定するこ
とで自動的に判別してエンコードしてくれるが、入力によって間違
う可能性がある。従って、私は自前で判別クラス(日本語限定)を
書いて使っています。
間違っているかもしれない。私は新しいJDKで仕事してないので。
未だに業務は1.1なので鬱氏。
803 :
714 :2001/01/22(月) 16:02
>800 JInternalFrameは使ったことがないので間違っているかもしれないけれ ども、これは、java.awt.Windowクラスのサブクラスではない。だから peerに依存してないので、disposeしていないからといってメモリが開 放されないということはないと思う。 Imageのflushは、僕の説明が間違っていて、さらに足りなかったん だけれども、flush()する必要のあるImageオブジェクトは自分で取 得したイメージであって、他の誰かが取得したリソースに関しては 知る必要はないんじゃないかな。使った奴が捨てろ。 ここまで書いて、私はImageとGraphicsをごっちゃにしていると多分 思う。Graphicsも自分で取得したら捨てる必要があるはず。
804 :
デフォルトの名無しさん :2001/01/23(火) 02:13
1: InputStreamReader KBD=new InputStreamReader(System.in); 2: BufferedReader number=new BufferedReader(KBD); 3: System.out.print("数値を入力して下さい= "); 4: System.out.flush(); 5: String line=number.readLine(); 6: x=Double.valueOf(line).doubleValue(); こんなサンプルを見つけたのですが 4行目のout.flushとは一体何の役目をしているのでしょうか。
805 :
デフォルトの名無しさん :2001/01/23(火) 12:26
書き込みバッファ(ライトバックキャッシュみたいなもん) をフラッシュしているのさ。 コレをしないと書き込みバッファにたまるばっかりで ("数値を入力して下さい= ")がいつまでたっても出力されないかもね。
806 :
デフォルトの名無しさん :2001/01/23(火) 12:30
public interface hoge { public void zzz(); } と public interface hoge { void zzz(); } の違い教えて。 可読性? インタフェースは勝手にpublic付けるよね?
807 :
デフォルトの名無しさん :2001/01/23(火) 12:43
>>806 ないんじゃない?
Cの関数宣言にexternつけるようなもんでそ
808 :
デフォルトの名無しさん :2001/01/23(火) 14:01
インターフェースのメソッドは勝手にpublicかabstractになるらしい。 メンバは勝手にpublic static finalになるらしい。ちょっと賢くなった。
809 :
デフォルトの名無しさん :2001/01/23(火) 19:26
age
810 :
デフォルトの名無しさん :2001/01/23(火) 19:34
UMLモデラ/CASEツールのオススメ教えて下さい。
>>810 金があるならRose。ないならArgoUML。
必ずしもおすすめはしないのでsage
812 :
薔薇は美しく散る :2001/01/23(火) 23:08
RoseってMSに買収されてVisualModelerになったんじゃ? 隣で使ってるけどさ。Rose。
813 :
:2001/01/23(火) 23:51
814 :
引っ越し :2001/01/24(水) 02:16
Class型というのがよくわかりません。 どんな意味があるんでしょうか? 厨房質問ですみません。
815 :
デフォルトの名無しさん :2001/01/24(水) 02:36
>>814 クラスローダー自作したりORB作ったり
IDEとかBeanツール作ったりデバッガ作ったりとかそういう裏方で
使ったりする。
要するにJavaのクラスそのものをごにょごにょしたいときに
処理対象のクラスはクラス型の変数に入れるわけ。
普通のプログラムではスタティックメソッドの中で
synchronizedブロック書くとき重宝するくらい?
816 :
java超初心者(引越し) :2001/01/24(水) 09:12
宣言をスーパークラスで行い、インスタンスを サブクラスで行うのと、宣言をサブクラスで行 い、インスタンスをサブクラスで行うのとでは どのようなことが変わってくるのでしょうか。import java.lang.*; class SuperClass{} class SubClass extends SuperClass{} public class Test{ public static void main(String args[]){ SuperClass obj = new SubClass(); } } (上記コードのなかの SuperClass obj = new SubClass(); とした場合と SubClass obj = new SubClass(); とした場合です) よろしくお願いします。
817 :
デフォルトの名無しさん :2001/01/24(水) 18:27
>>816 SuperClassのサブクラスがSubClass1@`SubClass2@`SubClass3@`@`@`
みたくたくさんあるときでも使う側から見れば十束ひとからげで
SuperClass一種類だけ扱えばすむのさ。
(あとSubClassをあとでこっそり入れ替えたりとかね)
詳しく説明するのがめんどいので
ポリモーフィズム(多態)で検索するか
オブジェクト指向の本でもよんで勉強してくれ
818 :
java超初心者(引越し) :2001/01/24(水) 18:50
>817 ご回答ありがとうございます。 早速検索して調べます。
819 :
デフォルトの名無しさん :2001/01/24(水) 20:58
public class (クラス名) extends Applet{ . . のようにアプレットを使って FileWriterなどのファイル処理は使えないと言われたんですが どうにか出来る方法ってありませんか?
>>819 ブラウザのセキュリティの設定をユーザーに変えてもらえれば
理論上は可能。具体的なやり方はしらない。
->JavaHouseで検索すればいっぱいでてくるんじゃない?
つかトロイでも送り込むつもり?
821 :
819 :2001/01/24(水) 21:20
>>820 ありがとうございます。
簡単なプログラムを作っているんですけど、
入力された文字列をテキストファイル経由で別のクラスに送ろうとして
出来なかったので質問しました。ウイルスなんてそんなスキル全然ないです、、
ローカルでやっててもブラウザ使ってたら同じですよね?やっぱり、、
822 :
デフォルトの名無しさん :2001/01/24(水) 23:45
>821 ローカルでなんかやるだけならアプレットなんかつかわんでも アプリケーションにすればいいじゃん。 初心者だと知らないことがよくある事実。 「Javaでアプリケーションが作れます」 (本屋に売ってる初心者本よ、いい加減Appletから入るのやめれ)
823 :
デフォルトの名無しさん :2001/01/25(木) 18:53
>>822 やっぱりAppletのアニメーションをチョコチョコッとやって終わりと
ゆう本は駄目ですか?
824 :
デフォルトの名無しさん :2001/01/25(木) 20:43
JAVAってらくちんだね。 一日でつかえるようになったよ。
825 :
デフォルトの名無しさん :2001/01/25(木) 21:24
以前、チャットアプリケーションについて質問した者です。また質問があるのですが、 1.GUI部のTextFieldで、例えば「あいうえおお」と入力し、改行する。 2.通信担当クラスのパケット送信部、String型の配列sendtextに「あいうえおお」が格納される。 3.getBytesでByte型に変換してbufferに格納する。 4.パケットの送信⇒パケットの受信 5.パケット受信部でByte型をString型に変換し、TextAreaに表示する。 するとこの場合、受け取ったデータは「あいう」だけになってしまいます。 Byteコードが1byteなので、日本語の2byteをうまく理解できないみたいですが、どうすればよろしいのでしょうか? ちなみに、5文字とか文字数が奇数のデータを送ろうとすると何も表示されません。どなたかご教授ください。 // パケット送信部 public void newsendmsg(String sendtext){ try{ // 送信 int n = sendtext.length(); for(int i = 0;i < n;++i){ buffer[i+nameLength] = (sendtext.getBytes())[i]; } if(n > 0){ DatagramPacket dp = new DatagramPacket(buffer@`n + nameLength@`chatgroup@`port) ; soc.send(dp@`TTL) ; } }catch(Exception e){エラー処理} }
826 :
825 :2001/01/25(木) 21:27
あ、Tabでの字下げが認識されなかった。スミマセン。
827 :
デフォルトの名無しさん :2001/01/25(木) 22:14
>>825 int n = sendtext.length();がおかしい。Stringに対して、
lengthを取得してもしょうがない。
int n = sendtext.getBytes().length;を試してみたら。
828 :
デフォルトの名無しさん :2001/01/25(木) 23:21
つうか、String.getBytes()はByte[]返すんでしょ? 何でそのまま渡さないで、新しいarrayに一バイトずつコピー するなんて妙なことしてるのでしょうか? bufferの先頭に別の文字列をしまってるだけなら、 Stringを+で連結してからまとめてgetBytes()で いいんじゃないの? buffer[0]~[nameLength]って何がはいってんでしょうか
829 :
825 :2001/01/26(金) 00:06
>>827 さん
無事に日本語が表示されました。
おかしかった理由はよく分かりませんが、ありがとうございました。
>>828 さん
ありがとうございます。
私はいつもプログラムに無駄が多いと言われています。
教えていただいたとおりに修正したところ、ずいぶんとすっきりしました。
勉強になりました。
830 :
デフォルトの名無しさん :2001/01/26(金) 00:24
ソケットについての質問です。 1つのソケットで読み込みと書き込みを同時に行うことってできますか? 読み込みと書き込みを別のスレッドで行うようにした場合、状況によっては同時に読み書きが起こる可能性もあるんですが。 ソケットって完全な双方向通信って可能なんですか?
831 :
デフォルトの名無しさん :2001/01/26(金) 01:09
InputStreamを取得するメソッドと OutputStreamを取得するメソッドの両方があるでしょ? それで試してみたらいいじゃん。
URLConnection.setRequestProperty(String key@` Sttring value)で HTTP_USER_AGENTがカエラレナイヨー 自作の串チェッカがJDK1.3ってバレバレだよー なんかかっこわるいよー(ワラ
833 :
デフォルトの名無しさん :2001/01/26(金) 03:42
JAVAで作った、Win32アプリケーションってアイコンが設定できませんよね。 アプリを配布したいのですが、見栄えが悪いので・・・。 フリーのアイコン書き換えツールを色々と試してみましたが、 あらかじめアプリケーションの中に組み込まれているアイコンしか書き換えられないんですよね。 ショートカットを作って、アイコンを設定するしか方法がないと思うんですけど、 実際どうなんでしょうか?
ネェイティブコードのランチャー付けとくのは駄目なん?
835 :
デフォルトの名無しさん :2001/01/26(金) 15:21
JComboBoxって項目の編集が可能ですけど、変更がリストに反映されません。 他の項目の選択を行うと、変更した内容が消えてしまいます。 変更した内容を0番目に新しく追加するという方法なら、書籍を調べてわかりましたが、 追加でなく上書きをするにはどうすればよろしいのでしょうか?
836 :
_gunzip :2001/01/26(金) 15:49
>>833 FrameクラスのsetIconImage(Image image)ではどうですか?
具体的には、
setIconImage((new ImageIcon("IMAGE_PATH")).getImage());
のように使えばいいと思います。
837 :
デフォルトの名無しさん :2001/01/26(金) 15:56
JavaScriptなのですが、 type="file" で、ファイルアップロードの機能をつくりました。 現在UPするファイルのサイズ制限をサーブレット側で チェックしてるのですが、これをJavaScript上で処理したいです。 そういうことは可能なのでしょうか? 現在の調査結果では対処が見付かっていません。 ブラウザはIE5.0、NetScape4以上です。
838 :
デフォルトの名無しさん :2001/01/26(金) 19:18
n次行列の行列式を求めるアプリケーションを作れっていう課題を大学で出されたんだけど全然分からないよー。 誰か助けて!
数学板に行った方がいいよ。
840 :
デフォルトの名無しさん :2001/01/26(金) 21:04
(JAVAプログラムで)n次行列の行列式を求めるアプリケーションを作れっていう課題を大学で出されたんだけど全然分からないよー。 誰か助けて!
数学板に行った方がいいよ。
842 :
デフォルトの名無しさん :2001/01/26(金) 23:45
>>838 @`840
JAVAの技術よりも、アルゴリズムが分からないと言っているように聞こえるのですが。
過去ログメニューに「ムッチンプリンのお姉さんが宿題を教えてあげます」スレがあるから、
そこで聞いてみたら?
844 :
デフォルトの名無しさん :2001/01/27(土) 07:52
jarのアーカイブを作成する際に、そのjarの中で、どこからも参照されていない クラスファイルを取り除くツールはありませんか? その機能をもつオブファスケ ータでもよいです。
845 :
デフォルトの名無しさん :2001/01/27(土) 15:57
大抵のObfuscatorはその機能持ってるんちゃいます?
846 :
819 :2001/01/27(土) 16:26
前に
>>819 で
データの書き出しに付いて聞きまして、
結局アプレットをやめて、フレームでやる事にしました。
そこで、二つのフレームを作り、
片一方のフレーム(A)からもう一方のフレーム(B)を呼び出して
(B)でテキストファイルを保存しようと思ったんですが出来ないんです。
(B)単体ではちゃんと保存できるのですが、、
PrintWriterでは出来ないのでしょうか?
847 :
デフォルトの名無しさん :2001/01/27(土) 16:33
別にできるでしょ。テキストのデータへの参照をちゃんと持ってるか? データの参照がAにあるなら、Bで保存のイベントが起きたときにAに通知 →Aが所有しているAのテキストデータをファイルへ保存、とかかな。 あと、Javaのテキストのストリームって、FileならFileWriterでストレージに 書くんじゃないのでせうか?
848 :
819 :2001/01/27(土) 16:51
ゴメンなさい。解決しました。
ただ単に(A)も(B)もmainがあったからうまく行かなかったみたいです。
3時間も考えて先生に聞いたら5分で終了。ちっと激鬱気味です、、
>>847 さん
レスありがとうございました。
PrintWriterの方がデータ型を区別しないんで楽かな?と思い使ったんですが
FileWriterの方がいいのでしょうか?
849 :
デフォルトの名無しさん :2001/01/27(土) 16:58
>848 巧くいかない理由が多分勘違いだと思うが… BにAへの参照を渡せれば別にmainが両方にあろうが関係ない。 AはBをどうやって呼び出してんだ? Aが自分でBをnewしてshow()すればいいだけだよね? あとPrintWriterってプリンターへの出力ストリームだと思うんだけど。 意図したとおりに保存できるならどうでもいいが。
850 :
819 :2001/01/27(土) 17:33
>849さん 遅レスすみません。 >Aが自分でBをnewしてshow()すればいいだけだよね? そうしてました。それで、単体で動くBのshow()を消しただけだったんです。 さらにmainを消したら動くようになったんですけど、、 具体的に書くと、、 public class MyInputFrame extends Frame{←これがBです TextField txt_0@`txt_1; Button btn_0@`btn_1@`btn_2; static FileOutputStream fo; static PrintWriter fop; public static void main(String args[]){ //MyInputFrame my =new MyInputFrame(); //my.show();←呼び出される側になる時、消しました } 単体で動かす時用です MyInputFrame()throws java.io.IOException{ super("Menu"); ・ ・ としててWriterとかclose()とかが動かなかったんですが、 public static void main(String args[]){ の部分を消したらうまく行くようになりました。 別の理由でうまく行くようになったんですかねぇ、、分からないデス、、 長くなってスミマセンでした
851 :
819 :2001/01/27(土) 17:35
あ、スペース消えてて目茶苦茶見づらいですね 以後気を付けます。
852 :
844 :2001/01/27(土) 17:35
>>845 なかなか目的に合うものがないです。もしよかったらURL教えてください。
853 :
デフォルトの名無しさん :2001/01/27(土) 18:03
>850 そこだけみても分からん。ソース全部どこかに上げてくだされ。
854 :
819 :2001/01/27(土) 23:26
>854 どうでもいいが、java.awt.Component.action()は JDK1.1以降でdeprecation(要するに超時代遅れ)だが。 そんなコーディング誰が教えてんだ?何処のガッコ???
856 :
819 :2001/01/27(土) 23:45
>855さん 学校は、、まぁ、、その辺の学校です。 JAVAの勉強始めたばっかりなので図書館にあった本の サンプルプログラムをいじくってる状態なんです。 確かに結構古い本だったんで時代遅れなんですね。 C(++ではなく)をやってたので少しは解るんですけど、 中身より表示関係で時間食われてます。
857 :
デフォルトの名無しさん :2001/01/28(日) 03:06
ん?このスレ20件表示でなんで出てないの?
858 :
デフォルトの名無しさん :2001/01/28(日) 18:59
819 じゃないけど。
>>855 > どうでもいいが、java.awt.Component.action()は
> JDK1.1以降でdeprecation(要するに超時代遅れ)だが。
俺の研究室の奴はみぃ~んな古いイベントモデル使ってますよ。
GUI と言えば何故かアプレットだし。
学校にある本が4、5年前の java が流行りだした時の本ってのがかなり有害だったりしますね。
859 :
デフォルトの名無しさん :2001/01/29(月) 02:54
>850 「JAVAのからくり」(個人的に俺は好きではないが) 買って読んでみるといいかも。今はGUIはswing,Beans…だし なんか850の読んでる本がイタそうなので。
860 :
デフォルトの名無しさん :2001/01/29(月) 04:37
class X1 { } class X2 { public void display() { System.out.println("Hello from X2"); } } public class ObjExam { public static void main(String[] args) { X2 x = new X2(); x.display(); } } このプログラムをmainメソッド内でクラスX2のインスタンス化を するのではなくクラスX1内でクラスX2のインスタンス化をしたいと思う のですがどのようにしたらいいでしょうか? イメージだとこんな感じです class X1 { X2 x = new X2(); } class X2 { public void display() { System.out.println("Hello from X2"); } } public class ObjExam { public static void main(String[] args) { x.display(); } }
861 :
デフォルトの名無しさん :2001/01/29(月) 05:05
>>860 ほとんどそのままで動いた
class X1 {
X2 x = new X2();
public void display() {
x.display();
}
}
class X2 {
public void display() {
System.out.println("Hello from X2");
}
}
public class ObjExam {
public static void main(String[] args) {
X1 x = new X1();
x.display();
}
}
862 :
デフォルトの名無しさん :2001/01/29(月) 06:48
>>858 IE3やNN3でアクセスしてくるユーザーなんてもう1%もいないから
新イベントモデルにしようよ~。jarも使おうよ~。
863 :
デフォルトの名無しさん :2001/01/29(月) 08:50
(JAVAスクリプトで)n次行列の行列式を求めるアプリケーションを作れっていう課題を大学で出されたんだけど全然分からないよー。 誰か助けて!
ネタ?
865 :
デフォルトの名無しさん :2001/01/29(月) 11:23
教えて。java rmi で chat サーバはアプリケーション、クライアントは、Netscapeで動かすapplet。 appletで、 chat = (ChatIntf)java.rmi.Naming.lookup( "rmi://" + getCodeBase().getHost() + "/Chat" ); java.rmi.ConnectException: Connection refused to host: [www.hoge.ac.jp:1099]; nested exception is: java.net.ConnectException: Connection refused 家でlocalhostを使ったときは動いたのに、学校に持ってきたら動かない。 学生で一般ユーザの権限しかないです。 んで、自分のhomepageにチャットを置きたい(というか実験したい)。 なんとかならんのでしょうか?
866 :
デフォルトの名無しさん :2001/01/29(月) 11:28
JAVAって、入力文字に「カッコ株」とか「丸1」とかの機種依存文字を 入れると絶対に文字化けを起こすんですか? どなたか直したぞーっていう人います? 私は依存文字一つ一つに変換用の文字を持たせて、入力した瞬間に その文字に変換して、表示するときにはまた変換して機種依存文字に 直すという力技で対応してみましたが、全部の機種依存文字のフォローは しきれないというか効率悪いのでやってません。 もし対処法が仕様的に諦めるしか方法がないのなら ガッカリな言語ですね。
・・・言語仕様のせいにしていい問題なのか?これって
868 :
デフォルトの名無しさん :2001/01/29(月) 12:17
869 :
デフォルトの名無しさん :2001/01/29(月) 12:20
「~」とかも化けるので注意。
870 :
866 :2001/01/29(月) 12:31
そうですか。。。やはり使用なのですね。 でもでも。Yahooなどで「丸1」等の機種依存文字を入力しても 正しく処理できているのはなぜなのでしょう? とても羨ましいです。
871 :
デフォルトの名無しさん :2001/01/29(月) 12:46
>>866 エンコーディングにMS932を使えばWinローカルならいけるみたい
ただし限りなく裏技に近いと思う
本来UNICODEにない文字(だよね?)なので
Win以外での互換性(表示が化けるとか)を云々するのはお門違い
一応テストプロ公開
import java.io.*;
public class IllegalCharTest
{
public static void main( String[] args )
throws IOException
{
String encode = "MS932";
if( args.length >= 2 ){
encode = args[1];
}
Reader reader = new InputStreamReader(
new FileInputStream( args[0])
@` encode );
int c;
while( ( c = reader.read() ) != -1 ){
System.out.println( (char)c );
}
}
}
>>870 じゃあSolarisのネスケでもYahooで
マルイチが含まれるページが正しく検索処理できるんだな?
>>866 @`870
ごめんうそついた
UNICODEにマル1とかはあった
MS932をエンコーディングに使えば一応マル1とかも
ファイルからなら問題無く入出力できる。
(ただしその他の文字コード変換で少し互換性に問題があるのであまりお勧めしない)
問題はマル1とか、もともとJISになかった
文字を入力したり表示したりすることができないプラットフォーム
があることだ。
ひょっとしたらSwingで表示してPureJavaのIMEを使えば
Sunでもマックでもいけるのかもしれない。
誰か試してくれ。
874 :
デフォルトの名無しさん :2001/01/29(月) 19:04
インターフェースとアダプタクラスってのがピンとこないんですが。。
アタフタクラス
876 :
デフォルトの名無しさん :2001/01/29(月) 21:33
Visual J++は、どうやってダウンロードしたら、よいのでしょうか?
>874 いちばん簡単なのは、 インターフェース…ケーブルのコネクタの仕様 アダプタクラス……コネクタ変換器
>>876 ダウンロードボタンを押すんだよ。
そういう初心者な質問はWindows板で聞け。
>865 getCodeBaseの設定した?
>878、879 ありがとうございました
883 :
デフォルトの名無しさん :2001/01/30(火) 13:10
JBuilder4を使うんですが、なぜかWEB実行ができないです・・・。 実行するとメッセージウィンドウに幾つかlogがでた後、 Context log: path="" Socket Exception/ ってのが3秒間隔くらいでずーっとメッセージウィンドウにでるだけ・・・。 どなたか同じような症状を体験された方いません? かなりせっぱ詰まってる状態です・・・。
884 :
819 :2001/01/30(火) 17:32
>>850 あたりでお世話になったものです。
また詰まってしまいました、、
フレームから新しいフレームを呼び出してテキストに保存しました。
ここまでは
>>854 とあまり変わっていません。
その後でさらに新しいフレームを呼び出して今度はそのテキストファイルを
読もうとすると何故か読み込みをしないんです。
メソッドはBufferedReaderを使っています。
呼び出された3つめのフレームを単独で動かすと読み込めます。
2つめのフレームでclose()を使いファイルは閉じています。
何か考えられる原因はありますか?
学校なのでファイルは挙げられないので分かりづらいでしょうがお願いいたします
そろそろ新スレいるかな。
886 :
デフォルトの名無しさん :2001/01/30(火) 18:14
887 :
1 :2001/01/30(火) 21:40
888 :
無党派さん :
2001/02/02(金) 22:16 C#ってなんですか?