【初心者】Java質問・相談スレ47【大歓迎】

このエントリーをはてなブックマークに追加
ひょっとしたらまた荒れる原因になるかもしれませんが・・・

Stringの変数に何かしら代入し、それを引数としてメソッドに送り、受け取った変数に代入などの操作を行った場合、
その時点で参照されるアドレスが変わってしまうという認識で合ってますか?
ということは、Stringに関してはアドレスがどうとか気にする必要が無い気がするんですが・・・

また、StringBufferで同様にメソッドに送りappendした場合、ちゃんと元の変数にも影響がありました。
となると、2、3行目に書いた事が間違っている事になってしまいます。
もうわけがわかりません・・・
>>913 そういや、Swingの範疇になってすまんが、HTMLEditorKitの説明
見ると、「今のところ <applet> タグはサポートされていませんが、
<object> タグの一部分はサポートされています。」ってあるんだよね。
<applet>タグ書いたhtmlファイルをhtmlコンバータで<object>タグ
使ったhtmlファイルに変換させて、JEditorPaneで読むとか試してみてもいいかも。

俺自身はSWT派だからこういう目的にはきっとBrowserウィジット使っちゃうけどね.
>また、StringBufferで同様にメソッドに送りappendした場合、ちゃんと元の変数にも影響がありました。
じゃあこれはどうなる?

class ThreadA extends Thread{
private StringBuffer buff=null;
public ThreadA(StringBuffer buff){this.buff=buff;}
public void run(){
try{for(int i=0;i<100;i++){
buff.append("A"+i);
Thread.sleep(100);}}
catch(InterruptedException e){}}}
class ThreadB extends Thread{
private StringBuffer buff=null;
public ThreadB(StringBuffer buff){this.buff=buff;}
public void run(){
try{for(int i=0;i<100;i++){
buff.append("B"+i);
Thread.sleep(100);}}
catch(InterruptedException e){}}}

public class Main{
public static void main(String[] args)throws Exception{
StringBuffer buff=new StringBuffer();
Thread a=new ThreadA(buff);
Thread b=new ThreadB(buff);
a.start();
b.start();
a.join();
b.join();
System.out.println(buff.toString());
}
}
>>918
引数に対してメソッドを呼んだ場合は元の変数に影響が出る。
でも引数に対して代入を行っても元の変数には影響が出ない。

void hoge(StringBuffer sb) {
  sb.append("abc");
}

void fuga(StringBuffer sb) {
  sb = new StringBuffer("abc");
}

StringBuffer sb = ...;
hoge(sb); // sb の中身は変更される。
fuga(sb); // sb の中身は変更されない。
>>921
わかりやすいせつめいだ

俺も一から勉強しなおすよ
初心者にわかりやすく教えることが出来ない人は
結局自分が理解できていないってことだからな
>>913,914
たぶんパッケージがシールされてるからそのままでは動かないはず。

シールされたパッケージ(sealed)とは同名パッケージにしても
別クラスローダによって読み込まれた場合はアクセスを不可にする仕組み。
>>906
それってhtmlの解釈まで要求してる?
単にAppletのインスタンス生成して、start()とinit()呼んで
Frameなりなんなりに追加とかそういうレベルじゃだめなの?
>>923
いやだから全部もってこいと、使ってるもの全部
どっかで途切れればいいが
途切れなくJDKに入ってるクラス全部ということになったら
さすがに・・・・
926918:04/06/20 01:49
>>920
恐らくbuffにA1からA100とB1からB100までが大体交互に入ると思います。

