【初心者】Java質問・相談スレッド117【歓迎】 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/07/09 12:32:06
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド116【歓迎】
スレリンク(tech板)
次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)


2:デフォルトの名無しさん
08/07/09 12:32:42
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
スレリンク(tech板)l50
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part18
スレリンク(tech板)l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 8
スレリンク(tech板)l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 65 ★★
スレリンク(tech板)l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
URLリンク(sdc.sun.co.jp)
■ J2SE 5.0 (1.5.0)
URLリンク(java.sun.com)
■ Java SE 6
URLリンク(java.sun.com)

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
URLリンク(www.java.com)

3:デフォルトの名無しさん
08/07/09 13:28:24
初心者質問ですいませんが本に書いていないので教えてください。

C:\Users\Documents\Hoge\src\pkgcui\Cui.java
こういう階層にパッケージpkgcuiに入ったCui.javaがあるとします。
この時カレントディレクトリがC:\Users\Documents\Hoge\srcだとすると
javac pkgcui\Cui.java
java pkgcui.Cuiで実行できますが、
カレントディレクトリが
C:\Users\Documentsだとすると
javac Hoge\src\pkgcui\Cui.javaで、
javaコマンドの方の指定の仕方はどうしたら良いのでしょうか?


4:デフォルトの名無しさん
08/07/09 13:34:36
java -classpath Hoge\src pkgcui.Cui

