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

初心者歓迎! Java相談室 その7

■ このスレッドは過去ログ倉庫に格納されています
0001がばろん@MたんちゅきちゅきNGNG
   ∧
  /●\
 ( /\ )  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚) < 私は、じゃばこ ですが、何か?
  ./  |    \_____________
 (___/
/

>>2 過去スレの一覧
>>3 Javaの基礎と、よくある質問 (初心者はここをチェック!)
>>4 Java関連スレいろいろ(統合開発環境・サーバサイド・その他)
>>5 Javaを撲滅させたい方、死滅を心配してる方、Cとの違いを知りたい方はこちらへ
>>2-10 諸般の事情により、リンクがずれた場合。

/* JavaScriptの質問はWeb製作板へどうぞ。*/
+ JavaScript の質問用スレッド vol.9 +
http://pc.2ch.net/test/read.cgi/hp/1017668857/l50
0237234NGNG
<<236
どっちの表記も見かけたので
どちらでもOKなようです。
0238デフォルトの名無しさんNGNG
それまでの実行情報だろ。変数とか角度とか。
0239234NGNG
>>236だった。スマソ。
0240デフォルトの名無しさんNGNG
>>236
宣言の[]はどこでも良い。

>>234
CMyThreadとやらにintを引数にとるコンストラクタあるか?
0241234NGNG
>>240
レスありがとうございます。CMyThreadは
class CMyThread extends Thread {
public void run();
public void CMyThread(int a);
public int interval;
private int counter = 0;
}
のような構造です。
0242240NGNG
>>241
そのソースはコンパイルをとおらないぞ。

CMyThread.classちゃんと出来てるか?
0243デフォルトの名無しさんNGNG
ソースの問題じゃねーな
0244234NGNG
すいません、省略しましたがrun()やCMyThread(int)には実体が
ありますので異常はないと思います。
0245デフォルトの名無しさんNGNG
メインメソッドはどこだ?
0246デフォルトの名無しさんNGNG
使用可能なfontリストを読み込むのに
awtのToolkit.getDefaultToolkit().getFontList()
を使ったところ、’推奨できません’の警告がでてしまいます。
fontリストを読み込むには、何かほかのメソッドを使うのでしょうか?

v1.4.0betaをlinux上で、使用してます。
どなたか、この初心者めにご教授を.....
0247デフォルトの名無しさんNGNG
>>244
それはわかったから、
CMyThread.classが、ちゃんとクラスパスかカレントから見える場所にあるか?
0248デフォルトの名無しさんNGNG
>>230
次の状態が決まっていることはstateパターンと関係ないのでは?
0249デフォルトの名無しさんNGNG
>>246
APIドキュメント嫁って。ちゃんと書いてあっから。
0250デフォルトの名無しさんNGNG
将棋盤みたいにfillRect()で塗った四角形の上にdrawLine()で升目を書いたのですが、
appletviewerを他のウィンドウで隠してしまうと、隠れた部分の線が消えてしまいます。

何がいけないのでしょうか?
0251横レスNGNG
>>248
大げさだろ、という話じゃないの?まあ、学習用としてあのソース
は別にあれでいいと思うけど。
0252デフォルトの名無しさんNGNG
>>250
隠れた部分が再表示される度にdrawLine()が自動的にコールされるようにしとか
なきゃ、そりゃ消えるにきまっとるがな。

Component#paint(Graphics g)とか、JComponent#paintComponent(Graphics g)
とか、分かるか?

0253デフォルトの名無しさんNGNG
>>252
>Component#paint(Graphics g)とか、JComponent#paintComponent(Graphics g)
わかりません。

それはさておき、直感的にfillRect()とdrawLine()が同じようなメソッドなのでdrawLine()で書いたラインが消えるならfillRect()で埋めた■も消えると思ったのですが・・・
0254234NGNG
入門書やFAQにはString型などのラップクラスの例が多くて、
String hoge[] = new String [4];
hoge[0] = "C#";
hoge[1] = "ha";
hoge[3] = "kuso.";
for(int i = 0; i < 4; i++)
System.out.print(hoge[i] + " ");
のように、「何も代入していない状態で参照するからエラーが
でるんだ」というようなエラー例ばかり載せてあるのですが、
この場合、コンストラクタを直接呼び出して(a[0].CMyThread(i)
のように)もNullPointerExceptionが発生します。

>>247
上記の場合、コンパイルエラーが出なかったので見えています。
0255初心NGNG
javacでclassに変換はできたんだけど、java実行ができない。
エラーが出てしまう。
Exception in thread "main" java.lang.NoClassDefFoundError: Hello←クラス名
これどういうエラーがわかる人いませんかー。
0256デフォルトの名無しさんNGNG
>>255
クラスパスが通ってないので通しなさい。

>>234
CMyThreadの、
public void CMyThread(int a);
この定義がおかしいんだがわかっている?
>>254を読むとコンストラクタをちゃんと理解していないように
見えるのだが。
0257234NGNG
>>256
理解が足りないのはそうかもしれません。
C++っぽく略して書きました。実体はこうです。
class CMyThread extends Thread {
  public void run() {
    try {
      while (counter++ < 10) {
        Thread.sleep(interval);
        System.out.print("x");
      }
    }
    catch (InterruptedException ex) {
      ex.printStackTrace();
    }
  }
  public void CMyThread(int a)
  {
    interval = a;
  }
  public int interval;
  private int counter = 0;
}
0258234NGNG
>>256
失礼しました。コンストラクタには
public voidが不要でした。
解決しました。ありがとうございます。
0259初心NGNG
>256
ありがとう!
0260デフォルトの名無しさんNGNG
コンパイルエラーをテキストファイルに保存するコマンド教えてください。
0261JAVA勉強中(3日目)NGNG
ほんとに初心者な質問で申し訳ないですが、
練習でアプレットをブラウザで実行するためにHTMLで
呼び出したんですが、not foundといって表示して
くんないです・・・。
アプレット自体は文字列を表示するだけの単純なモノで
入門書に書いてたソースをそのまんまつかったものなんすが・・・

HTMLファイルとクラスファイルを同じフォルダに置いて
<applet CODE="***.class"WIDTH="400" HEIGHT="500">
という上の記述(***はファイル名)をして呼び出そうとしたんですが、
表示されません。

ナニが原因かわからんので、よろしければアドバイスをお願いします〜。(T_T)
0262デフォルトの名無しさんNGNG
インナークラスッて必要あります?
0263デフォルトの名無しさんNGNG
CLASSPATHの使い方で、お聞きしたいのですが。

フォルダを作る度にそのフォルダへのCLASSPATHを追加していってます。
(winの環境設定で)
結果、フォルダの数だけCLASSPATHが増えて、今ではえらい事になってます。

一応問題なく動いてはいるのですが、こんな使い方で問題ないのでしょうか?
0264デフォルトの名無しさんNGNG
インナークラスは便利と思うときに使う。
インナースレッドは便利。

クラスパスってライブラリへのパスだけでいいのでは?
0265デフォルトの名無しさんNGNG
インナークラスは、多重継承を擬似的に実装する場合は必須。
0266デフォルトの名無しさんNGNG
>>261
わからん。ガンバレ!
0267デフォルトの名無しさんNGNG
無名インナクラスの書式の意味がわからん!
0268262NGNG
>>264,265 レスどうもです。
0269263NGNG
>>264
>クラスパスってライブラリへのパスだけでいいのでは?

有難う御座います。
そうなんですか?
同じフォルダ内の別のクラスファイルを参照する場合、上手く行かないと思うのですが。

・・・ちなみに今ひとつパスを消したら、
そのフォルダの中のプログラムが実行できなくなる・・・と思ったら何事もありませんでした。
あるいはコンパイルできなくなる・・・これも思い過ごしでした。

ん〜、何でこんなことするようになったんだろう。自分でも不明 (w
度重なるエラーに対応していくうちに、今のやり方になったのですが、
まだ理解が足らないようでした。
すいません。

0270デフォルトの名無しさんNGNG
>>269
ちょっとまて。同じフォルダ内の別のクラスファイルを参照するのに、
クラスパスが複数必要???違うぞ。

フォルダにクラスパスが通っていれば、そのフォルダをルートとする
classファイルは、全てシステムClassloaderの参照対象になるぞ。

root/hoge/hige/Hage.class(hoge.hige.Hageクラス)
root/hoge/hige/Huge.class(hoge.hige.Hugeクラス)
root/Hege.class(デフォルトパッケージHegeクラス)

があったら、rootにクラスパスが通っていればHageもHugeもHegeも
全部取り込み対象に出来る。


0271263NGNG
>>270

有難う御座います。
今実験したら、確かに仰るとおりでした!

と言う事は、恐らく以前の私のエラーは
パスを通してないフォルダをrootにして、
そこに新たなフォルダを作成してたのが原因だったような気がします。

しかし、この問題以前に不思議なことがあるのですが、
参照可能なフォルダが同時に複数存在するということは、
同じ名前のClassファイルがあった場合は、
何らかの規則に基いて優先順序を決めているわけなのでしょうか?


手元にある本にはそんなことはどこにも書いてない・・・
明日図書館にでも行ってきます。
0272デフォルトの名無しさんNGNG
>>271
同一のクラス名を同一のパッケージ内に置くのは禁止。
つうか、コンパイルした時にclassファイルが上書きされるだろ。
0273デフォルトの名無しさんNGNG
Jarファイルの中の画像ファイルは読み込むことはできますか?
取り出さないと駄目なんでしょうか?
よろしくお願いします.
0274デフォルトの名無しさんNGNG
>>273
もしかして、.jarにする前はちゃんと動いていたプログラムが
.jarにすると正しく動かなくなったってやつかい?
俺も経験あるよ。
ClassクラスのgetResource()見てみ
0275デフォルトの名無しさんNGNG
>>260
ガイシュツ。>>131-139を嫁。
「リダイレクト」の意味を知りたかったらGoogleで調べれ。
0276224NGNG
>>227
レスありがとうございます。
出来ないんですね。
0277デフォルトの名無しさんNGNG
>>260
>>146 と >>163 も見とけ。
0278230NGNG
>>248
GoF本のstateパターンの「動機」を嫁。
>他のオブジェクトから要求を受け取ると、そのときの状態により異なる反応を示す。
って書いてあるぞ。
意味するところ、わかるか?
0279デフォルトの名無しさんNGNG
>>278
その文章を見ると、それこそ「次の状態が決まっている事」と関係無い
とおもうが。「今の状態の種別」がメソッドコールの反応を変化させる
だけでしょ?
0280273NGNG
>>274

>>もしかして、.jarにする前はちゃんと動いていたプログラムが
>>.jarにすると正しく動かなくなったってやつかい?
よくわかりませんが、ちがうような...

例えば,Jarファイルに/Image/a.bmp
とかいうふうに格納したときに、
どうパスを指定して読み込めばいいか、ということです.
0281デフォルトの名無しさんNGNG
>>280
そのJarファイル内で、そのイメージファイルを使用しているクラスから、
new Image(getClass().getResource("JARファイル内部での相対パス"))
でImageオブジェクト取れるでしょ。
0282デフォルトの名無しさんNGNG
>>271

環境変数もしくはJVMの引数で指定したCLASSPATHの順番が優先順位です。
CLASSPATHで記述した順番に検索していき、最初に見つかったクラスを使用する。
0283232NGNG
>>235
どういうのかというと>>228で出てきたIContextインタフェースのようなやつです。
0284デフォルトの名無しさんNGNG
JDK 使ってコマンドラインからの開発環境で 1.1, 1.2, 1.3, 1.4 を
切り替えて使っている人いますか? トラブルないですか?
0285273NGNG
>>281
お返事ありがとうございます.

>>そのJarファイル内で、そのイメージファイルを使用しているクラスから、
そのJarファイル外からは無理ですか?
0286デフォルトの名無しさんNGNG
Object o = "string"; //StringからoObjectへの拡張変換
String s = (String) o; //ObjectからStringへの縮小変換

とテキストにあるのですか逆のような気がして仕方ありません。
Objectの拡張クラスがStringという事は、StringクラスにObjectクラスの
メンバーが全て含まれているという事ですよね?
そうだとすれば

Object o = "string"; //StringからoObjectへの拡張変換

は縮小変換じゃないのですか?教えてください。お願いします。
0287デフォルトの名無しさんNGNG
>>286
ワイドニングしたところで、インスタンスの型が変わるわけじゃない。
oに入っているのは"string"を持っているStringインスタンス。
0288デフォルトの名無しさんNGNG
>>286
拡張変換と縮小変換て言葉の使い方の話?
書いている人は、型の意味を般化する方向に変換しているから拡張変換と
表現したと思われ
0289デフォルトの名無しさんNGNG
>>279
やっぱり解からないか。
つか、GoF本読めってばよ。
赤→青→黄色(拡張して右折信号とかがあっても)くらいじゃstateパターン使う動機にならない事がわかるから。
0290287NGNG
すまそ。初心者に不正確な物言いは禁物だな。

oに入っているのは"string"を持っているStringインスタンス「への参照」。
oはObject型なので、そのいかなるサブクラス型の参照でも、しまう事が出来る。

0291279NGNG
>>289
単に「状態と言う値」のためだけなら、STATEパターンは必要ないわな。
ポリモルフィズムを利用した「状態に基づくオペレーションのディスパッチ」
が存在しないなら、そもそもパターンを使用したクラス設計する必要なんか
ない。
ただ、学習用としてはかまわんだろ?

実践では、実際に信号機型があったときに、
「色をくれオペレーション」→「色を返す」
だけのインターフェイスしか持たないような、アホなクラス作るわけないじゃん。
0292デフォルトの名無しさんNGNG
286です。色々レスありがとうございました。
お陰様でなんとなく解かりました。
あとは自分で色々テストしてみたいと思います。
0293デフォルトの名無しさんNGNG
>>286
とりあえず拡張変換とか縮小変換って言葉聞いたことないので、自分語だと思われ
0294デフォルトの名無しさんNGNG
>>286
>Object o = "string"; //StringからoObjectへの拡張変換
>String s = (String) o; //ObjectからStringへの縮小変換
>
>とテキストにあるのですか逆のような気がして仕方ありません。
  ~~~~~~~~~~~~~
テキストのタイトルとかページとか(あればURLとか)がわかると回答できるかもしれぬ。
まあ、誤植の可能性も0ではないし。
0295デフォルトの名無しさんNGNG
質問です。

クラスフィールド、クラスメソッドのメリットってなんですか?
メモリでも節約されるのでしょうか?
他にもメリットがあるのですか?
0296デフォルトの名無しさんNGNG
クラスメソッド・・・インスタンスが無くても呼べるメソッドです。mainとか。
クラスフィールド・・・インスタンスが無くても参照できるフィールドです。System.outとか。
0297デフォルトの名無しさんNGNG
なるほど勉強になります。

Javaでは<new>によりインスタンスを生成して無くても
常にクラスというのは存在しているという事でしょうか?
C言語とはそこら辺について、少し概念が違うのでしょうか?


よく理解していないので日本語が変だと思いますが教えてください。
お願いします。
0298デフォルトの名無しさんNGNG
>>286
"生物"と"哺乳類"と"人間"では
定義の範囲の広さから言って
"生物" > "哺乳類" > "人間"だから

人間を生物にキャストするのは、"拡張"といえるかも。
どうでもいい話しだけど。
0299デフォルトの名無しさんNGNG
まぁC言語におけるグローバル変数とかそういう感じだと考えて貰えば。

> C言語とはそこら辺について、少し概念が違うのでしょうか?

C言語にはそもそもクラスとかインスタンスなど無いと思いますが。C++のこと?
0300デフォルトの名無しさんNGNG
インスタンス=(オブジェクト≒変数)と捉えていますが間違いでしょうか?
クラスはC++で考えています。
0301デフォルトの名無しさんNGNG
>>296に補足。
クラススコープのメソッドもフィールドも、
インスタンスの数にかかわらず常に一つ。

>>300
Javaでは
× 変数=オブジェクト
○ 変数=オブジェクトへの参照
0302デフォルトの名無しさんNGNG
勉強になりました。3日前からJavaを始めて解からない事ばかりです。
また質問させてもらうかもしれませんが、その時はよろしくお願いします。
0303273NGNG
>>285

自分で解決できました.

jar:file:/C:/java/test/a.jar!/img/a.jpg

のように、Jarと内部のファイル名を指定すればいいです.
0304デフォルトの名無しさんNGNG
Javaに出会って1年経った。未だにわからん。
swap(a,b)はどう定義するのが一番何じゃーー!!!
↑a,bは何型でも良し。プリミティブでも参照でも。
こんな余りに単純な動作はどのクラスに持たせた物か、さっぱりさっぱり。
0305デフォルトの名無しさんNGNG
お前ら!どのコンパイラをご使用ですか?
貴様ら!エディタはどれをお使いですか?
0306デフォルトの名無しさんNGNG
今プログラムで第1コマンド引数の与えられた文字列が第2コマンド引数
の中に何個含まれているか?っていう問題を作っているんですが、どうも
うまくいかない部分があって困っているんですが、簡単すぎかもしれない
ですが見てもらえますか?
0307デフォルトの名無しさんNGNG
>>305
よくあるタイプのやつだがワロタ
0308デフォルトの名無しさんNGNG
CharAtで第2引数の文字を見て、それと第1引数(1文字)の文字を比較
して行おうとしているのですが、型の違いなどのエラーになってしまい方
法に困っているのですが。CharAtの文字はChar型ですよね?.equalsでは
比較できないみたいで第1引数はStringでないと読めないと思って。。
0309デフォルトの名無しさんNGNG
>>308
method( arg1, String.valueOf(A.charAt(a)));
0310308NGNG
すいません、せっかくのお答えなんですが、どうも理解できないです。
今の段階のソースうざいかもしれませんけど
class CountChar {
public static void main(String[] args) {
int ans;
String a,b,d;
char c;
a = args[0];
b = args[1];

for (int i = 0; i < b.length(); i++) {

if (a.equals(b.charAt(i))) {
ans = ans + 1;
}
}
System.out.println(ans);

}
}
こんな感じなんですが。
すいません。
0311デフォルトの名無しさんNGNG
>>310
ifの中を
a.equals(String.valueOf(b.charAt(i)))
に変えてみ。
詳細はAPIリファレンス参照。
0312308NGNG
できました、ありがとうございます。APIリファレンスってなんでしょうか?
String.valueOfっていうのでストリング型に変換してるのかなとは思って
いるんですけど。
0313301・309・311NGNG
http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
1.3は自分で探せ。ノートPCの電池が切れるから今日はここまで。
0314308NGNG
どうもです、ありがとうございました。
0315デフォルトの名無しさんNGNG
Javaアプリでブラウザってつくれます?簡単に。
0316デフォルトの名無しさんNGNG
指定URL表示だけなら
かんたんだったよーな
0317デフォルトの名無しさんNGNG
>>315
javax.swing.JTextPane に丸投げするだけだったら
簡単にできると思うけど。
0318デフォルトの名無しさんNGNG
public class a{
public static void main(String args[])
{
System.out.println("うへへぇ");
}
}
0319デフォルトの名無しさんNGNG
>>234
使い方によってはコンストラクタにpublicはいるので気をつけたほうがいいよ。
0320デフォルトの名無しさんNGNG
flush()っての意味が不明だったのでプラットフォームで調べたのですが、
>flush() ストリームをフラッシュします。
って書いてあるだけでした・・・・・
それでフラッシュって何ですか?
0321デフォルトの名無しさんNGNG
>>320
ストリームは効率をよくするためにバッファリングしている。
大抵、ある程度のデータが突っ込まれたら初めて書き込むようになっている。
(これをしないと、4 バイト x 1000 回 と 1000 バイト x 4 回 の書き込みは同じ 4000 バイトだが、
前者は 1000 回もディスクアクセスが発生することになる)

んで、フラッシュはバッファにあるデータを強制的に書き出す。
0322320NGNG
>>321
わかりやすい説明ありがとうございました。
0323デフォルトの名無しさんNGNG
jbuilder6って行番号表示はできないのかな?
設定を探してみたんだけどないです。
0324デフォルトの名無しさんNGNG
jspでgetenv,putenvがやりたいんですけど、
なんかいい方法知ってる人いますか?
0325デフォルトの名無しさんNGNG
Java だと System.getenv(name) があるけど、これまだ使えるの
かな。putenv に相当する機能は無い。

環境変数を指定した上で何か別の実行ファイルを起動した場合には
Runtime#exec(String command, String[] envp) が使える。
0326デフォルトの名無しさんNGNG
>>316
LinuxとWinのデュアルブートにしてるので
両方で使えるかちゅ互換2chビューワを作りたいんです。

つったら難しくなるのかな。
0327厨房NGNG
Java で Win アプリ開発するのでタダで手に入る開発環境を教えてください!
0328デフォルトの名無しさんNGNG
StreamTokenizerにおいて、文字には
white space, alphabetic, numeric, string quote
, and comment character
の属性があるようですが、それぞれ意味を教えてください
0329デフォルトの名無しさんNGNG
>>327
無理です
2002年2月から.NETに追従してJDKのライセンス料金が
定められました
ttp:/java.sun.com/
一足遅かったね
0330デフォルトの名無しさんNGNG
>327
とりあえずJ2SE SDKで始めるのがよいかと
http://java.sun.com/j2se/1.4/ja/download.html

統合開発環境が欲しいなら
上のページのForteとか、

Eclipse(オープンソース)
http://www.eclipse.org/

JBulder(Personal版がフリー)
http://www.borland.co.jp/jbuilder/

とかがある。

3つともこの板にスレがあるから
覗いてみるとよいかも。
0331デフォルトの名無しさんNGNG
class ONE{
  int i = 1;
  int func(){return i;}
}

class TWO extends ONE{
  int i = 2;
  int func(){return -i;}
}

とあった時に

TWO two = new TWO();

とすると
two.i == 2
two.func() == 2

ですが

OEN one = (ONE) two;

とキャストした時

one.i == 1 はまだ解かるのですが
one.func() が2となるのが納得いきません。

なにかこのような使用である論理的な理由がありますか?
アドバイスお願いします。
0332デフォルトの名無しさんNGNG
>>331
one.func() == 2 はまだ解かるのですが
one.i が1となるのが納得いきません。
どなたかマジレスお願いします。
0333デフォルトの名無しさんNGNG
two.func() == 2

これも違うだろ
0334デフォルトの名無しさんNGNG
動的な型によってきまるのは
インスタンスメソッドだけ
0335デフォルトの名無しさんNGNG
>>332
サブクラスにスーパークラスと同じ名前のフィールドがあると、
それはオーバーライドされるのではなく、隠される。
で、サブクラスの中からは、superでそのフィールドにアクセス
できるし、変数をスーパークラスの型にすると、サブクラスの
フィールドが見えなくなるから、スーパークラスのものが見える
ようになる、ということ。
結局、こんなコードを書くとバグの元だね。

0336デフォルトの名無しさんNGNG
おれ、JAVAやるよ。がんばるよ。JAVA今日から勉強してみるよ。
ちょっとでもがんばれば文系の俺でも企業もchっとは目にか
けてくれる存在になると思うんだ。やってみるよ!
■ このスレッドは過去ログ倉庫に格納されています