>>921
どうもありがとうございました。
物凄くわかりやすかったです。
927918:04/06/20 01:50
あ、1から100じゃなくて0から99ですね
>>925
どっちかというとどっかで途切れてる方が工夫がいるって話なんだけど。
そうか、すまん
public class Test
{
public static void main(String[] argv)
{
String aaa = "aaa";
StringBuffer bbb = new StringBuffer("bbb");

aaa.concat("xyz");
bbb.append("xyz");
System.out.println(aaa);
System.out.println(bbb);
}
}
上記のプログラムを実行した場合、
aaaは"aaa"のままで、bbbは"bbbxyz"になりました。
また、
aaa = aaa.concat("xyz");
とすれば"aaaxyz"となりました。
結果はもちろん分かっていましたが、なぜこうなるのかが分かりません。
どちらも文字列の連結をするものであるのに、なぜこのような違いが出るのでしょうか?
仕様だと言ってしまえばそれまでですが、
APIリファレンスを見たら両方とも戻り値があるので、StringBufferも
bbb = bbb.append("xyz");
のようにしなければいけないと思うのですが・・・
String は 不変
StirngBuffer は 可変

aaa = aaa.concat("xyz");
でもしとけ
>結果はもちろん分かっていましたが、なぜこうなるのかが分かりません。

( ゜,_ゝ゜)
String#concatは内部に持ってる文字配列同士を結合した新しい文字列を返す。

StringBuffer#appendは内部に持っている文字配列自体が新しくなる。
返値はthis。bbb = bbb.append("xyz");でも別に間違いではない。
日本語できたよ。1.4.1辺りから問題なくなったはず。

C:\s>type 日本語.java
public class 日本語 {
public static void main(String[] args) { System.out.println("表示"); }
}

C:\s>javac 日本語.java

C:\s>java 日本語
表示

-----------------------
*もし* UTF-8でソースを書いたのなら、 javac -encoding=utf-8 日本語.java
>>934
なんか面白そうやね。
class化された場合はどうなるの?
日本語なんてクラスに文字コード非依存でアクセスできる?
すげー!
日本語でクラス名か・・・

わかりやすいよな。日本語にした方が。
でも、何かいけない事してる気がする・・・
長めのスパンのループスレですか?
>>936
>>でも、何かいけない事してる気がする・・・

なんでよw
10年後にはPC全部UTF-8だと思われ
939デフォルトの名無しさん:04/06/20 14:04

JavaWorld6月号で日本語でメソッド名書いてあるのを推奨していたような気がする
よーわからんので途中で読むの止めたので 誤解があったらすまん
940881ゲトー:04/06/20 14:07
JAVAとJavaScriptは日本語と韓国語ぐらい血が今〜ス。
で?
941デフォルトの名無しさん:04/06/20 14:17
「あまりパソコンばっかいじってると身体に障るよ」なんて僕が注意すると、

「ごめんね。でもね、これ見てよ。この4のひと、3げっとぉ!なんて言っちゃってさぁ、ふふ」

僕は黙っていた。君がすごく楽しそうで、僕は何も言えなかった。

「ほらみて、この4のひと、変な絵文字使ってくやしぃ〜!だって。かわいいねえ。 ふふ。」

僕はまだ黙っていた。笑う君を見て、悲しくなった。

「憶えててくれるかなあ」 君がふと言った。

「…この3のひと、私がいなくなっても、あの時変な奴に2をとられたんだよなーなんて、

憶えててくれないかなあ……無理かな……憶えてて、ほしいなぁ……」

それから数ヶ月後、君は家族と僕に見守れながら息を引き取った。

君はもうこの世に居ない、なのに僕は今F5を連続でクリックしている。

君の事を、3のひとが忘れないように、いつまでも、いつまでも忘れないように。


天国にいる君と一緒に、今ここに刻み込む 

941 ゲ ッ ト
942デフォルトの名無しさん:04/06/20 14:30
JFrameを継承してるクラスの中で,Graphicsのdrawingメソッドで絵を書いている
のですが,ここで新たにJframeを作るとその下に隠れた絵が全て消えてしまいます