5:デフォルトの名無しさん
08/07/09 13:45:29
前スレ999さんへ
これはアドベンチャー用のプログラムなんでswicthは必須です。
前すれ998さんへ
while(true){
int pa = s.nextInt();
のsはどこからもってきましたから?
できればこれらのプログラムをサープレットで書いて欲しいのですが。

6:デフォルトの名無しさん
08/07/09 13:50:16
>>5
> のsはどこからもってきましたから?
ブラウザでも、テキストエディタでも、検索してみたら?

7:デフォルトの名無しさん
08/07/09 13:56:47
>>4
てっきりclasspathってmain以外のクラスを探すためのもので
mainはjava .\Hoge\src\pkgcui.Cuiとか出来るのかと思ってました…。
ありがとうございます、本当に感謝です!

8:デフォルトの名無しさん
08/07/09 14:38:50
教えてくれ五飛!
俺はJAVAをあと何回実行かければスイッチを使った引き算ができるようになるんだ!
教えてくれ五飛!
俺はあと何日で
死ぬんだろうか。

9:デフォルトの名無しさん
08/07/09 14:58:16
トムキャットプロジェクトだとcontext.xmlがプロジェクトごとに生成されないのですが、自分で追加すれば動作してくれるのでしょうか?
それともserver.xmlに記述しなければいけないのでしょうか?

10:デフォルトの名無しさん
08/07/09 15:25:06
やはり2週間弱でJAVAでアドベンチャーが作れるのにどこも雇ってくれないのは、勤務地のせいか。
おい福田、さっさと横須賀の方にプログラムの会社を作りやがれ!
サミットばかりやってないで自分の国民を防衛しろ!
いざとなった時国民の信頼が無いと日本潰れてしまうよ。

11:デフォルトの名無しさん
08/07/09 15:48:58
既に手遅れですから次々世代くらいに期待しましょう
敗者復活は王道

12:デフォルトの名無しさん
08/07/09 18:59:39
Threadクラスを継承したクラスA内のrunメソッドでsleep(1000)で1秒ほどスレッドをとめている間に、
そのAの他メソッドを使うとInterruptedExceptionとかの例外が出ますか?

13:デフォルトの名無しさん
08/07/09 19:07:49
>>12
InterruptedExceptionのマニュアルを読みなさい。


14:デフォルトの名無しさん
08/07/09 19:59:22
>>12
interruptメソッドを使うとInterruptedExceptionが出ます

15:デフォルトの名無しさん
08/07/09 23:43:42
ArrayListの中身に意図しない書き換えが起こり、困っております。


APIを見たところ、同期化されないから注意しろ、的な文章を見つけたのですが
複数スレッドを使うようなプログラムを意図的に書いてはいません。

ためしにAPIに書いてあった
List list = Collections.synchronizedList(new ArrayList(...));
の形で定義してみても、結果は変わりませんでした。


言葉だけだと説明が難しいので、サンプルのソースを次に記入します。

データベースから取得した口座の残高に100円追加するソースです。

16:15
08/07/09 23:44:23
private void zandaka_keisan(){
ArrayList<Koza> KozaList_before = new ArrayList<Koza>(4000);
ArrayList<Koza> KozaList_after = new ArrayList<Koza>(4000);

//データベースから配列の形状で口座たちを取得します
KozaList_before =dba.selectKoza("条件");
Koza kz = new Koza();
int zandaka = 0;

//取得件数分繰り返し
for(int j=0 ; j<KozaList_before.size() ; j++){
kz = KozaList_before.get(j);
zandaka = kz.getZandaka() + 100;
koza.setZandaka();
//↑この行が終了すると、KozaList_beforeの中身のkozaに100円足されてしまいます。
//本当は、KozaList_afterにだけ計算結果を格納したいです。
KozaList_after.add(j, kz);
}

}


17:15
08/07/09 23:45:03
インスタンス化する口座クラス。単にゲッターとセッターがあるだけです。
public class Koza {

private int zandaka;

koza(int zandaka){
this.zandaka = zandaka;
}

public void setZandaka(int zandaka){
this.zandaka = zandaka;
}

public int getZandaka(){
return zandaka();
}

}

18:15
08/07/09 23:47:58
インデントが解除され見がたくなり申し訳ないです。

何か、根本的な勘違いをしているのかも知れません。
ヒント等分かる方、よろしくお願いいたします。

19:デフォルトの名無しさん
08/07/09 23:53:48
>>18
>koza.setZandaka();
の行が通らなくね?

20:デフォルトの名無しさん
08/07/09 23:54:06
>>16
まて。それは本当にコンパイルが通ってるコードのコピペなのか?
いろいろとおかしいだろう。
> Koza kz = new Koza();
これに何か意味があるのか? ループの中で潰されてるが。
> koza.setZandaka();
kozaなんて変数は定義されてないぞ。
あと、setterなのに何で引数がないんだ。

21:15
08/07/09 23:58:36
大変失礼致しました。

ソースは目視のみの確認でしたので、出直してきます。

22:15
08/07/10 00:16:15
コンパイルしました。(dba.selectKoza("条件");は質問用なのでエラーになりますが・・・)

import java.util.*;
public class Sitsumon {


private void zandaka_keisan(){
ArrayList<Koza> KozaList_before = new ArrayList<Koza>(4000);
ArrayList<Koza> KozaList_after = new ArrayList<Koza>(4000);

DbAccess dba = new DbAccess();

//データベースから配列の形状で口座たちを取得します
KozaList_before =dba.selectKoza("条件");
Koza kz = new Koza();
int zandaka = 0;

//取得件数分繰り返し
for(int j=0 ; j<KozaList_before.size() ; j++){
kz = KozaList_before.get(j);
zandaka = kz.getZandaka() + 100;
kz.setZandaka(zandaka);
//↑この行が終了すると、KozaList_beforeの中身のkozaに100円足されてしまいます。
//本当は、KozaList_afterにだけ計算結果を格納したいです。
KozaList_after.add(j, kz);
}

}

}


23:15
08/07/10 00:16:55
public class Koza {

private int zandaka;

Koza(int zandaka){
this.zandaka = zandaka;
}

Koza(){
this.zandaka = 0;
}
public void setZandaka(int zandaka){
this.zandaka = zandaka;
}

public int getZandaka(){
return zandaka;
}
}

24:デフォルトの名無しさん
08/07/10 00:17:18
KozaList_beforeに入っているKozaインスタンスが、どこでもコピーされ
てなさそう。KozaList_before.get()で取り出したインスタンスと
KozaList_after.add()で追加したインスタンスは同じものだよ。



25:デフォルトの名無しさん
08/07/10 00:18:53
>>20

解読ありがとうございます。

> Koza kz = new Koza();
これに何か意味があるのか? ループの中で潰されてるが。

ループの前に、kozaのインスタンスを用意したつもりです。

26:デフォルトの名無しさん
08/07/10 00:22:21
>25
Kozaインスタンスは倍の数に増えて欲しいのに、newが1回だけし
かないことを疑おう。



27:デフォルトの名無しさん
08/07/10 00:27:59
>>24
>>25

アドバイスありがとうございます!
計算前のKozaインスタンスと、計算後のKozaインスタンスを
それぞれ別に用意してあげる必要があるという事ですね。

Java・・・難しいです・・・・。

28:デフォルトの名無しさん
08/07/10 00:29:10
27訂正

>>24
>>26

です。


29:デフォルトの名無しさん
08/07/10 00:53:22
前スレの982です。

>>983
懇意にさせていただいているお客さんから、とある小システムを
ベンダが手を引くから引き継いでくれ。良い悪いを評価して、
悪い部分は直す良い提案をして貰えれば、悪いようにはしない。
(儲けが出るように発注する)

と言われています。

規模が小さいのでウチとしては絶対取りたいとかそういう
訳ではないですけど(営業サイドの思惑から)、今まで/今後の
つきあいもありますので、無碍には出来ないし、というところです。


>>982
FingBugといのは使ったことが無いので、ちょっと調べてみます。
情報ありがとうございます。


他にこういうのはどうよ、というのが有れば教えていただけると
助かります。

30:デフォルトの名無しさん
08/07/10 00:57:44
「JCEのSecretKeyって、外部的に同期化する必要はありますか?」

Web系で、全リクエストで共通の鍵を使用します。
オンライン中にパスワードは通常変更されません。
暗号化の目的は、ブラウザに保存されるCookieをユーザから不可視にするためです。
JDKは1.4.2です。

現在↓こんな感じでSecretKeyを作成しています。

#記憶を元に書いているので間違ってたらスミマセン
##全角スペースでインデントしているのは御愛嬌

参考にしているのはこの辺りです。
URLリンク(www.trustss.co.jp)

private static SecretKey generateSecretKey(String password) {
 MessageDigest messageDigest = MessageDigest.getInstance("MD5");
 messageDigest.update(password.getBytes());
 byte[] passwordDigest = messageDigest.digest();

 SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
 return secretKeyFactory.generateSecret(new DESKeySpec(passwordDigest));
}

続きます

31:デフォルトの名無しさん
08/07/10 00:58:15
続きです

暗号化/復号化はこんな感じです。
this.passwordはコンストラクタで初期化されています。

public String encrypt(String plain) {
 byte[] bytes = plain.getBytes();

 SecretKey secretKey = generateSecretKey(this.password); // XXX 毎回作るの?

 Cipher cipher = Cipher.getInstance("DES");
 cipher.init(Cipher.ENCRYPT_MODE, secretKey);
 return encode(cipher.doFinal(bytes)); // Cookieに保存するためBase64でエンコードして戻す
}

public String decrypt(String crypted) {
 byte[] bytes = decode(crypted); // さっきのBase64をデコードする

 SecretKey secretKey = generateSecretKey(this.password); // XXX synchronizedにすれば毎回作る必要はないけどね…

 Cipher cipher = Cipher.getInstance("DES");
 chiper.init(Cipher.DECRYPT_MODE, secretKey);
 return new String(chiper.doFinal(bytes));
}

Cipherはともかく、変更されない鍵までリクエストのたびに作るor同期化するっていうのは
イマイチ感が漂うのですが…
そもそもインスタンスが不変であれば同期は要らない気もしています。

どちらにせよ言及している文書が探しきれていないので、「ここ読め」とかでも結構です。
よろしくお願いします。


32:デフォルトの名無しさん
08/07/10 01:07:37
>>30-31
何を聞きたいのかわからない。「外部的に同期化」て意味不明。



33:デフォルトの名無しさん
08/07/10 01:20:22
>>32
うう〜ん、あまり一般的な言い方ではないんですかね。

Sunのドキュメントとか見てると結構出てくる表現なんですが…
URLリンク(www.google.co.jp)

要はライブラリなんかが複数スレッドから同時に呼ばれるときに、
ライブラリ側でマルチスレッド環境を考慮していない場合なんかだと
内部的に保持しているメンバ変数の値が不整合になっちゃう場合があって、
だから呼び出し元がsynchronizedで呼んでやることで単一スレッドのみからの
アクセスを保障するようにプログラムを書くことです。 >「外部的に同期化」

さっきのサンプルでいうと、encryptやdecrptのメソッドをsynchronized宣言してやることで、
「外部的に同期化する」対応を行うことになります。

ただ、ライブラリ側で対応していたり、>>31で言及したようにそもそもインスタンスが不変であれば、
内部変数の値が不整合となることもないのでsynchronizedがいらないのではないかと思い、
それについてのドキュメントはありませんか?という意味で質問しました。

34:デフォルトの名無しさん
08/07/10 01:22:12
>>25
そのインスタンスが使われることなく、
> kz = KozaList_before.get(j);
で捨てられていることは理解しているか?


35:30
08/07/10 01:25:40
>>32
ごめんなさい。
こっちのリンクのほうがよかったですね。
URLリンク(www.google.co.jp)

わかりにくくて申し訳ありません。

36:デフォルトの名無しさん
08/07/10 01:43:15
>>33
10年以上Javaを触ってるけど、「外部的に同期化」って初めて聞いたよ。

で、1つのSecretKeyを複数のスレッドのCipherから利用したことあるけ
ど、問題が出たことないです。ドキュメントがあったわけじゃないから、
問題が起きないという保証はないですね。本質的に内部状態を持つよう
なインスタンスじゃないから、大丈夫だと思うけど。

もしそういうドキュメントを見付けられなくて、パフォーマンスを上げ
たいなら、SecretKeyとCipherのペアを貸し出し&返却するようなキャッ
シュ機構を作ればかなり効果があるです。


37:デフォルトの名無しさん
08/07/10 02:30:52
お聞きしたいことがあります。

アプリケーション組み込み向け(もしくは組み込み可能な)のJVMというのはあるのでしょうか?

以前に見た Unity という3D Game Engineがmonoを使って.NETをスクリプトエンジンとして使っていました。
UNITY: Overview
URLリンク(unity3d.com)

これのJavaVM版のようなことがしたいと考えております。
主にWindowsで動作ができればと考えております。

38:デフォルトの名無しさん
08/07/10 02:34:37
>>36
ありがとうございます。
# 不特定多数の場所では用語の使い方には注意しなければいけませんね。今後は気をつけます。

> ドキュメントがあったわけじゃないから、問題が起きないという保証はないですね。
> 本質的に内部状態を持つようなインスタンスじゃないから、大丈夫だと思うけど。

正にその辺りが問題で、イケそうでイケないもどかしさが元となって質問に至った次第です。

「JCEは結局インターフェースの規定であって、SecretKeyについてのマルチスレッド環境下での
動作はドキュメント化されていない。故にその動作は実装依存であり、たとえSUNから提供されているJARが
スレッドセーフであった(ことをリバースコンパイル等の手段を用いて実証した)としても、
仕様化されていない以上、将来のリリースでは変更される可能性がある。」

ということがハッキリしているのであれば、防御的にsynchronizedに倒すという結論に至れるのですが、
現在は、そのための判断の材料を探している段階です。
(SUNからJREと一緒に配布されているJARは、あくまでJCEの規格の一実装という位置づけですよね?)

当然、本当にそこまで仕様に対する厳密な判断が必要なのかという議論も別にあると思います。
また、性能に対してどれだけのペナルティがあるのかによっても、結論は変わると思っています。
# まあ面倒だから同期化にして終了としたい自分もいる訳ですがwww

> SecretKeyとCipherのペアを貸し出し&返却するようなキャッシュ機構

・ペアを幾つか作っておき、貸し出し・返却動作のみを同期処理とする
・ペアが全て貸し出しになった場合のみ、新たなペアを作成して貸し出す
ようなイメージで合ってますか?

確かに、これならば同期、鍵の生成部分は最小限で済むかもしれませんね。
サーブレットのスレッド数とあわせておけば、新たなペアの作成も不要となるような気もします。
ありがたく参考にさせて頂きます。

39:デフォルトの名無しさん
08/07/10 08:19:54
質問です。
例えば、クラスXでクラスYのインスタンスを生成したとして、
クラスY内のフィールドの変化をクラスXで監視する方法って無いでしょうか?
(フィールドの値を取得するのではなく、actionListenerのように変化に反応するような仕組みということです)
あるいはクラスXかYでstaticフィールドを作り、それの変化を監視するという方法は無いでしょうか?



40:デフォルトの名無しさん
08/07/10 10:34:31
JAVAの乱数についての質問です。
int ran = rnd.nextInt() % 100;
で0〜100までの値をranに数字をランダムで入れるまではわかるのですが、
50〜100までの値をranに数字をランダム入れるが分かりません。
ご提示お願いします。

41:デフォルトの名無しさん
08/07/10 10:41:37
0〜50までの乱数を出してそれに50足した値をranに入れればいいよね。

42:デフォルトの名無しさん
08/07/10 10:42:38
>>39
PropertyChangeListener とか、Observer と Observrable とか

>>40
ran = rnd.nextInt(50) + 50;
で、50 <= ran && ran < 100 になる。

43:デフォルトの名無しさん
08/07/10 10:50:07
最低値足せば良いだろ。算数の問題だ。

44:デフォルトの名無しさん
08/07/10 10:52:38
>>39
Yが監視できるように作られてないとだめ。

クラスYを自前で実装するなら、
変更時にイベント通知するように実装する。
Observerパターン。
Observableとか、PropertyChangeSupportとか使えばすぐ実装できる。


Yが誰かが作ったいじれないクラスで、通知機能がない場合、
フィールド操作がセッタでしっかり実装されてるなら、
セッタをオーバーライドしてなんとかできる。
ソース見れないとか、セッターなしでいろんなタイミングで操作されてるとかなら、
どうにもならない。非同期でいいなら、一定時刻毎に値をチェックする。(ポーリング)

45:デフォルトの名無しさん
08/07/10 11:06:51
>>43
足したら除々に足されていくのがプログラム。


46:デフォルトの名無しさん
08/07/10 11:13:49
>>45
昨日いたな。そんなバカ。

47:デフォルトの名無しさん
08/07/10 11:43:55
質問です
Windowsでjava6でJDBC使うアプリ作ってます。

通常、整数データは何も考えずintにしてましたが、
DBのデータ容量を考えると、不必要な桁数をもつカラムは、SMALLINTやTYNYINTで
定義した方がよさげかな、と思いました。
で、Java側のソースは、数値の取りうる範囲は自前でチェックしているので
別にintのまま、setInt()でも動くのですが、どうせJDBC側でキャストなどして
時間が掛かるだろうと思い、shortやbyteを使う事を検討しています。
shortにしてsetShortを使えばキャストは必要なくなりますので速いと思うのですが、
しかし、通常のjava側の計算処理において、shortでの計算などをがりがりやる事になりますが
暗黙の型変換などがあるので、ここでかえって時間が掛かるのではないかと危惧しています。
性能論議は実測が基本というのは分かっていますが、変更箇所も膨大ですので、変更前に
short化は意味があるかどうか、多少でもアドバイス頂ければと思います。
よろしくお願いします。

48:デフォルトの名無しさん
08/07/10 11:57:30
普段はintで計算して、setするときだけshortやbyteにキャスト、でいいんじゃないか

49:デフォルトの名無しさん
08/07/10 12:30:24
>>48
すみません!目から鱗でした!それで行きます

でも、考えるとますます、Javaにおけるshortなどの存在意義が無いですよね
なぜ暗黙の型変換でintにするような仕様を入れたのでしょうかね

50:デフォルトの名無しさん
08/07/10 12:55:46
log4jですみません。infoとerrorで別ファイルにログを出力したいのですが
log4j.xmlの設定がわかりません。
下記のように設定しているのですが両方infoのほうに出てしまいます。
どこを修正すればよいでしょうか?
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='URLリンク(jakarta.apache.org)'>
<appender name="ERROR" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="c:\\hoge\\log\\hoge_error.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %p:%c:%m:%n" />
</layout>
</appender>
<appender name="TRACE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="c:\\hoge\\log\\hoge_trace.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss} %m%n" />
</layout>
</appender>
<category name="common">
<priority value="error" />
<appender-ref ref="ERROR" />
</category>
<category name="common">
<priority value="info" />
<appender-ref ref="TRACE" />
</category>
</log4j:configuration>

