【初心者】Java質問・相談スレッド112【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/02/08(金) 19:48:24JavaScript, 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あたりで。
0052デフォルトの名無しさん
2008/02/09(土) 19:27:12ソースのa,b,c,d,e,f(文字列)からAという配列を作りたいです。
A[a] == b
A[c] == d
A[E] == f
0053デフォルトの名無しさん
2008/02/09(土) 19:32:060054デフォルトの名無しさん
2008/02/09(土) 19:56:271種類のString配列では表せない情報を与えたい時はどうすればいいのでしょうか?
例えば、複数の文字列とオプションを実行時に指定させたい場合、
プログラム側では文字列とオプションの区別が付けられません。
0055デフォルトの名無しさん
2008/02/09(土) 20:07:39順番で区別するとか、
先頭に '-' や '@' や '/' がついてたらオプションとか、
文字列は "文字列" みたいに引用符で括るとか、
やり方はいろいろある。好きな方法を使え。
0056デフォルトの名無しさん
2008/02/09(土) 20:17:550057デフォルトの名無しさん
2008/02/09(土) 20:24:07argsをパースするのは自力で作る
0058デフォルトの名無しさん
2008/02/09(土) 20:25:24HashMap はJDK1.2に対応していますか?
0059デフォルトの名無しさん
2008/02/09(土) 22:01:26ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/HashMap.html
> 導入されたバージョン:
> 1.2
同期云々の話も上のリンク先の記述からだと思うのだが、文章そのまま。
逆に、Hashtable の方は同期がとられて、null の場合はない。
> HashMap クラスは Hashtable と同じと見なしてもかまいませんが、
> HashMap の方は同期がとられず、null の場合もあります。
何故同期が取られないのか、については、設計上の方針。
Collections.synchronizedMap(Map) を使う。
更に、iteratorを使う場合には、更に同期処理が必要。詳しくは API 仕様に。
0060デフォルトの名無しさん
2008/02/09(土) 22:20:53HashMap が同期(synchronized)されない、というのは、簡単に言うと、
複数のスレッドから同時にアクセスすると壊れるよ、という意味です
0061デフォルトの名無しさん
2008/02/09(土) 22:30:36ありがとう
でも一挙動でコーディングできれば最適なんですがねえ
0062デフォルトの名無しさん
2008/02/09(土) 22:32:42なんだろうねぇ。
とりあえず、遅延初期化をする必要が無ければ、instance を
public static final *** INSTANCE にするのはどうだろう。
0063デフォルトの名無しさん
2008/02/09(土) 22:32:550064デフォルトの名無しさん
2008/02/09(土) 22:36:06UML は確かに機能的な面も強調される表記法でもあると思うが、
そもそもの目的は、数ある表記法を名の通り"統一"したものだしなぁ
0065デフォルトの名無しさん
2008/02/09(土) 22:40:120066デフォルトの名無しさん
2008/02/09(土) 23:15:05ありがとうございます。やってみましたがダメでした
うまくいかないソースを削ってサンプルを作ってみました
class A {
final static A INS = new A();
private B b;
private A(){b = B.INS;}
B getB(){return b;}
public static void main(String[] args) {
System.out.println(A.INS.getB().getC().getA().toString());
}
}
class B {
final static B INS = new B();
private C c;
private B(){c = C.INS;}
C getC(){return c;}
}
class C {
final static C INS = new C();
private A a;
private C(){a = A.INS;}
A getA(){return a;}
}
0067デフォルトの名無しさん
2008/02/09(土) 23:16:15class D {
public static void main(String[] args) {
System.out.println(A.INS.getB().getC().getA().toString());
}
}
としてもやはりjava.lang.NullPointerExceptionでした
0068デフォルトの名無しさん
2008/02/09(土) 23:21:02そりゃ無理だ
new A();
をやってる途中にB.INSが必要で、
B.INS = new B();
には C.INS が必要で、
C.INS = new C();
の中では A.INS が必要だがまだ new A() やってる途中なので A.INS は代入されてないから null
0069デフォルトの名無しさん
2008/02/09(土) 23:40:00単に循環参照
コレだけみると設計再検討だが、なんか理由があるとして…
ま、getAやらの部分で、a を遅延初期化すれば問題ない。
if (a == null) { a = A.INS; } return a;
仮にマルチスレッドでまわしても、A.INS は確定した後で、常に一つだから
null チェックで二度三度上書きしたところで得られる値は変わりはしない。
0070デフォルトの名無しさん
2008/02/09(土) 23:42:19なるほどエラーが発生する原因は分かりました
>>69
ありがとうございます
staticフィールドにインスタンスを作るシングルトンという事で気軽に使いすぎてました。反省
0071デフォルトの名無しさん
2008/02/09(土) 23:45:35StringBuffer使えってのはなしで。
0072デフォルトの名無しさん
2008/02/09(土) 23:47:50http://www.ibm.com/developerworks/jp/java/library/j-jtp02183/
0073デフォルトの名無しさん
2008/02/09(土) 23:54:04クラスは、インスタンス化によりオブジェクト(実体)となって
はじめて使用できると思うのですが、
main()を持つクラスは、コンパイルされた時点で
インスタンス化されるのでしょうか?
0074デフォルトの名無しさん
2008/02/09(土) 23:56:02staticメソッドとstaticフィールドはインスタンスではなくクラスに属するのでインスタンスがなくても使える
0075デフォルトの名無しさん
2008/02/10(日) 00:19:54コンストラクタ以外で data に値を設定するコードを書いてないのに発生するなら
コンストラクタが完了してない状態で呼んでんじゃねーのか。final 付けてないのに
その部分だけ出されてもどっかで設定してんじゃねーのとしか言えないが。
0076デフォルトの名無しさん
2008/02/10(日) 01:16:43早速のご回答ありがとうございます。
新しい考え方をゲットできました。
「インスタンスに属する」と「クラスに属する」
0077デフォルトの名無しさん
2008/02/10(日) 01:43:33s = "aa//a/aa"; から3を取得するものです。
0078デフォルトの名無しさん
2008/02/10(日) 01:52:430079デフォルトの名無しさん
2008/02/10(日) 02:20:26横着。先頭と尻尾に "/" を追加して確かめてください。
何にもマッチしないときは、長さ1の配列が返るので、負数にはならない、はず。
System.out.println(s.split("/", -1).length - 1);
// 一応、何が起きてるかを表示
System.out.println(java.util.Arrays.toString(s.split("/", -1)));
0080デフォルトの名無しさん
2008/02/10(日) 02:52:07int i = (int)s;
数値にするにはどうしたらよいですか?
0081デフォルトの名無しさん
2008/02/10(日) 02:54:37int i = Integer.parseInt(s) でおk
0082デフォルトの名無しさん
2008/02/10(日) 03:09:09一般的ですか?
0083デフォルトの名無しさん
2008/02/10(日) 03:12:370084デフォルトの名無しさん
2008/02/10(日) 03:53:37のページにあるプログラムを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:450086デフォルトの名無しさん
2008/02/10(日) 03:59:16このテストコードをマウスを使わずに
キーボードだけで素早く実行するにはどうしたらいいのでしょうか?
008784
2008/02/10(日) 04:07:18お返事ありがとうございます
外部jarの追加でしっかり追加したはずなんですが
できてなかったのですかね。。。
0088デフォルトの名無しさん
2008/02/10(日) 04:46:10OROが足りないんだろ。
追加しろ
0089デフォルトの名無しさん
2008/02/10(日) 05:11:250090デフォルトの名無しさん
2008/02/10(日) 06:37:26oro追加してみましたけどインポートされた org.apache.oro は一度も使用されていません。と出てしまいます。
コンパイルエラーの文章も依然変わりません...('A`)ウムム
0091デフォルトの名無しさん
2008/02/10(日) 08:33:24初心者向けということなのでNetbeansをインストールしましたが
使い方がさっぱり分かりません。
最初は普通のエディタの方が良いでしょうか?
0092デフォルトの名無しさん
2008/02/10(日) 10:49:56commons.logging パッケージのクラスが見つからないというエラー。
ということで、そやつを取ってきてパスに入れれば…進展があるはず
0093デフォルトの名無しさん
2008/02/10(日) 11:08:39JAVAから外部のアプリケーションに対して操作を行うにはどのようにすればよいでしょうか。
例えばWindows標準のメモ帳に対して文字列"abc"を入力する、といったものです。
よろしくお願いします。
0094デフォルトの名無しさん
2008/02/10(日) 11:15:450095デフォルトの名無しさん
2008/02/10(日) 11:18:270096デフォルトの名無しさん
2008/02/10(日) 11:25:42もっと上手い方法があるのかねぇ。
// 例外はうまく処理してちょ
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!! こんなクラスあったんだ。しかも1.4から標準で。知らんかった……。
0098デフォルトの名無しさん
2008/02/10(日) 11:30:51私は始めたばかりですが、もっとリファとか読まないといけませんね。
ありがとうございました。
0099デフォルトの名無しさん
2008/02/10(日) 13:28:12コールバックされるオブジェクトの参照を、する方に渡す。
メソッドのアドレスを渡すような考え方はしない。
コールバックされるクラスがいろいろあるなら、
目的のメソッドを定義した interface を作って、
それらのクラス全員に implements させる。
0100デフォルトの名無しさん
2008/02/10(日) 13:35:19あっているでしょうか?
0101デフォルトの名無しさん
2008/02/10(日) 13:37:44構造体のような使い方もできるがもっと色々できる。
PCはゲーム機の本体のようなものですか?のような質問。
0102デフォルトの名無しさん
2008/02/10(日) 13:42:270103デフォルトの名無しさん
2008/02/10(日) 14:50:59エラーが表示するライブラリを順に追加していったら動くようになりました!
ありがとうございます。
0104デフォルトの名無しさん
2008/02/10(日) 19:40:54Linuxコマンド(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();
}
}
}
0105104
2008/02/10(日) 19:57:29原因は、もしかすると、fileAとfileBの場所が遠かった(コマンドが長すぎた)せいだと思います。
ご迷惑をおかけしました。
0106デフォルトの名無しさん
2008/02/10(日) 20:34:380107デフォルトの名無しさん
2008/02/10(日) 21:16:060108デフォルトの名無しさん
2008/02/11(月) 01:05:222.0 とかの開発今どうなってんの?
0109デフォルトの名無しさん
2008/02/11(月) 01:22:170110デフォルトの名無しさん
2008/02/11(月) 01:32:180111デフォルトの名無しさん
2008/02/11(月) 02:08:30かね出さずに?
0112デフォルトの名無しさん
2008/02/11(月) 09:40:34windows vista
0113デフォルトの名無しさん
2008/02/11(月) 10:18:26windows vista
0114デフォルトの名無しさん
2008/02/11(月) 10:25:580115デフォルトの名無しさん
2008/02/11(月) 11:59:33仕様的に。
0116デフォルトの名無しさん
2008/02/11(月) 13:21:470117デフォルトの名無しさん
2008/02/11(月) 14:02:08プラシーボで良ければ、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ありがとうございます!
今からちょっと用事があるので帰ってきてから実装してみたいと思います。
0119デフォルトの名無しさん
2008/02/11(月) 15:03:200120デフォルトの名無しさん
2008/02/11(月) 15:05:47Calendar.SUNDAY == 1
Calendar.MONDAY == 2
(略)
Calendar.SATURDAY == 7
みたいですが、これを前提にコード書いたらやっぱまずいですか?
SUNDAYからMONDAYまでがこの順に連続した整数であることも
全く保証されて……ないんですよね、やっぱり。
SUNDAY→0, MONDAY→1, ..., SATURDAY→6 を得たいんですけど、
いちいち走査するしかないのかなあ。
0121デフォルトの名無しさん
2008/02/11(月) 15:05:51s.equals("a")にするための?の部分を教えてください。
0122デフォルトの名無しさん
2008/02/11(月) 15:09:44どの環境でも使えるフォント名ってことなら"Serif"、"SansSerif"、"Monospaced"、"Dialog"、"DialogInput"
0123デフォルトの名無しさん
2008/02/11(月) 15:13:23Character.toString( (char)97 )
0124デフォルトの名無しさん
2008/02/11(月) 15:16:57作法としてまずいかどうかは知らないが
将来バージョンアップで値が変わったりとかはしないはずなので大丈夫かと
(そんなことしたら既存のプログラムが動かなくなるし)
0125デフォルトの名無しさん
2008/02/11(月) 15:39:470126デフォルトの名無しさん
2008/02/11(月) 16:52:34JNIで呼び出すCのライブラリの中でファイルを参照するのですが、
ファイルの読み込みは一度だけにして常にメモリ中に展開しておき、
2度目以降は読み込み処理をやらなくてすむようにはできるでしょうか?
0127デフォルトの名無しさん
2008/02/11(月) 17:34:06APIドキュメントで対応する数値が明記されていない以上、
変更されて機能しなくなる可能性がないとはいえないが、
まあたぶん変えられることはなさそうだし前提にしてもいいんじゃないかな。
Calendar.SUNDAYとかはpublic static final intで宣言された定数なので、
使用側のコードに直接値が埋め込まれるため、
変更されるような事態になったら全部コンパイルし直しになるので。
0128デフォルトの名無しさん
2008/02/11(月) 18:05:38okwaveとのマルチか
0129デフォルトの名無しさん
2008/02/11(月) 18:17:05どこかがつぶれてもいいような分散技術を使った高度な質問技。
しかし技を使ったことがバレると回答されにくくなる諸刃の剣。
0130デフォルトの名無しさん
2008/02/11(月) 19:02:290131デフォルトの名無しさん
2008/02/11(月) 20:29:06必要が無ければやるべきではない印象を持つが、必要として考えると…
定数の値は公開されて確認ができるので、クラスの使用条件を
「Calendar.SUNDAY から Calendar.SATURDAY が連続した整数値を取ること」
としていれば、Java のバージョンが変わったときも、それを確認するだけで使えると思う。
もしくは、static の初期化子などでそれらが連続することを確認し、
そうでは無い場合には何らかの処置をする、とか
0132120
2008/02/11(月) 22:28:27書いた直後に出かけていて返事が書けませんでした、ごめんなさい。
>>124
いくら public とはいえ、SUNDAY と "1" という値とは本来何の繋がりもない、
Calendar クラスの中だけの約束事でしかないので、
定数をこういう風に使っていいのかなぁという疑問がずっと消えなくて。
>>127
やっぱり明記はされてないんですよね。
ただ、「使用側のコードに直接埋め込まれる」には思わず手を打ちました。
定数が変わるときにはどのみちコンパイルし直しになるんだから
そのときにチェックが入るだろう、という考え方ですね。
建国記念の日とか春分とかの「日本の休日」を扱うクラスは
(どうせあと数十年中に休日が増減するから)とりあえず21世紀中だけ
使えることにしておけばいいよ、ってのと似たような話でしょうか。
ちょっと違うかもですが。
>>131
その発想はなかったっ。
どうせ将来にわたっても定数が変更されることはないだろうけど、
もし万が一……というところで悩んでいたので、
その注意書きを選ぶことにします。
お三方ともありがとうございました。
0133デフォルトの名無しさん
2008/02/11(月) 23:03:36>建国記念の日とか春分とかの「日本の休日」を扱うクラスは・・・
祝日ってDBかファイル持ちだち思うんだ
0134デフォルトの名無しさん
2008/02/11(月) 23:06:09それなら自分でMap持てば済む話じゃないの?
0135デフォルトの名無しさん
2008/02/12(火) 00:59:23String 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ほげを考えるページ
ttp://kmaebashi.com/programmer/hoge.html
0139デフォルトの名無しさん
2008/02/12(火) 01:34:19テレビのイの字と同じようなものだよ
0140デフォルトの名無しさん
2008/02/12(火) 01:44:56送信先をXMLデータベースから抜き出してループさせたいのですが,
internetaddressクラスの配列使用の場合と
SAXとの組み合わせ方が今ひとつわかりませんのでどなたか解説お願いします。
0141デフォルトの名無しさん
2008/02/12(火) 02:19:43つまり、名前をつけるのが面倒なときにつけるんですね?
ありがとうございました
0142デフォルトの名無しさん
2008/02/12(火) 03:48:51javaプログラムから新たなテキストファイルを作成するにはどうすればいいのでしょうか?
ファイル作成のためのクラスとかありますか?
0143デフォルトの名無しさん
2008/02/12(火) 03:50:550144142
2008/02/12(火) 04:19:25FileWriterで書き込んだりReaderで読み込んだりすることは出来るのですが、ファイルを作成することが出来ないんです。
具体的には、絶対パスではなく自分より二つ上の階層に新しいテキストファイルを作成したいのですが、
ネットで調べてもファイルへの読み書きの仕方しか出てきません。
0145デフォルトの名無しさん
2008/02/12(火) 04:25:32例外が発生するって言うならその例外の意味を調べろ。
0147デフォルトの名無しさん
2008/02/12(火) 09:41:05getterですよ
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それアプレットじゃないじゃん
普通に java MenuFrame2 で起動してみ
0150デフォルトの名無しさん
2008/02/12(火) 14:21:45とりあえずIP抜かせてもらいました(^^v
0151デフォルトの名無しさん
2008/02/12(火) 14:23:37小さいかまくらを作った。入れなかった。
アプレットだと思ってた俺がバカでした。回答thx。
■ このスレッドは過去ログ倉庫に格納されています