Jframeの下に隠れた絵が消えないようにするにはどうすればよいのでしょうか?
そもそもJFrameのなかでGraphicsのdrawingメソッドを使って絵を書くこと自体
あまり良いやり方ではないのでしょうか?
Graphicsのdrawingメソッドってなんだ?
944942:04/06/20 16:35
>>943
間違えました。
Grapjicsクラスのメソッドです。
drawlineとかdrawpolygonとかです
JComponent を継承したクラスの
paintComponent でやりなさい
946デフォルトの名無しさん:04/06/20 17:44
>>924
Appletのインスタンス生成して、start()とinit()呼んでってのでも良いのですが、
この場合、web上のアプレットをロードしてくる手段はどうすれば良いのですか?
そこがわからなくてAppletviewerのほうを利用していたもので。
>>942
重なると消えるってことは現在はpaintのイベントで描画してないってこと?
描画タイミングは自分で好きなようにバックバッファに書いたとしても
それを描画させるにはpaintのタイミングが必要だよ
JFrameならjava.awt.ContainerのPaintとupdateみとけ


ゲームのように有無言わさず定期的にウインドウ内をすべて描画するのなら
BufferStrategy使ったほうがいいかな
948デフォルトの名無しさん:04/06/20 20:01
今すごく困ってるんで教えてください。

Java2 sdkをインストールするとブラウザでソースが見れないってことは
ないですよね?なんかどのページに行っても見れないし、オフライン
で過去の履歴も見れないのです。
どなたかお願いします。
>>948
ソースってのがなにかわからんが
そんなことはないから安心しる
950デフォルトの名無しさん:04/06/20 20:16
>>949
サンキュです、普通そんなことないですよね。
ソースはHTMLですよ、これまた普通の。
IEがおかしいのかな?
>ブラウザでソースが見れない
当然だけど。
952デフォルトの名無しさん:04/06/20 20:29
>>951
変な言い方でした。
それは、メモ帳とかテキストエディタのことですか?
そのエディタのウインドウが開いてくれないのです。
単独ではきちんと起動するのに・・・
>>952
ますますわからないんだけど。
>それは、メモ帳とかテキストエディタのことですか?

違うだろ
955デフォルトの名無しさん:04/06/20 20:47
利用できるFontの列挙をしたいのですが、どうやるの?
>>952
IEのキャッシュを一度クリアしてみ。
ツール->インターネットオプション->全般->インターネット一時ファイル・ファイルの削除
957955:04/06/20 20:57
すいません、自己解決出来そうです。GraphicsEnvironment使うんですね。
>>946
java.net.URLClassLoaderを調べれ。
959デフォルトの名無しさん:04/06/20 21:18
>>956
ありがとう
解決いたしました。クッキーファイル?が山ほどでてきました。
Napのクライアント (チャット指向) のソフトを作りたいと思ってるんですが
仕様書見てもどうやって作ればいいかわかりません
サンプルとかないでしょうか?
XNapとかだとわかりにくいのでチャット機能だけとかのサンプルがほしいのですが
知ってるかた居ましたら教えてください
>>960
仕様書見ても分からないってことはjavaと関係ないんじゃない?
言語レベルでの話ではないと思われ

つまりスレ違い
>>960
いままでの開発経験でそういうことやったことないのなら
ちょっとレベル高いんでないの?
もう少し頑張ってみよう
1っか月ぐらい悩もう
仕様書見なくてもどうやって作ればいいか
大体想像つくようでないと
こりゃ当たり前のこってすよ
>>963
好き勝手作れるならそうなんだろうけどな。
規格モノはそうはいかん。
1000!!
hogeというpackageがありその中にfoo.javaがあります。
hoge\foo.java
で、このfoo.javaからprop\a.propertiesを読み込みたいのですが
public static final String FILE_NAME = "prop/a.properties";
とかやるとファイルが見つからないと怒られますが
どうしたらいいんでしょうか?
ちなみにhogeディレクトリとpropディレクトリは同階層にあります。
だってお前何一つわかってないんだもん