トップページ⇒tech
982コメント338KB

ネタ心者歓迎!今更ながらにJava相談室 その4

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
                        
 || ̄ ̄|   ∧_∧
 ||Java|  (     )   ∧∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ||__|  ( ○  )  (   ) < 俺達の旅はここから始まる。
   ||    │ |  │   /  |    \___________
((二二)) .(_(__)〜(___ノ

( ゚Д゚) < カキコする前に>>2-10をチェックしとけゴルァ!!
>>2 過去スレの一覧
>>3 Javaの基礎と よくある質問 (初心者はここをチェック!)
>>4 Java関連スレいろいろ
>>5 Javaを撲滅させたい方、死滅を心配してる方、Cとの違いを知りたい方はこちらへ
* 諸般の事情により、リンクがずれる事もあります。
0140 NGNG
なんか、実りが無いね。フゥ。
0141デフォルトの名無しさんNGNG
あるアニメーションを正典、逆転ボタンをおすことにより動かしたいんですが
ボタン無しで動かすことはできました。
ボタンを追加しようとすると、これはイベントリスナーの知識がいりますか?
0142デフォルトの名無しさんNGNG
javacでコンパイルするとき、そのソースの中で使われてるクラスどもは
いっしょにコンパイルされちまいますね
0143デフォルトの名無しさんNGNG
>>120-125
teikadeの開発って、もうまったくやってない(進まない)のかな?

teikade無しではまともに開発できないカラダになってしまったのだけど。
0144デフォルトの名無しさんNGNG
>>143
もうだめぽ
0145デフォルトの名無しさんNGNG
キーとインデックスの両方で要素を特定できるコレクションAPIって、
Javaのデフォルトパッケージにはあるのでしょうか?
HashtableやHashmapはキーは指定できてもインデックスでの指定は出来ないみたいだし。

自分でその機能を持つクラスを作るしかないのでしょうか?
0146109NGNG
>>145
1.1.xの頃そういうのが見つからなくて、取得したEnumerationの順番を
保証するようなHashtableを作った覚えがある。
0147デフォルトの名無しさんNGNG
>>145
JDK1.3までなら、自作しかないです。
JDK1.4ならLinkedHashMapというクラスが追加になってますので
それを使いましょう。
0148145NGNG
まあ、HashMapと、keyによるLinkedListをdelgeteeにした
Mapのコンクリートクラス一個自作すればいいだけだけど。
0149147NGNG
145じゃないや、メンゴ。
0150デフォルトの名無しさんNGNG
if(resources[i].allocated == false) {
resources[i].allocated = true; }
以下の中で、なぜ上記の部分を削除してコンパイル実行するとResourceが0だけになるんでしょうか?
class Resource {
boolean allocated;
int rid;
Resource(int rid) {
allocated = false;
this.rid = rid; }
void use(int uid) { try {
System.out.println("User " + uid + " uses resource " + rid);
Thread.sleep((int)(5000 + 5000 * Math.random())); }
catch(Exception e) { e.printStackTrace(); } } }
class ResourceCoordinator {
private final static int NUMRESOURCES = 3;
private int totalAllocated;
private Resource resources[];
ResourceCoordinator() {
totalAllocated = 0;
resources = new Resource[NUMRESOURCES];
for(int rid = 0; rid < NUMRESOURCES; rid++) {
resources[rid] = new Resource(rid); } }
synchronized Resource get() {
while(totalAllocated == NUMRESOURCES) {
try { wait(); }
catch(InterruptedException ie) {
ie.printStackTrace();
System.exit(0); } }
Resource r = null;
for(int i = 0; i < NUMRESOURCES; i++) {
if(resources[i].allocated == false) {
resources[i].allocated = true;
r = resources[i]; break; } }
++totalAllocated;
notifyAll();
return r; }
synchronized void put(Resource r) {
r.allocated = false;
--totalAllocated;
notifyAll(); } }
class User extends Thread {
ResourceCoordinator rc;
int uid;
User(ResourceCoordinator rc, int uid) {
this.rc = rc;
this.uid = uid; }
public void run() {
try { while(true) {
Resource r = rc.get();
r.use(uid);
rc.put(r);
sleep(3000); } }
catch(Exception e) {
e.printStackTrace(); } } }
class Zero { private final static int NUMUSERS = 10;
public static void main(String args[]) {
ResourceCoordinator rc = new ResourceCoordinator();
for(int uid = 0; uid < NUMUSERS; uid++) {
new User(rc, uid).start(); } } }
0151 NGNG
丸投げすんなボケ。
0152デフォルトの名無しさんNGNG
クラスパスについて質問。

時々 jre/lib/ext/ に入れるのではダメで、任意のディレクトリに
置いて、クラスパスを設定しないといけない JAR ライブラリとか
あるけど、これはどうして?

jre/lib/ext/ に置くのと、クラスパスを設定するのとの違いは
何なのですか? 解説しているWebサイトなどご存知でしたら
ご教授ください。
0153152NGNG
ここに説明があった。
http://java.sun.com/products/jdk/1.2/ja/docs/ja/guide/extensions/

なんとなく分かったような。つまり、分かってない。
0154デフォルトの名無しさんNGNG
単にJDK側のjre/lib/ext/にJARおいて
JRE側のjavaコマンド呼んじゃってる、とかじゃないの?
0155152NGNG
>>154
"JRE側のjavaコマンド" ってどういうこと?
0156デフォルトの名無しさんNGNG
>>155
ここ読んでみると良し
http://www.atmarkit.co.jp/fjava/onepoint/java/jv_ext.html
0157デフォルトの名無しさんNGNG
イメージアイコンが出ないんですが何がいけないと思いますか?
0158デフォルトの名無しさんNGNG
>>157の頭
0159デフォルトの名無しさんNGNG
>>157
そんな質問の仕方なら>>158が正解
0160デフォルトの名無しさんNGNG
Javaの勉強は一通り以上したつもりだけど、
いざちょっと大きいアプリケーションを作ろうと思ったら
どう作ったら良いのかかなりとまどったりしてます。

デザパタ本も一通り読んだしちょっとしたクラス設計位はなんとかできそうに
思うんだけど、大きなアプリケーションになるとパッケージ構成やクラス構成
とかってどーいう風にするのが良いのかサパーリわからん。

とか思っている漏れにお薦めな本とかサイトってなんかないですか?
0161デフォルトの名無しさんNGNG
とりあえず他人のプログラム読むのが一番早いんでねーの?
1万行くらいの簡単なアプリとか。

あとはJDKのソースとか見てると、それなりにパケージの作り方とか
分かってくっぺ。
0162 NGNG
>1万行くらいの簡単なアプリとか。

1万行が簡単なのか? と煽りに乗って見る。
0163日下部圭子 ◆ib749tYo NGNG
In article >>162, /162 wrote:

> 1万行が簡単なのか?

力自慢のプログラマのなら、一日数千行くらいは珍しくありませんよ。
陽一さんも5000行とか書いてましたし。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0164デフォルトの名無しさんNGNG
Javaに限ったことじゃないんだけど、訊いていいスか?
「同期」と「非同期」の意味が分からないんだけど、
やさしーく説明してもらえないでしょうか?
0165デフォルトの名無しさんNGNG
JAVAの通信ってIPがわかればできますか?
サーバー行為禁止されてるプロバイダなんです。
この場合、通信できませんか?NetMeeting等はIPで接続できるけど…
0166デフォルトの名無しさんNGNG
コードの価値?を行数換算してる時点でイタイ。
たった数行でも美しいコードもあれば、数百万行費やしてもクソなコードもある。
要は「思想」だ。
0167デフォルトの名無しさんNGNG
何万行にもなるコードはクソである事が多い?
0168デフォルトの名無しさんNGNG
HelloWorld.class というファイルを
java HelloWorld
として実行しても、
Exception in thread "main"java.lang.NoClassDefFoundError:HelloWorld
というエラーが出てしまいます。
CLASSPATH環境変数の設定に . がないのが原因らしく、
java -classpath . HelloWorld
とすればうまくいきます。
CLASSPATH環境変数の設定をどうやって、どのようになおしたらよいでのでしょう?
教えてください。よろしくお願いします。
0169デフォルトの名無しさんNGNG
age
0170デフォルトの名無しさんNGNG
>>168
環境変数の設定方法はOSによって違う。
0171168NGNG
すいません。Windows98です。
0172デフォルトの名無しさんNGNG
>>164
例えばあるメソッドがある処理を担当している時、
その処理が終わったらメソッドコールから帰ってくるのが「同期」
「処理しておいてね」「あいよー」でメソッドコールから返ってきて、
いつ実際に処理されるかは保証しない(多分、いつかは処理されるけど)
のが「非同期」。

普通のメソッドコール=同期。
非同期で依頼した場合、処理終了を通知してもらうメカニズムが、
普通は必要。「コールバック」とか呼ばれるやつ。
非同期処理は、普通マルチスレッドまたはプロセス間通信などの機構に
よって実現されるので、やろうと思ったらちょっと勉強が必要。
0173 NGNG
SET CLASSPATH= ライブラリのフォルダの絶対パス
だったかな?
0174 NGNG
>>160
だから暗記から入るなと・・・。
その上、一万行もの他人のコードをサンプルにしたら挫折するってば。
0175デフォルトの名無しさんNGNG
>>160
リファクタリング本片手に作っては直すを1000回くらいやると吉。
0176デフォルトの名無しさんNGNG
>>160
まず、「イベントドリブン」から勉強すべし。
0177164NGNG
>>172
Thanks, 非常に分かりやすかった。
0178デフォルトの名無しさんNGNG
>>168
CLASSPATHに.を追加したらいいだけ。
0179165NGNG
IPがわかれば通信ってできます?
0180デフォルトの名無しさんNGNG
>>179
防火壁とかないなら。
0181160NGNG
レスどうも。勉強不足と経験不足は全然違うと痛感した・・。

>>161
行数多そうで、参考になりそうなソースコードってそんないろいろ見つかるものすか?。
クライアントサイドなアプリで。

>>175
丸暗記で勉強したわけでもなくて、ちっこいプログラムなら結構たくさん書いたけど意味無いのかな・・・。

>>175、>>176
リファクタリング、イベントドリブン、どっちもなんとなくのイメージはあるけど
具体的に取り組むとなるとどうするのかはわからない・・、今度調べてみます。
0182デフォルトの名無しさんNGNG
>>181
JDK添付demoのSwingSet2でどうよ。
0183デフォルトの名無しさんNGNG
変数を初期化するとき
class hoge {
 Foo foo = new Foo();
 hoge() {}//コンストラクタ
}
と
class hoge {
 Foo foo;
 hoge() {
  foo = new Foo();
 }
}
どっちが良いっていうのはあるんですか?
0184デフォルトの名無しさんNGNG
>>183
フィールド初期化は、コンストラクタメソッド起動より前に初期化されるということ、
それからコンストラクタは、サブクラスでオーバーライドが掛かる可能性があると
いう考慮をせよ。それが望ましいことならコンストラクタで、望ましくないなら
フィールド初期化=コンストラクタメソッド起動以前の初期化にせよ。

OK?
0185183NGNG
>>サブクラスでオーバーライドが掛かる可能性があると
>>いう考慮をせよ。
ああ、これは納得です。たしかにそうですね。即レスどうも。
0186デフォルトの名無しさんNGNG
プロパンティsage

いまだに使い方が判らん。というかサンプルが動かない。
コンパイルにコツがいるのか実行にコツがいるのか。
ポイントはクラスパス?
0187184NGNG
初期化で思い出したが、インスタンスフィールドは初期化しないと
デフォルト値で必ず初期化される。
オブジェクト参照ならnull、プリミティブ値なら0(false)。

…ねえ、だからいちいちnull突っ込むのやめましょうよ、リーダ。
0188184NGNG
>>186
java.util.Propertiesなら、newして、プロパティファイルの
フルパス名でload()すればいいだけじゃないか?

あとの使い方はMapみたいなもんでしょ。
0189デフォルトの名無しさんNGNG
>>187
わかっててインスタンスフィールドをnull等で初期化してる人も多いみたいだけど、
そういう人は敢えて代入しないと気持ち悪いんじゃないかな。
感覚的な問題だと思う。別に害はないのでほっとけばいいのでは?

>java.util.Properties
日本語通らないんだったっけ?
0190184NGNG
>>189
ASCIIフォーマットオンリーです。マルチバイト文字は\uエスケープ。
日本語使いたいならnative2asciiコマンドを通すべし。
0191 NGNG
>>184
オーバーライドも何も、そもそもコンストラクタは継承されないし、
子クラスのコンストラクタは、親クラスのコンストラクタを
必ず呼ぶのでは??
0192184NGNG
>>189
>わかっててインスタンスフィールドをnull等で初期化してる人も多いみたいだけど、

言語仕様で保証されていても、それを知らないボケプログラマに揚げ足取られて
面倒な思いをするような隙を与えないようにするという意味があるのかもねー。
同僚や外注がどうやら口煩いだけのアホらしい時は、おいらもやるさ。
0193184NGNG
>>191
ちゃんと勉強した方がいいよ。super(hoge)って知ってる?
0194 NGNG
>>193
知ってるけど?
君は何かコンストラクタについて誤解をしてる気がする。
0195184NGNG
すまん、オーバーライドとは言わないかもしれないな。コンストラクタは
単に「サブクラスのコンストラクタから呼ばれるかもしれないし、呼ばれない
かもしれない」ということだな。
0196 NGNG
>>195
>呼ばれないかもしれない

絶対に呼ばれるよ。
0197189NGNG
漏れは186じゃないんだけど、ありがとう。
Propertiesって自分は全然使ってないんで、はっきり覚えてませんでした。

>言語仕様で保証されていても、それを知らないボケプログラマに揚げ足取られて
それはあるかも。
ただ、ローカル変数と混同している人もいそうですね。
コンパイラに怒られた経験から変数はすべて明に初期化してるとか。
0198デフォルトの名無しさんNGNG
clone()メソッドってどうやって実装したらええの?
おせぇ〜て
0199184NGNG
>>196
ちゃうちゃう。サブクラスが、親クラスの複数のコンストラクタの中の
どのコンストラクタを呼ぶかはサブクラス実装者の責任になるという話っすよ。

どれか(明示しなければデフォルトコンストラクタ)が呼ばれるのは
確かに絶対間違いないけど。
0200デフォルトの名無しさんNGNG
>>198
implements Cloneable
0201184NGNG
>>197
それから、日本語が含まれるプロパティをつかうのなら、
PropertiesよりはPropertyResouceBundleを使うべし、だな。
JVMランタイムが自身が実行されえいる環境のlocaleによって、実際
に使われるプロパティファイルのファイル名を分岐してくれるから、
国際化対応が楽。

>>198
なにが聞きたいんだか良くわかんないけど、ディープコピーがしたい
っつうなら、こんな感じでどうかね。

class Hoge{
 private Hage hage;

 ///…

 public Object clone(){
  Hoge dst = super.clone();
  if(this.hage!=null)
   dst.hage = this.hage.clone();
  return dst;
 }
}

コアAPIのソースでも眺めてみた方がはやいかもよ。
0202184NGNG
implements Cloneable忘れてた。スマソ。
0203161NGNG
えーと、とりあえずコード読んだら?と言った者ですが。

>166で指摘されているように、もちろん1万行あればいいってわけじゃなくて、
当然「まともな」アプリケーションを探すべきだと思いますが、
「1万行」と言った意味は、
アプリケーションがそれなりの規模であり、通常力技だけでコーディングしていると
破綻しかねない量だと思うので、「破綻せずに」メンテナンスされているコードなら、
きちんと中身も整理されているんじゃないかと思ったわけです。

もちろん個別に例示されて「破綻してるじゃねぇかゴルァ!!」ってのはあるとは思いますけど。

で、そうでなければ、JDKのソースとか見てみるのもいいかもよ、と言ったわけです。

>>181
とりあえず、Windowsの小さなフリーソフトとかを移植してみれば?
そうすると、いろいろ煮詰まると思うし、クラスがボコボコでき始めると、
パッケージ化したくなるし、実践的なことはやっぱ手を動かして覚えるしかないと思う。

ちなみに、オイラは

app.core.*;
app.core.event.*;
app.gui.*;
app.gui.event.*;
app.test.*;

みたいにパッケージ化してたりする。我流なので汚いとは思うけど。やってみないと分からんし。
0204 NGNG
>>199
呼ばれて困るコンストラクタなんて、そもそも有り得ないよ。

呼ばれたコンストラクタでフィールドを初期化してなくても、それはその
コンストラクタを書いた人が希望しての事だから、特に問題は無いはず。

だから「コンストラクタは呼ばれない事も有る」と言うのは、根本的にオカシイと思う。
それは「呼ばれて困るコンストラクタを書くなよ」とアドバイスするのと同じだと思う。

>>183の話に戻すと、フィールドをその定義時に初期化するのは、
「この値はコンストラクタで動的に初期化することはないですよ。
 どのコンストラクタが呼ばれようとも、最初は必ずこの値ですよ。」

という意思表明であるべきではないかな。
0205 NGNG
204の続きだけど、
だから、必要も無いのにフィールドにnullを入れるのも良くないと思う。

それが絶対にnullで初期化され、コンストラクタで変更される場合が無い場合なら問題ないけれど、
nullを代入しているにも関わらずコンストラクタや初期化節で別な値を入れるのは、
これはプログラマとしての信義を問われるのではないか。
0206デフォルトの名無しさんNGNG
>>205
こいつ、分って言ってのか?
0207デフォルトの名無しさんNGNG
サードパーティー製のJavaVMってるの?
MS意外で、Lunixなもんで、
0208デフォルトの名無しさんNGNG
>>207
IBMの奴とか?
0209デフォルトの名無しさんNGNG
caffeってどうなったのかな
0210デフォルトの名無しさんNGNG
まつがった

>サードパーティー製のJavaVMってあるの?

>>208
URL知らん?
0211デフォルトの名無しさんNGNG
HPの奴はどういう扱いになるよ。
0212209NGNG
"Kaffe"だった
なんかPS2Linuxでも動くようだ。ふーん

>210
http://www-106.ibm.com/developerworks/java/jdk/linux130/?dwzone=java
0213 NGNG
>>206
>こいつ、分って言ってのか?
お前、日本語が分かって言ってるのか?(w
0214デフォルトの名無しさんNGNG
ちょっとね、アレな初心なんで、アレだが、

ストリングが空かどうか調べるときがかったるいんで、アレなんだけど

if ( str != null && str.length() != 0 )
{
 空みたいな、アレ
}
else
{
 詰まってそうな、アレ
}

みんなどう、アレしてんの?

if ( str =="" )
っていうふうにしてくれや

漏れは、Stringにnullは入れないで””を入れるように、アレしてみようかと、
思ったり、思わなかったり。。。
0215デフォルトの名無しさんNGNG
>>213
すっこんでろな。
0216デフォルトの名無しさんNGNG
>>212
速いんだべか?
0217 NGNG
やばい、基地外を相手にしちゃったのかも・・。
0218デフォルトの名無しさんNGNG
>>216
人に聞く前に自分で試せ
0219デフォルトの名無しさんNGNG
つまりSUNにお金をたーんと払って認定されたもの以外は
ここでは対象外と言うことで。
0220デフォルトの名無しさんNGNG
>>217
いいから、もう、しゃべんなって。
0221デフォルトの名無しさんNGNG
>>216
そうでもない。
0222デフォルトの名無しさんNGNG
>>214
なんで、誰もこの人に突っ込まないの?
0223デフォルトの名無しさんNGNG
>>222
じゃ、おまえがつっこんで下さい。
0224デフォルトの名無しさんNGNG
>>222
みんなが放置しているのに、一人で騒いでいる自作自演野郎発見
0225 NGNG
>>214
とりあえず、文字列の比較に"=="を使うなよな。

と教えてあげる優しい人は俺だけですか!?
0226デフォルトの名無しさんNGNG
>>214
空かどうかのみで分けるなら
if ("".equals(str)) {
// 空文字だけどどうよ
}
0227デフォルトの名無しさんNGNG
"".equals(str)
0228227NGNG
かぶった、すまそそ
0229デフォルトの名無しさんNGNG
javaはもう消えたんじゃなかったの?
0230デフォルトの名無しさんNGNG
>>229
私はアイアプリのjava機能を最新機能だと思っていますが、何か?
0231デフォルトの名無しさんNGNG
どうでも良いけど独自仕様つうかカテゴリがうじゃうじゃ増えるね。
write onceはどこへやら。
全てのJVMで共通に使えるのって文字列に関するクラスぐらいじゃないの?
0232デフォルトの名無しさんNGNG
>>227
トリッキーな・・・。つうか動くのか?
0233デフォルトの名無しさんNGNG
いや、トリッキーかと思ったけど、比較文字列が複数有る時は
そっちの方が綺麗だな・・。
0234 NGNG
iアプリ最高!
iアプリ>>>>>>>>>>>>>>デスクトップアプリ
0235デフォルトの名無しさんNGNG
>>232
トリッキーなのか、あれ?
0236 NGNG
str.equals(null)
が標準。
0237 NGNG
比較元と比較先が逆っつうのはいただけない。
0238デフォルトの名無しさんNGNG
>236
常にfalseになるよ
0239デフォルトの名無しさんNGNG
そーいや 某所でも Object.equals() の
話題があったっけなぁ…
傍観してる分には面白かったけど。
■ このスレッドは過去ログ倉庫に格納されています