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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/08(金) 19:48:24
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

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

前スレッド
【初心者】Java質問・相談スレッド111【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1200151522/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。

次スレは>>980あたりで。
0083デフォルトの名無しさん2008/02/10(日) 03:12:37
>>81 ありがとう
0084デフォルトの名無しさん2008/02/10(日) 03:53:37
ttp://blog.livedoor.jp/mikuriyahiroto/archives/50829394.html
のページにあるプログラムをEclipseで実行するとエラーが出てしまいます

ちなみにエラーの文章は
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66)
at Logintest.main(Logintest.java:20)
とでて、
Logintest.java:20の内容は
HttpClient client = new HttpClient();
です。

java素人なので全然わかりません。。。よろしくおねがいします!
0085デフォルトの名無しさん2008/02/10(日) 03:54:45
JARをパスに追加しろ
0086デフォルトの名無しさん2008/02/10(日) 03:59:16
eclipse3.3で初めてJUnit(4)のテストコードを書いています。
このテストコードをマウスを使わずに
キーボードだけで素早く実行するにはどうしたらいいのでしょうか?
0087842008/02/10(日) 04:07:18
>>85
お返事ありがとうございます
外部jarの追加でしっかり追加したはずなんですが

できてなかったのですかね。。。
0088デフォルトの名無しさん2008/02/10(日) 04:46:10
>>87
OROが足りないんだろ。
追加しろ
0089デフォルトの名無しさん2008/02/10(日) 05:11:25
↑俺なんてかっこいいんだと思ってるwww
0090デフォルトの名無しさん2008/02/10(日) 06:37:26
>>88
oro追加してみましたけどインポートされた org.apache.oro は一度も使用されていません。と出てしまいます。
コンパイルエラーの文章も依然変わりません...('A`)ウムム
0091デフォルトの名無しさん2008/02/10(日) 08:33:24
Javaをググッてみました
初心者向けということなのでNetbeansをインストールしましたが
使い方がさっぱり分かりません。
最初は普通のエディタの方が良いでしょうか?
0092デフォルトの名無しさん2008/02/10(日) 10:49:56
>>84
commons.logging パッケージのクラスが見つからないというエラー。
ということで、そやつを取ってきてパスに入れれば…進展があるはず
0093デフォルトの名無しさん2008/02/10(日) 11:08:39
質問です。
JAVAから外部のアプリケーションに対して操作を行うにはどのようにすればよいでしょうか。
例えばWindows標準のメモ帳に対して文字列"abc"を入力する、といったものです。
よろしくお願いします。
0094デフォルトの名無しさん2008/02/10(日) 11:15:45
Robot
0095デフォルトの名無しさん2008/02/10(日) 11:18:27
あるいは SWT の非公開 API
0096デフォルトの名無しさん2008/02/10(日) 11:25:42
>>93
もっと上手い方法があるのかねぇ。

// 例外はうまく処理してちょ
Runtime.getRuntime().exec("notepad.exe");
Robot robot = new Robot();
Thread.sleep(2000);
robot.keyPress(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_B);
robot.keyPress(KeyEvent.VK_C);
0097デフォルトの名無しさん2008/02/10(日) 11:28:11
>>94
!! こんなクラスあったんだ。しかも1.4から標準で。知らんかった……。
0098デフォルトの名無しさん2008/02/10(日) 11:30:51
Robotなんて名前がそのまんまなクラスがあるとは・・・。
私は始めたばかりですが、もっとリファとか読まないといけませんね。
ありがとうございました。
0099デフォルトの名無しさん2008/02/10(日) 13:28:12
>>82

コールバックされるオブジェクトの参照を、する方に渡す。
メソッドのアドレスを渡すような考え方はしない。
コールバックされるクラスがいろいろあるなら、
目的のメソッドを定義した interface を作って、
それらのクラス全員に implements させる。
0100デフォルトの名無しさん2008/02/10(日) 13:35:19
クラスは,C言語における構造体の配列みたいだと思ったのですが、
あっているでしょうか?
0101デフォルトの名無しさん2008/02/10(日) 13:37:44
たぶん間違い。
構造体のような使い方もできるがもっと色々できる。

PCはゲーム機の本体のようなものですか?のような質問。
0102デフォルトの名無しさん2008/02/10(日) 13:42:27
何で配列?
0103デフォルトの名無しさん2008/02/10(日) 14:50:59
>>92
エラーが表示するライブラリを順に追加していったら動くようになりました!
ありがとうございます。
0104デフォルトの名無しさん2008/02/10(日) 19:40:54
こんばんは。質問よろしいですか。
Linuxコマンド(diff)を実行し、その結果を出力するだけのプログラムなのですが、
なぜかその実行結果がNULLになります。
ソースは以下の通りです。宜しくお願いします。
fileA,fileBは共にテキストファイルで、コマンドの誤りは何度も試したのでないと思います。

public class b {
public static void main(String[] args) {
try {
// プロセスオブジェクトを生成
String str ="diff fileA fileB";
// System.out.println("command:"+str);
Process process = Runtime.getRuntime().exec(str);
// process.waitFor();
// 外部コマンドの標準出力を取得するための入力ストリームを取得
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 標準出力を1行づつ取り出します
String line = br.readLine();
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
01051042008/02/10(日) 19:57:29
申し訳ありません。自己解決しました。
原因は、もしかすると、fileAとfileBの場所が遠かった(コマンドが長すぎた)せいだと思います。
ご迷惑をおかけしました。
0106デフォルトの名無しさん2008/02/10(日) 20:34:38
アニキ、Ant から起動したら XML パースが使えなくなりやしたぜ。どうしやしょう。
0107デフォルトの名無しさん2008/02/10(日) 21:16:06
放置しとけ
0108デフォルトの名無しさん2008/02/11(月) 01:05:22
Log4j って作者抜けてから開発停滞してね? J2SE 5.0 に対応させるとか言ってた
2.0 とかの開発今どうなってんの?
0109デフォルトの名無しさん2008/02/11(月) 01:22:17
log4jメーリングリストのアーカイブ嫁
0110デフォルトの名無しさん2008/02/11(月) 01:32:18
このスレ並の質問ばっかで開発状況の話なんて全然ねーじゃん。
0111デフォルトの名無しさん2008/02/11(月) 02:08:30
秘密の漏えいを期待してるのか?
かね出さずに?
0112デフォルトの名無しさん2008/02/11(月) 09:40:34
Javaをアンインストールしたらどうなりますか?
windows vista
0113デフォルトの名無しさん2008/02/11(月) 10:18:26
削除されます
windows vista
0114デフォルトの名無しさん2008/02/11(月) 10:25:58
Javaをアンインストールても、windows vistaは正常に作動しますか?
0115デフォルトの名無しさん2008/02/11(月) 11:59:33
SOAPってスレッド使ってもいいの?
仕様的に。
0116デフォルトの名無しさん2008/02/11(月) 13:21:47
プログラムを実行するごとにint型の変数の値を1ずつインクリメントするのってどうやったらできるんですか〜−−;
0117デフォルトの名無しさん2008/02/11(月) 14:02:08
>>116
プラシーボで良ければ、int型の値を確保し、それをインクリメントするだけのプログラムを。

でなければ、実行されるプログラムが使用するメモリ以外の部分に、実行時の値を保存する。
レジストリやらHDDなど外部記憶装置やら。

参考
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/Properties.html
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/prefs/Preferences.html
0118デフォルトの名無しさん2008/02/11(月) 14:09:32
>>117
ありがとうございます!
今からちょっと用事があるので帰ってきてから実装してみたいと思います。
0119デフォルトの名無しさん2008/02/11(月) 15:03:20
必ず表示されるフォントってありますか?
0120デフォルトの名無しさん2008/02/11(月) 15:05:47
今のところ
Calendar.SUNDAY == 1
Calendar.MONDAY == 2
 (略)
Calendar.SATURDAY == 7
みたいですが、これを前提にコード書いたらやっぱまずいですか?
SUNDAYからMONDAYまでがこの順に連続した整数であることも
全く保証されて……ないんですよね、やっぱり。
SUNDAY→0, MONDAY→1, ..., SATURDAY→6 を得たいんですけど、
いちいち走査するしかないのかなあ。
0121デフォルトの名無しさん2008/02/11(月) 15:05:51
String s = ?(97);
s.equals("a")にするための?の部分を教えてください。
0122デフォルトの名無しさん2008/02/11(月) 15:09:44
>>119
どの環境でも使えるフォント名ってことなら"Serif"、"SansSerif"、"Monospaced"、"Dialog"、"DialogInput"
0123デフォルトの名無しさん2008/02/11(月) 15:13:23
>>121
Character.toString( (char)97 )
0124デフォルトの名無しさん2008/02/11(月) 15:16:57
>>120
作法としてまずいかどうかは知らないが
将来バージョンアップで値が変わったりとかはしないはずなので大丈夫かと
(そんなことしたら既存のプログラムが動かなくなるし)
0125デフォルトの名無しさん2008/02/11(月) 15:39:47
qa3765663
0126デフォルトの名無しさん2008/02/11(月) 16:52:34
質問です。

JNIで呼び出すCのライブラリの中でファイルを参照するのですが、
ファイルの読み込みは一度だけにして常にメモリ中に展開しておき、
2度目以降は読み込み処理をやらなくてすむようにはできるでしょうか?
0127デフォルトの名無しさん2008/02/11(月) 17:34:06
>>120
APIドキュメントで対応する数値が明記されていない以上、
変更されて機能しなくなる可能性がないとはいえないが、
まあたぶん変えられることはなさそうだし前提にしてもいいんじゃないかな。
Calendar.SUNDAYとかはpublic static final intで宣言された定数なので、
使用側のコードに直接値が埋め込まれるため、
変更されるような事態になったら全部コンパイルし直しになるので。
0128デフォルトの名無しさん2008/02/11(月) 18:05:38
>>125
okwaveとのマルチか
0129デフォルトの名無しさん2008/02/11(月) 18:17:05
>>128
どこかがつぶれてもいいような分散技術を使った高度な質問技。
しかし技を使ったことがバレると回答されにくくなる諸刃の剣。
0130デフォルトの名無しさん2008/02/11(月) 19:02:29
ただのクロスポストだろ。なにが高度なんだ
0131デフォルトの名無しさん2008/02/11(月) 20:29:06
>>120
必要が無ければやるべきではない印象を持つが、必要として考えると…

定数の値は公開されて確認ができるので、クラスの使用条件を
「Calendar.SUNDAY から Calendar.SATURDAY が連続した整数値を取ること」
としていれば、Java のバージョンが変わったときも、それを確認するだけで使えると思う。

もしくは、static の初期化子などでそれらが連続することを確認し、
そうでは無い場合には何らかの処置をする、とか
01321202008/02/11(月) 22:28:27
レスありがとうございました。
書いた直後に出かけていて返事が書けませんでした、ごめんなさい。

>>124
いくら public とはいえ、SUNDAY と "1" という値とは本来何の繋がりもない、
Calendar クラスの中だけの約束事でしかないので、
定数をこういう風に使っていいのかなぁという疑問がずっと消えなくて。

>>127
やっぱり明記はされてないんですよね。
ただ、「使用側のコードに直接埋め込まれる」には思わず手を打ちました。
定数が変わるときにはどのみちコンパイルし直しになるんだから
そのときにチェックが入るだろう、という考え方ですね。
建国記念の日とか春分とかの「日本の休日」を扱うクラスは
(どうせあと数十年中に休日が増減するから)とりあえず21世紀中だけ
使えることにしておけばいいよ、ってのと似たような話でしょうか。
ちょっと違うかもですが。

>>131
その発想はなかったっ。
どうせ将来にわたっても定数が変更されることはないだろうけど、
もし万が一……というところで悩んでいたので、
その注意書きを選ぶことにします。
お三方ともありがとうございました。
0133デフォルトの名無しさん2008/02/11(月) 23:03:36
>>132
>建国記念の日とか春分とかの「日本の休日」を扱うクラスは・・・
祝日ってDBかファイル持ちだち思うんだ
0134デフォルトの名無しさん2008/02/11(月) 23:06:09
>>132
それなら自分でMap持てば済む話じゃないの?
0135デフォルトの名無しさん2008/02/12(火) 00:59:23
JavaBeansの仕様で質問です。
String a_1 = null;
というフィールドがあった場合、仕様として正しい
geterは
getA_1なのでしょうか?
0136デフォルトの名無しさん2008/02/12(火) 01:09:58
逆に考えるんだ
「get,set,isに続くものをプロパティ名とする」と
フィールド名は関係ない
0137デフォルトの名無しさん2008/02/12(火) 01:27:58
質問です。

クラス名や変数名に「hoge」という文字が頻繁に使われていますが、
なぜ「hoge」なんですか?
0138デフォルトの名無しさん2008/02/12(火) 01:32:23
>>137
ほげを考えるページ
ttp://kmaebashi.com/programmer/hoge.html
0139デフォルトの名無しさん2008/02/12(火) 01:34:19
そんなググれば出てくるような質問を
テレビのイの字と同じようなものだよ
0140デフォルトの名無しさん2008/02/12(火) 01:44:56
javamailを使ってメールの複数送信をしようと思います。
送信先をXMLデータベースから抜き出してループさせたいのですが,
internetaddressクラスの配列使用の場合と
SAXとの組み合わせ方が今ひとつわかりませんのでどなたか解説お願いします。

0141デフォルトの名無しさん2008/02/12(火) 02:19:43
>>138
つまり、名前をつけるのが面倒なときにつけるんですね?
ありがとうございました
0142デフォルトの名無しさん2008/02/12(火) 03:48:51
初歩的なことなんですが、
javaプログラムから新たなテキストファイルを作成するにはどうすればいいのでしょうか?
ファイル作成のためのクラスとかありますか?
0143デフォルトの名無しさん2008/02/12(火) 03:50:55
FileWriter
01441422008/02/12(火) 04:19:25
>>143
FileWriterで書き込んだりReaderで読み込んだりすることは出来るのですが、ファイルを作成することが出来ないんです。
具体的には、絶対パスではなく自分より二つ上の階層に新しいテキストファイルを作成したいのですが、
ネットで調べてもファイルへの読み書きの仕方しか出てきません。
0145デフォルトの名無しさん2008/02/12(火) 04:25:32
作成したいファイル名で new FileWriter("../../hoge.txt") すれば勝手にできる。
例外が発生するって言うならその例外の意味を調べろ。
01461422008/02/12(火) 06:47:29
>>145
FileWriterで作成までしてくれるとは知りませんでした。
ありがとうございました。
0147デフォルトの名無しさん2008/02/12(火) 09:41:05
>>135
getterですよ
0148デフォルトの名無しさん2008/02/12(火) 14:05:33
現在メニューバー作成のためにサンプルプログラムを動かそうと
してるんだがコンパイラは通るんだがappletviewerが起動しない・・・。
コンパイラが通る時にMenuFrame2.classと同時に
MenuFrame2$1.class(プログラム中に記載はされてない)
という謎物ができるんだがこれが原因なのか?

↓とりあえずサンプルプログラム
ttp://www.dotup.org/uploda/www.dotup.org2840.java.html
Passはjava
0149デフォルトの名無しさん2008/02/12(火) 14:15:07
>>148
それアプレットじゃないじゃん
普通に java MenuFrame2 で起動してみ
0150デフォルトの名無しさん2008/02/12(火) 14:21:45
そうなんですか。
とりあえずIP抜かせてもらいました(^^v
0151デフォルトの名無しさん2008/02/12(火) 14:23:37
穴があったら入りたいと思ったが穴が無かったので
小さいかまくらを作った。入れなかった。
アプレットだと思ってた俺がバカでした。回答thx。
0152デフォルトの名無しさん2008/02/12(火) 14:53:19
>>150
厨房( ´,_ゝ`)プッ
0153デフォルトの名無しさん2008/02/12(火) 15:08:43
tes01/tes02/tes03/sample.class という階層があって、
sample.classには、package tes03; の宣言がされています。
コマンドプロンプトから実行するとき、
tes02ディレクトリからでは java tes03/sample で実行出来るのですが、
tes01ディレクトリとtes03ディレクトリから実行出来ません。
例えばtes01ディレクトリから、java tes02/tes03/sample としてもエラーが出ます。
どうすればいいのでしょうか
0154デフォルトの名無しさん2008/02/12(火) 15:22:02
>>153
つjava -cp test02 test03/sample
01551532008/02/12(火) 17:17:22
>>154
ありがとうございます!無事実行できました。
0156デフォルトの名無しさん2008/02/12(火) 17:28:24
JDBCでテーブル一覧を取得したいんですが、
どうやったらいいのでしょうか?
0157デフォルトの名無しさん2008/02/12(火) 18:00:54
Connection#getDatabaseMetaData()
0158デフォルトの名無しさん2008/02/12(火) 18:23:28
JNI で質問なんですけど、C/C++ から呼んだ Java のメソッドで new で確保したオブジェクト
返した場合、JNI でそのオブジェクト参照してても GC の対象になるよね?

public byte[] foo(){ new byte[1024]; }

jobject value = env->CallObjectMethod(clazz, method);
0159デフォルトの名無しさん2008/02/12(火) 19:02:54
>>158
ネイティブメソッドから返るまでは掴んだまま
返れば GC の対象になる
明示的に放したい場合は DeleteLocalRef を呼ぶ
0160デフォルトの名無しさん2008/02/12(火) 19:26:36
おまいら親切過ぎる
職場の上司もこんな優しく教えてくれたらなぁー
0161デフォルトの名無しさん2008/02/12(火) 20:37:22
Threadのrunメソッドに引数を渡すことは出来ないんでしょうか?
スレッドを複数作成してそれぞれのスレッドに異なる情報を渡して違った処理を実行させたいのですが。
0162デフォルトの名無しさん2008/02/12(火) 20:54:41
メンバ変数に持たせときゃいいじゃん
0163デフォルトの名無しさん2008/02/12(火) 21:46:47
>>159
そうなんですか。Java VM が参照見失うかと思ったんですがそうではないんですね。
ひょっとして env->NewByteArray() とかもちょあんt
0164デフォルトの名無しさん2008/02/12(火) 22:00:56
お前のほうが色々見失っているよ
0165デフォルトの名無しさん2008/02/12(火) 22:26:02
「うまいこと言った!」



そう考える 164 であった。
0166デフォルトの名無しさん2008/02/12(火) 22:46:48
馬鹿っぽい質問だけど
インスタンス変数はよくprivateにするのに
クラス変数はどうしてpublicばっかなの?
private static 〜 なんてのはあまり見ない気がする
0167デフォルトの名無しさん2008/02/12(火) 23:29:05
スコープについて学べ
0168デフォルトの名無しさん2008/02/12(火) 23:31:36
>>160
プロとしての自覚を持て
先輩の何十分の1程度の生産性しか出せないくせに
給料は同じくらいもらってんだろ?
0169デフォルトの名無しさん2008/02/12(火) 23:36:06
普通後輩の方が安いはずなんだが
0170デフォルトの名無しさん2008/02/12(火) 23:38:56
何十分の1なのか?w
0171デフォルトの名無しさん2008/02/12(火) 23:40:45
>>169
>>168の書き込みなんて気にすんなw
0172デフォルトの名無しさん2008/02/12(火) 23:44:24
先輩になっても給料変わらん会社にお勤めなんじゃないのか。
0173デフォルトの名無しさん2008/02/12(火) 23:46:37
>>169
おまいも経験積んだら、高い生産性出せるようになるさ
0174デフォルトの名無しさん2008/02/12(火) 23:48:26
今できない香具師はずっとできない希ガス
0175デフォルトの名無しさん2008/02/12(火) 23:55:03
>>169は管理職で残業代出る後輩のが手取りは多い、とか。
0176デフォルトの名無しさん2008/02/12(火) 23:59:00
>>175
それはありそうだな
生産性が低ければそれだけ残業するしな
0177デフォルトの名無しさん2008/02/13(水) 00:12:03
30過ぎて月給25万の俺を慰めてくれよ
0178デフォルトの名無しさん2008/02/13(水) 00:39:15
愚痴るならマ板池
0179デフォルトの名無しさん2008/02/13(水) 00:56:10
25万ももらえば十分だろ
贅沢言ってんじゃねえよカス
0180デフォルトの名無しさん2008/02/13(水) 00:57:54
import,例外処理は省略します
public class ComServer{
private ServerSocket sock; private Socket client;
public final static int portNo = 10500; private BufferedWriter writer;
private BufferedReader reader; private String msg = null;
ComServer() init();
void init(){
if(sock == null){
sock = new ServerSocket(ComServer.portNo,1);
client = sock.accept();
client.setKeepAlive(false);
System.out.println("Client connected");
}
if(reader == null) reader = new BufferedReader( new InputStreamReader(client.getInputStream()));}
String receive(){
if(reader == null)init();
String msg = null;
msg = reader.readLine();
return msg;
}
class s extends Thread {
private BufferedWriter writer;
private String msg;
s(String masg)this.msg = masg;
if(writer == null) writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
public void run(){
writer.write(msg,0,msg.length());
writer.flush();
}}}
すいません。たぶん根本的な間違いとおもいますがエラーがでてコンパイルできないです
申し訳ないですがバグを見つけてもらえないでしょうか?おねがいします. 環境はeclipse3.3.1.1 jre1.6.0_03です
0181デフォルトの名無しさん2008/02/13(水) 01:11:43
いやだ。
0182デフォルトの名無しさん2008/02/13(水) 01:13:59
>>180
エラーどこ、main どこ。クラスの先頭は大文字で。
eclipse ならエラーの対処方法も出るでしょうに。
■ このスレッドは過去ログ倉庫に格納されています