51:デフォルトの名無しさん
08/07/10 12:56:42
>>46
それは障害者の人を軽蔑することになるぞ。

その件はインポでnullを宣言したら普通に足せました。

52:デフォルトの名無しさん
08/07/10 13:08:35
>>51
まさか本人は恥ずかしくて二度と顔を出せまい

53:デフォルトの名無しさん
08/07/10 14:35:41
>>52
本人ですが何か?
ってかネット上で『羞恥心』はねえだろ。

54:デフォルトの名無しさん
08/07/10 14:52:01
>>53
( ´,_ゝ`)プッ

55:デフォルトの名無しさん
08/07/10 15:28:21
>>50
フィルタをかけるらしい

URLリンク(rg550.hp.infoseek.co.jp)


56:デフォルトの名無しさん
08/07/10 17:13:25
宿題スレから誘導されてきました。
現在、swingを利用したGUIプログラムを作成しています。
catchブロックで例外を捕らえた場合は、
そのエラー内容を表示しろとのことなのですが、
これはJOptionPane.showMessageDialogで表示したほうがよいのか、
System.out.printlnで表示したほうがよいのか、
一体どちらなのでしょうか。
System.out.printlnだと、開発環境から起動しなかった場合に、
内容を確認できないと思っています。


57:デフォルトの名無しさん
08/07/10 17:35:10
どっちでもいい
仕様、案件、状況などに応じて適当なのを選べ
あとエラーはSystem.outよりSystem.err

58:デフォルトの名無しさん
08/07/10 17:43:09
了解しました。
ありがとうございます。

59:デフォルトの名無しさん
08/07/10 22:47:33
InetAddress ia=InetAddress.getAllByName("www.yahoo.co.jp");
System.out.println(ia.getHostAddress());
これを現時点で実行すると13個のIPアドレスが表示されますが、
これはwww.yahoo.co.jpのホスト名を13台のPCが持っているということなのか、
www.yahoo.co.jpのホスト名を持つ一台のPCが13個のIPアドレスを持っているということなのかどちらなのでしょうか?

またこのような1ホスト名:複数IPというのは前者の場合は分散化によるメリットが考えられますが、
後者のように一台のPCが複数のIPアドレスを持つことは何の意味があるのでしょうか?

60:59
08/07/10 22:49:01
意味不明なこと書いてしまった…。
こっちです。
InetAddress ia[]=InetAddress.getAllByName("www.yahoo.co.jp");
for(int i=0;i<ia.length;i++)
System.out.println(ia[i].getHostAddress());

61:デフォルトの名無しさん
08/07/11 00:14:14
Linux環境でJavaMailを使ってメール送信機能を実装したいのですが
JavaMailってSendMailが立ち上がってる必要があるのでしょうか?
それともSendMailなしでも単体で送信可能なのでしょうか?

62:デフォルトの名無しさん
08/07/11 00:19:40
>>59
javaと関係なく、DNS 関係を知ることを進める。
一台が複数のアドレスを持てれば、IP毎にマシンを用意しなくてすむ。

63:デフォルトの名無しさん
08/07/11 00:24:47
>>61
必ずしも *SendMail は* 必要無いが、*SendMail に代わるもの* が
動いている必要がある。
でなければそもそもメールが流れないことになるだろう。

64:デフォルトの名無しさん
08/07/11 00:33:29
どうもです、
>>63
試しにプロバイダのSTMPサーバーをメールサーバーに指定して
プログラムを動かしてみたのですがなぜか/var/log/maillogに
ログが出力されているのですがSendMailを使っていなくても
SendMailに中継されてたりするのでしょうか?

65:デフォルトの名無しさん
08/07/11 01:23:55
初めまして、インクリメントにつて質問なのですが
class Sample4_6
{
public static void main(String args[])
{
int a = 0;
int b = 0;

b = ++a;

System.out.println("代入前にインクリメントしたもので、bの値は、" + b + "です。");
}
}

結果が、”代入後にインクリメントしたもので、bの値は、1です。”

次に
class Sample4_6
{
public static void main(String args[])
{
int a = 0;
int b = 0;

b = ++a;

System.out.println("代入後にインクリメントしたもので、bの値は、" + b + "です。");
}
}

結果が、”代入後にインクリメントしたもので、bの値は、0です。”


66:デフォルトの名無しさん
08/07/11 01:24:56
訂正
後者は、”b = a++; ”です

67:65-66
08/07/11 01:28:14
ここで、疑問なのですが

結果的には、"1"になるはずなのに
どうして、後者が"0"なのか理解できません
出力される前に値がインクリメントされていないからでしょうか?

68:デフォルトの名無しさん
08/07/11 01:34:18
>>67
sysoutで言ってるじゃマイカ
>代入後にインクリメントしたもので、bの値は、0です。
結果的に 1 になるのは代入した b じゃなくインクリメントした a だろう

69:デフォルトの名無しさん
08/07/11 01:36:09
>>67
nt a = 0;
int b = 0;
b = a++;

これのbがなんで0かってこと?
>代入後にインクリメントしたもので
それなら理由は自分で書いてるとおりだけど。


70:デフォルトの名無しさん
08/07/11 01:46:41
int a = 0;

if ( ++a == 1 ) 適当な表示
if ( ++a == 2 ) 適当な表示

71:デフォルトの名無しさん
08/07/11 01:48:28
if ( ++a == 1 ) 適当な表示
if ( a++ == 2 ) 適当な表示

72:デフォルトの名無しさん
08/07/11 01:55:13
int a=0;
System.out.println(a);
System.out.println(a++);
System.out.println(a);
System.out.println("---");
a=0;
System.out.println(a);
System.out.println(++a);
System.out.println(a);

73:65-66
08/07/11 02:11:57
ひ〜難しい。。。

考えても混乱します・・・・

74:デフォルトの名無しさん
08/07/11 07:20:15
b = a++;



b = a;
a++;

と等しい

75:デフォルトの名無しさん
08/07/11 09:13:03
>>74
インクリメントを使わずに書いた方がより分かり易くならないか?
b=a++; → b=a; a=a+1;
b=++a; → a=a+1; b=a;

76:デフォルトの名無しさん
08/07/11 09:44:07
Eclipseにあるプログラムをもってきて、
インポートすると、

Classはraw型です。総称型Class<T>への参照は、
パラメータ化する必要があります。

という警告がでます。
警告は
java.lang.Class hoge;
のような宣言部分で出てます。
とりあえず、よく分からず適当に、
java.lang.Class<?> hoge;
としたら、警告は無くなったんですが、
こんな対応でいいか教えてください。

77:デフォルトの名無しさん
08/07/11 11:11:56
いいんじゃないの

78:デフォルトの名無しさん
08/07/11 15:47:00
JDBCを利用したプログラミングで苦戦しています。
insert文の実行にて、
stmt.executeUpdate("INSERT INTO mytable VALUES(10, 20)");
のようにするのではなく、
stmt.executeUpdate("INSERT INTO mytable VALUES(a, b)");
のように変数の値を追加したいのですが指定の方法がわからない状態です。
いろいろと調べてみたところ、${}でいけるような情報があったのですが、
それでも上手くいかない状態です。
変数の値を反映させるには、どうすればよいのでしょうか。

79:デフォルトの名無しさん
08/07/11 16:33:46
変数の前でダブルクウォーテーションをきればいい
普通の文みたいに+でつなげばよろし

80:デフォルトの名無しさん
08/07/11 16:39:08
補足
stmt.executeUpdate("INSERT INTO mytable VALUES(a, b)");
じゃなくて
String str="INSERT INTO mytable VALUES("+a+","+ b")";
stmt.executeUpdate(str);
にしてみては
携帯で急いで打ったからどっかちがうかも

81:デフォルトの名無しさん
08/07/11 16:55:44
IF文の条件を以下のようにしたいのですが書き方がわかりません。
教えてください。


String型のaのときは
int型のaを返す

82:デフォルトの名無しさん
08/07/11 16:58:32
教えていただいた方法でうまくいきました。
79,80さん、ありがとうございました。

83:デフォルトの名無しさん
08/07/11 17:04:28
>>82
SQL injectionとかあるからプリペアードステートメントがいいよ
URLリンク(www.atmarkit.co.jp)


84:デフォルトの名無しさん
08/07/11 17:15:31
>>81
aは変数? そのaの型は何なんだ?


85:デフォルトの名無しさん
08/07/11 17:24:12
プリペアードステートメントを使うと、SQL文の解析を毎回行わずに済むようですね。
変数の値が固定である場合には、利用できそうです。
参考になる情報、ありがとうございました。

86:デフォルトの名無しさん
08/07/11 17:28:49
今夜分かるSQLインジェクション対策
URLリンク(www.atmarkit.co.jp)

87:デフォルトの名無しさん
08/07/11 17:32:12
>>85
> 変数の値が固定である場合には、利用できそうです。

どう言うこと?

88:デフォルトの名無しさん
08/07/11 17:38:26
まあ、今時SQL文を+でつないでるようじゃ
プロ失格でしょ。

89:デフォルトの名無しさん
08/07/11 18:05:06
どうだろ。
ユーザによる検索なんかも、幾つも作っておくもの?
項目の組み合わせの変わる場合も?

90:デフォルトの名無しさん
08/07/11 18:13:44
>>85
違う。変数で渡す場合はプリペアードステートメント必須。
もし使ってないコードが納品されたら問答無用で突っ返す。

91:デフォルトの名無しさん
08/07/11 18:18:51
>>89
SQL自体は動的に組替えても、その中に外部から来るデータは含めない。
要は、プリペアードステートメントを含むSQLを組み立てて、それに外部
から来るデータを渡す。
DBやDBコネクタにバグがある可能性もある(特にマルチバイト文字)から、
100%安心できるわけではないが、少なくとも自分の担当範囲で脆弱性を
埋め込む可能性は減らせる。

92:デフォルトの名無しさん
08/07/11 18:24:38
プレースフォルダのパラメータは使いたいがPrepareしないという選択肢はなかったんだっけ?
JDBCじかは最近やってないから忘れてしまってる。


93:デフォルトの名無しさん
08/07/11 18:41:09
切実に困ってます…

メニューのボタンに触れるとサブナビゲーションが横にスクロールして出てきて、
マウスをボタンから離すとサブナビゲーションが元に戻る、というスクリプトはどのようにすればいいのでしょうか。

超初心者で、探してみたんですが、そういった方法の名称もわからないので見つけることができませんでした。
どなたか教えて頂けませんでしょうか。

94:デフォルトの名無しさん
08/07/11 18:46:24
>>93
>スクリプト
javascript? だったらすれ違い。

95:デフォルトの名無しさん
08/07/11 18:49:54
>>94
そうでしたか。
それではそっちで聞いてみます。
ありがとうございました

96:デフォルトの名無しさん
08/07/11 18:53:28
>>91
なるほどね

97:デフォルトの名無しさん
08/07/11 22:40:56
質問です。

Windowsをメインに考えているのですが、javaの暗黙の型変換にはやはりコストが
掛かるものと考えておいたほうが良いのでしょうか?

たとえばメソッドの、boolean method(int i){return i >10;} とboolean method(short i){return i >10;} は
全く同じバイトコードにコンパイルされますが、これでもやはり実行時にJVM内部で変換のコストが
発生しているのでしょうか?

98:デフォルトの名無しさん
08/07/11 22:44:05
言葉足らずですみません。

バイトコードの1行目が、
0 iload_1 [i]
なのですが、つまり、ここにshortの変数をぶち込んだ時に、
内部でintへの変換が発生すると思うのですが
そういう認識であってますでしょうか?

99:デフォルトの名無しさん
08/07/11 22:52:51
>>97-98
コストはかかっているのかもしれないが、1つインスタンスをnewするコ
ストに比べたら何十万分の一とかそういうレベル。



100:デフォルトの名無しさん
08/07/12 00:18:57
質問です

"if
else if
else if
else"



"if
if
else
else
else"

は、同じ意味なのでしょうか?


101:デフォルトの名無しさん
08/07/12 00:20:45
>>100
2つ目はコンパイルエラーなんじゃ。 if () { } 括弧をつけてきちんと書いてみなされ。

102:100
08/07/12 00:30:18
レス、ありがとうございますが・・・
????

103:デフォルトの名無しさん
08/07/12 00:33:06
if と else は一対

104:デフォルトの名無しさん
08/07/12 00:35:25
>>100の質問の意味はかりかねる。実は文字列の比較をしたいだけでは " とか付いてるし。

105:100
08/07/12 00:37:33
>>103->>104
はい、この二つの文法は意味が同じか訊きたいのです。

106:デフォルトの名無しさん
08/07/12 00:40:56
どう考えたら同じに思えるんだ。

107:101
08/07/12 00:42:11
if () { 
} else if {
} else if {
} else {
}
  
と 

if () {
   if () { 
   } else {
   } 
   else  // なんだよこれ
} else {
}


108:デフォルトの名無しさん
08/07/12 00:45:39
FileFilterについて質問します。
ファイルを開くときにフィルタを適用して、拡張子による選別は実現できたのですが、
保存のときにフィルタを適用することができません。

例えばメモ帳などでデータを保存するときに、ファイルの種類をテキストタイプに指定すれば
ファイル名にわざわざ拡張子.txtを入力せずともテキストファイルの保存ができると思いますが、
このような機能を実現するには、自分で処理部分を実装するしかないのでしょうか?

109:デフォルトの名無しさん
08/07/12 01:11:18
>>108
FileFilterと何が関係あるのかわからない。
ユーザにファイル名を入力してもらったら、filename + ".txt" ってや
るだけでは?



110:デフォルトの名無しさん
08/07/12 01:17:58
>>109
既に".txt"ってついている場合を分けなきゃな

111:108
08/07/12 01:25:53
メモ帳で保存した場合、ファイルの種類にテキストタイプを選択したあと、
ファイル名に"test.java"と入力して保存すると、javaファイルとして保存されるんです。

ファイル名から拡張子を抜き出すことは可能なのですが、条件分けに戸惑ってまして…
FileFilterを利用すれば面倒なことは勝手に処理してくれるのかな、と思ったのですが、
どうやらそうじゃないみたいですね。

112:100
08/07/12 01:40:29
>>106>>107
はぁーなるほど、訂正ありがとうございます。

学校の資料見ると、上記の二つの文は書き方が違うだけで
同じと書いてありましたので・・・・

113:デフォルトの名無しさん
08/07/12 01:43:35
>>112
学校の資料が間違っていたか間違って覚えてきたのか。
短いプログラムを書けば実証できるんだからナゼやってみない?

114:100
08/07/12 01:59:36
>>113
はい、やってみます。
サンクスですた。。。

115:デフォルトの名無しさん
08/07/12 02:07:40
>>111
何かを勘違いしていると思われる。

保存するファイル名がtest.txtだろうがtest.javaだろうが、ファイルの
中身は同じだよ? Windowsのエクスプローラがファイル名を見て「テキ
スト ドキュメント」とか種類を表示しているだけ。


116:115
08/07/12 02:11:54
あ、メモ帳の例が悪いだけかな。
たとえば画像処理するプログラムで、test.jpgならJPEGで保存、
test.bmpならBMPで保存、という感じに保存されるデータ自体が変わるケー
スもあるね。
そういうのは自分でコードを書かなきゃダメだ、もちろん。


117:108
08/07/12 03:08:51
無事解決しました。
意見していただいた方、ありがとうございました。

118:デフォルトの名無しさん
08/07/12 04:12:21
import java.io.*;

class Sample5_6
{
public static void main(String args[]) throws IOException
{
System.out.println("苗字を入力してください。");

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();
String str1 = "山田";
String str2 = "伊藤";

if(str1 == "山田"){
System.out.println("太郎が入力されました。");
}
else if(str2 == "伊藤"){
System.out.println("次郎が入力されました。");
}
else{
System.out.println("1と2を入力して下さい。");
}

}
}

119:118
08/07/12 04:15:18
これが、思い通りになりません

出力が
”山田”を入力したら”太郎”に
”伊藤”を入力したら”次郎”に
なるようにしたいのですが、
後者が、どうしても、”伊藤”と入力すると”太郎”が
出力されてしまいます

120:デフォルトの名無しさん
08/07/12 04:35:18
>>118
equals
つか、Javaで真っ先に習うことの一つのような気がするが……。

121:デフォルトの名無しさん
08/07/12 04:44:49
慣れるまでは結構やると思うけどね

122:118
08/07/12 04:48:57
equals
は、まだ習っていません・・・
できたら、ソースを訂正していただけないでしょうか・・・?

123:デフォルトの名無しさん
08/07/12 05:01:51
ていうかあれだな、strにキーボードで打った文字入れてるのに
if文で使ってないのは比較以前の問題だな。。。

とりあえずequalsは「java 文字列比較」で調べればいいよ

124:118
08/07/12 05:58:04
ありがとうございました

125:デフォルトの名無しさん
08/07/12 07:58:43
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;

public ActionForward select (ActionMapping map,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res ) throws Exception{
DBManagement dbManager = new DBManagement();
ArrayList alTask = new ArrayList();
ServletContext scContext = servlet.getServletContext();
DataSource dsSource =(DataSource) scContext.getAttribute(Globals.DATA_SOURCE_KEY);
alTask = dbManager.selectData(dsSource);
req.setAttribute("input", alTask.toArray());
return map.findForward("index");
}

上記のコードがあります。selectメソッドの5行目や6行目では、newを使ってインスタンスを生成しています
が、次の行のservlet.getServletContext();ではインスタンスを生成しなくてもいきなり
servlet.getServletContext();という風にgetServletContext() メソッドを使えています。これは何故でしょうか?

ぐぐってもわからなかったので、ご教授いただければ幸いです。 どうぞ宜しくお願い致します。


126:デフォルトの名無しさん
08/07/12 08:35:06
>>125
select メソッドがあるクラスに servlet という フィールドは無いか?
もしくはそのクラスが extends しているクラスに servlet という protected か public なフィールドは無いか?

127:デフォルトの名無しさん
08/07/12 10:18:07
>>126
早速のレス有難う御座います。
私が見た限りでは、どちらもありませんでした。

なお、エクリプスで上記のコードを見ると、servlet.getServletContext() のservletだけ
青文字になっていたのでマウスのカーソルを当ててみたところ、

ActionServlet org.apache.struts.action.Action.servlet
Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.

と出ました。何かしらご教授いただければ幸いです。どうぞ宜しくお願い致します。

128:デフォルトの名無しさん
08/07/12 10:21:57
ActionServlet org.apache.struts.action.Action.servlet
org.apache.struts.action.Actionのservletだろ

129:デフォルトの名無しさん
08/07/12 12:45:37
>>99
ありがとうございました

130:デフォルトの名無しさん
08/07/12 13:09:30
>>128
レス有難う御座います。
ということは、インポートしたパッケージに含まれるオブジェクトは、newで
インスタンスを生成しなくてもいきなり使える、ということでしょうか?

131:デフォルトの名無しさん
08/07/12 13:29:27
>>130
public class LoginAction extends Action {

とかしてるんじゃないの?

132:デフォルトの名無しさん
08/07/12 13:38:41
>>131
レス有難う御座います。

いえ、public class 〜Action extends MappingDispatchAction {

になっています。なにかご教授いただければ幸いです。どうぞ宜しく
お願い致します。

133:デフォルトの名無しさん
08/07/12 13:48:21
>>132
MappingDispatchActionは、Actionのサブクラスなのでは?

134:デフォルトの名無しさん
08/07/12 14:10:05
>>130
インスタンス変数と継承の関係について理解が足りない。

135:デフォルトの名無しさん
08/07/12 15:39:11
最近Javaを始めたものですが、以前にC++を扱っていた人が
「JavaでGUIを作る気になれない」
といっていたのを思い出しました。
どちらが優れてるか等の議論はしませんが、それぞれのメリット、デメリットを教えていただけないでしょうか?


136:デフォルトの名無しさん
08/07/12 15:59:38
JAVAで二重起動を検出する標準的な方法などは、あるものでしょうか。
URLリンク(oshiete1.goo.ne.jp)
この手順のような、解放処理を登録せずに実装できる方法を探しています。

137:デフォルトの名無しさん
08/07/12 16:09:38
>>136
そこに書いてある、解法処理を登録する奴が一番標準的

138:デフォルトの名無しさん
08/07/12 16:23:20
なるほど、そうでしたか。
この解放処理をWindowAdapterクラスを継承したクラスの
windowClosingで処理するという方法はありでしょうか。
試した限りでは、上手く動作しているのですが。

139:デフォルトの名無しさん
08/07/12 16:32:20
>>138
java.lang.Runtime#addShutdownHook(java.lang.Thread) 使ったほうが、
異常終了(例えば Windows の ctrl-c による強制終了とか)でも終了を捕捉できる可能性が高くなる。

必要ないならアリだと思う。

140:デフォルトの名無しさん
08/07/12 16:35:48
>>135
Java *だけで* ある簡単な GUI を作ってみて、
C++ *だけで* 同じ GUI を作ってみて、
比較してみたら何か分かるんじゃないか?

141:デフォルトの名無しさん
08/07/12 16:49:56
>>139
レスありがとうございます。
もう一度、検討しなおします。


142:デフォルトの名無しさん
08/07/12 17:25:47
>>135
OS

143:デフォルトの名無しさん
08/07/12 19:56:54
テキストエリア内の現在のキャレットの位置を(X行,Y列)で取得するにはどうしたらいいんでしょうか?
getCaretPosition()でオフセットを取得して、そこから(X行,Y列)への変換を試みたのですが、
うまくいきませんでした。
どなたか、御教示下さい。

144:デフォルトの名無しさん
08/07/12 22:14:08
>>143
やったこと無いけど、
getCaretPosition() を使った方法じゃダメなの?

145:デフォルトの名無しさん
08/07/12 22:14:37
swingでウィンドウを作ってみたんですがうまく行きません
OSはVistaの32bit、javaのヴァージョンはVersion 6 Update 7です。

コンパイルしたものを実行するとウィンドウは出てくるんですが
ボタンやテキストエリア等の中身が一切表示されません。
ウィンドウサイズを手動で変えると表示されます。
別のウィンドウをアクティブにしてから戻ると、
その別のウィンドウと重なった部分が消えてしまいます。

解決策はありますでしょうか。よろしくお願いします。

146:デフォルトの名無しさん
08/07/12 22:22:55
>>145
バリデートツリーとかリペイントとか?

Java低速GUI Swing 7
スレリンク(tech板)

147:デフォルトの名無しさん
08/07/12 22:32:14
>>145
ソースをこちらへ
URLリンク(rg550.hp.infoseek.co.jp)


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4530日前に更新/278 KB
担当:undef