【初心者】Java質問・相談スレッド112【大歓迎】
プログラミング言語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 あたりで。
ダウンロードできてインターネットに繋がって無くても読める javaの入門書のようなものありませんか?
テンプレのリンクを探せばどこかにあると思ったよ。 動画で見るJava入門、みたいなのを。 どこかの大学のサイト
6 :
デフォルトの名無しさん :2008/02/08(金) 23:30:09
staticって何ですか? クラスをオブジェクトするときに使いやすいだけ?
>>6 newしなくても呼び出せるメソッドみたいな感じ?
9 :
デフォルトの名無しさん :2008/02/09(土) 00:29:00
charAt()でバイナリ取得はできました。 以下の2つは分かりませんでした。 System.out.println(String.codePointAt((int)s.charAt(0))); System.out.println(s.getBytes(s.charAt(0)));
codePointAtは1.5系みたいなのであきらめました。
JDKをインストールしたいのですが、ダウンロードするページで Windows x64 executable jdk-6u4-windows-x64.exe 38.88 MB Windows Online Installation jdk-6u4-windows-i586-p-iftw.exe 0.36 MB Windows Offline Installation jdk-6u4-windows-i586-p.exe 71.28 MB のように3つ選択肢があるんですが何が違うのでしょうか? 2番目はインストーラーをダウンロードせずにネットから直接インストール? 3番目はインストーラーをダウンロード?ってことですかね 1番上は何でしょうか…
getBytes("ASCII")ですか。そのままでしたね。
13 :
デフォルトの名無しさん :2008/02/09(土) 01:22:25
javaで自分のパソコンのグローバルIPとホスト名って取得できますか? またどのような関数を使えばいいのかわかりません>< ググってみるとjava以外ではいろいろ書いてあるのに、javaになるとヒットしないので。。 よろしくおねがいします!
InetAddress.getAllByName(InetAddress.getLocalHost()); とか何とか
やっべー、 InetAddress.getLocalHost().getAllByName()
16 :
デフォルトの名無しさん :2008/02/09(土) 01:38:46
>>15 ありがとうございます!!
無事できましたー!
17 :
デフォルトの名無しさん :2008/02/09(土) 08:30:29
昨日は勝手にjavaのアップデートが勝手にダウンロードされました 調べてもプログラミング言語がウンヌンで、javaとは何なのか必要なのかわかりません PCでインターネットや、画像や動画視聴しかしない僕には必要なのかどうか教えてください
>>11 1番上のは64ビットWindows用
2番目と3番目は32ビットWindows用
オンラインインストールはインストーラの皮だけ、実際にインストール開始したときに必要な中身を都度ダウンロードしてくる
オフラインインストールは中身全部込みのインストーラ、インストール時にネット接続不要
どっちでも好きなほうをどうぞ
20 :
17 :2008/02/09(土) 12:31:56
質問です。参考書などでは【2つほど】変数の型(intやchar)などとは別に stringの解説がされています 認識として両方変数の型でchar=1文字変数 string=文字列と理解しているんですが、理解が間違っているんでしょうか?
stringは無いがStringなら有る 大文字小文字の区別は重要 charは1文字、Stringは文字列、ってのは合ってる
文字変数でなく、文字な。 Stringは文字列。 String str = "a"; char c = 'a'; 人間にとっては同じだけど、プログラム上は違うので注意。
>>22 >>23 ありがとう、つまり同じような認識で使ってもいいわけですね。
もう一つ聞きたいのですが
class a1{
public static void main(String args[]){
if(args.length>=1) 〜以下命令文
〜以下略
上のプログラムのargs.length ここの部分がいまいちよくわからないのですが、
argsはただの配列なのにクラス名の部分に書かれています。
length関数が特殊なんでしょうか?それともargsがクラス名?
お願いします
>>24 lengthは配列オブジェクトのフィールド
argsオブジェクトのlengthフィールドが1以上かどうかを判定している
ってかクラス名の部分ってなんだよ
>>24 この場合、args は配列型の変数で、length は、配列型の public final なフィールド。
激しくすれ違いだが 「バカでも使えるように」 を仕様書で伝えるときどう表現してる?
フールプルーフ
>>26 >>27 ありがとう
インスタンス化したメソッド.メソッド名();
の形式だと理解していた。
よくわからないから読み返してきます。
フューエルセーフか?ちとちがうかw 前のユーザーはバカよけいれといてねとか言ってたけどw
Stringは文字列の変数と考えていいんですよね 変数名.メソッド; でも問題ないんですか?
スレ移ります すみませんでした
>>32 問題って何がだ
何がわからんのかわからん
スレのレベルが低下してる 住人も然り プログラマって10聞いて1しか返ってこないやついるから困る 出世できないのもよくわかるよな
まるで昔はレベルが高かったような言い草だが。
1聞いて10理解すれば問題なし
理系の人間はみんなそうだ 特にプログラマは酷いなwww 何年もがんばった自分の知識を基準にして話し出す 文系の女の子が可哀相だ
スイーツ板?でどうぞw
女の子なら何時間でもかけて親切丁寧に教えてあげるよ! 野郎どもは死ぬ気でがんばれ
普段、コンストラクタの引数が要らない場合はコンストラクタを省略してフィールド宣言時に初期化してるのですが、 フィードル初期化は宣言時にするのとコンストラクタ内でするのとでは、タイミングなどの違いがあるそうですが どんな感じで使い分けるものなんでしょうか?
タイミング違ったっけ? フィールド宣言時に初期化するコードを逆コンパイルしてみ。 スーパークラスのコンストラクタが終了した後に初期化するのと変わらない。
一緒 フィールドの初期化のコードはバイトコードレベルで見るとコンストラクタの中に入っている 見た目とか気分の問題
47 :
44 :2008/02/09(土) 17:19:47
一緒ですか!ならば宣言時にやるほうが簡潔ですね。 どうもありがとうございました。
private static *** instance = new ***(); public static *** getInstance(){return instance;} private $$$ data; public ***(){data = $$$.getInstance()} public $$$ get$$$(){return data;} $$$も同様にシングルトン と言う感じで、シングルトンのフィールドにコンストラクタで シングルトンを植え付ける連鎖を何回か行うと get$$$()でnullが返ることがあります。何故なんでしょうか? クラスが参照されると同時にinstanceにインスタンスが入るはずなのに… public get$$$(){return $$$.getInstance();} だとそう言う事は起こりません
49 :
48 :2008/02/09(土) 18:27:16
済みません間違えました。 コンストラクタはprivateです private ***(){data = $$$.getInstance()}
50 :
デフォルトの名無しさん :2008/02/09(土) 18:33:14
質問です UMLより機能的なツールなんか使ってますか 参考までにお願いします
一番自由度が高くて表現力のあるツールは 紙とペンかな・・・・ 自由度が高いので使い手の能力に左右されがちだがな。
52 :
デフォルトの名無しさん :2008/02/09(土) 19:27:12
連想配列で、キーと値を交互に配列に入れる簡単な方法はありますか? ソースのa,b,c,d,e,f(文字列)からAという配列を作りたいです。 A[a] == b A[c] == d A[E] == f
HashMap でも使え
main関数の実行時に与える引数についてですが、 1種類のString配列では表せない情報を与えたい時はどうすればいいのでしょうか? 例えば、複数の文字列とオプションを実行時に指定させたい場合、 プログラム側では文字列とオプションの区別が付けられません。
>>54 順番で区別するとか、
先頭に '-' や '@' や '/' がついてたらオプションとか、
文字列は "文字列" みたいに引用符で括るとか、
やり方はいろいろある。好きな方法を使え。
その引用符の使い方だとシェルに取り払われるような。
javac ?で参考になるべ argsをパースするのは自力で作る
58 :
デフォルトの名無しさん :2008/02/09(土) 20:25:24
HashMap の方は同期がとられず、というのは簡単に言うとどういう意味ですか? HashMap はJDK1.2に対応していますか?
>>58 HashMap が同期(synchronized)されない、というのは、簡単に言うと、
複数のスレッドから同時にアクセスすると壊れるよ、という意味です
61 :
デフォルトの名無しさん :2008/02/09(土) 22:30:36
>>51 ありがとう
でも一挙動でコーディングできれば最適なんですがねえ
>>48 なんだろうねぇ。
とりあえず、遅延初期化をする必要が無ければ、instance を
public static final *** INSTANCE にするのはどうだろう。
Java SE Development Kit 6 Update 3をとろうと思うのですが無料なんですか?
>>50 UML は確かに機能的な面も強調される表記法でもあると思うが、
そもそもの目的は、数ある表記法を名の通り"統一"したものだしなぁ
>>62 ありがとうございます。やってみましたがダメでした
うまくいかないソースを削ってサンプルを作ってみました
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;}
}
字数の関係でAに便宜的にmainを載せましたが class D { public static void main(String[] args) { System.out.println(A.INS.getB().getC().getA().toString()); } } としてもやはりjava.lang.NullPointerExceptionでした
>>66 そりゃ無理だ
new A();
をやってる途中にB.INSが必要で、
B.INS = new B();
には C.INS が必要で、
C.INS = new C();
の中では A.INS が必要だがまだ new A() やってる途中なので A.INS は代入されてないから null
>>66 単に循環参照
コレだけみると設計再検討だが、なんか理由があるとして…
ま、getAやらの部分で、a を遅延初期化すれば問題ない。
if (a == null) { a = A.INS; } return a;
仮にマルチスレッドでまわしても、A.INS は確定した後で、常に一つだから
null チェックで二度三度上書きしたところで得られる値は変わりはしない。
>>68 なるほどエラーが発生する原因は分かりました
>>69 ありがとうございます
staticフィールドにインスタンスを作るシングルトンという事で気軽に使いすぎてました。反省
先生!Stringがfinalであるヌリットを教えてください!! StringBuffer使えってのはなしで。
すいません、エロい人教えてください。。。 クラスは、インスタンス化によりオブジェクト(実体)となって はじめて使用できると思うのですが、 main()を持つクラスは、コンパイルされた時点で インスタンス化されるのでしょうか?
>>73 staticメソッドとstaticフィールドはインスタンスではなくクラスに属するのでインスタンスがなくても使える
>>48 コンストラクタ以外で data に値を設定するコードを書いてないのに発生するなら
コンストラクタが完了してない状態で呼んでんじゃねーのか。final 付けてないのに
その部分だけ出されてもどっかで設定してんじゃねーのとしか言えないが。
>>74 早速のご回答ありがとうございます。
新しい考え方をゲットできました。
「インスタンスに属する」と「クラスに属する」
Stringの中のスラッシュの数を計算するメソッドのサンプルをください。 s = "aa//a/aa"; から3を取得するものです。
文字列を最初から調べていって"/"と一致した時にint変数をインクリメントすればいいだけじゃないの
>>77 横着。先頭と尻尾に "/" を追加して確かめてください。
何にもマッチしないときは、長さ1の配列が返るので、負数にはならない、はず。
System.out.println(s.split("/", -1).length - 1);
// 一応、何が起きてるかを表示
System.out.println(java.util.Arrays.toString(s.split("/", -1)));
80 :
デフォルトの名無しさん :2008/02/10(日) 02:52:07
String s = "123"; int i = (int)s; 数値にするにはどうしたらよいですか?
>>80 int i = Integer.parseInt(s) でおk
82 :
デフォルトの名無しさん :2008/02/10(日) 03:09:09
Javaでコールバック処理を行いたいんですが、どうするのが 一般的ですか?
84 :
デフォルトの名無しさん :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素人なので全然わかりません。。。よろしくおねがいします!
85 :
デフォルトの名無しさん :2008/02/10(日) 03:54:45
JARをパスに追加しろ
86 :
デフォルトの名無しさん :2008/02/10(日) 03:59:16
eclipse3.3で初めてJUnit(4)のテストコードを書いています。 このテストコードをマウスを使わずに キーボードだけで素早く実行するにはどうしたらいいのでしょうか?
87 :
84 :2008/02/10(日) 04:07:18
>>85 お返事ありがとうございます
外部jarの追加でしっかり追加したはずなんですが
できてなかったのですかね。。。
89 :
デフォルトの名無しさん :2008/02/10(日) 05:11:25
↑俺なんてかっこいいんだと思ってるwww
90 :
デフォルトの名無しさん :2008/02/10(日) 06:37:26
>>88 oro追加してみましたけどインポートされた org.apache.oro は一度も使用されていません。と出てしまいます。
コンパイルエラーの文章も依然変わりません...('A`)ウムム
91 :
デフォルトの名無しさん :2008/02/10(日) 08:33:24
Javaをググッてみました 初心者向けということなのでNetbeansをインストールしましたが 使い方がさっぱり分かりません。 最初は普通のエディタの方が良いでしょうか?
>>84 commons.logging パッケージのクラスが見つからないというエラー。
ということで、そやつを取ってきてパスに入れれば…進展があるはず
質問です。 JAVAから外部のアプリケーションに対して操作を行うにはどのようにすればよいでしょうか。 例えばWindows標準のメモ帳に対して文字列"abc"を入力する、といったものです。 よろしくお願いします。
Robot
あるいは SWT の非公開 API
>>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);
>>94 !! こんなクラスあったんだ。しかも1.4から標準で。知らんかった……。
Robotなんて名前がそのまんまなクラスがあるとは・・・。 私は始めたばかりですが、もっとリファとか読まないといけませんね。 ありがとうございました。
>>82 コールバックされるオブジェクトの参照を、する方に渡す。
メソッドのアドレスを渡すような考え方はしない。
コールバックされるクラスがいろいろあるなら、
目的のメソッドを定義した interface を作って、
それらのクラス全員に implements させる。
100 :
デフォルトの名無しさん :2008/02/10(日) 13:35:19
クラスは,C言語における構造体の配列みたいだと思ったのですが、 あっているでしょうか?
たぶん間違い。 構造体のような使い方もできるがもっと色々できる。 PCはゲーム機の本体のようなものですか?のような質問。
何で配列?
103 :
デフォルトの名無しさん :2008/02/10(日) 14:50:59
>>92 エラーが表示するライブラリを順に追加していったら動くようになりました!
ありがとうございます。
こんばんは。質問よろしいですか。 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(); } } }
105 :
104 :2008/02/10(日) 19:57:29
申し訳ありません。自己解決しました。 原因は、もしかすると、fileAとfileBの場所が遠かった(コマンドが長すぎた)せいだと思います。 ご迷惑をおかけしました。
アニキ、Ant から起動したら XML パースが使えなくなりやしたぜ。どうしやしょう。
放置しとけ
Log4j って作者抜けてから開発停滞してね? J2SE 5.0 に対応させるとか言ってた 2.0 とかの開発今どうなってんの?
log4jメーリングリストのアーカイブ嫁
このスレ並の質問ばっかで開発状況の話なんて全然ねーじゃん。
111 :
デフォルトの名無しさん :2008/02/11(月) 02:08:30
秘密の漏えいを期待してるのか? かね出さずに?
Javaをアンインストールしたらどうなりますか? windows vista
削除されます windows vista
Javaをアンインストールても、windows vistaは正常に作動しますか?
SOAPってスレッド使ってもいいの? 仕様的に。
116 :
デフォルトの名無しさん :2008/02/11(月) 13:21:47
プログラムを実行するごとにint型の変数の値を1ずつインクリメントするのってどうやったらできるんですか〜−−;
118 :
デフォルトの名無しさん :2008/02/11(月) 14:09:32
>>117 ありがとうございます!
今からちょっと用事があるので帰ってきてから実装してみたいと思います。
119 :
デフォルトの名無しさん :2008/02/11(月) 15:03:20
必ず表示されるフォントってありますか?
120 :
デフォルトの名無しさん :2008/02/11(月) 15:05:47
今のところ Calendar.SUNDAY == 1 Calendar.MONDAY == 2 (略) Calendar.SATURDAY == 7 みたいですが、これを前提にコード書いたらやっぱまずいですか? SUNDAYからMONDAYまでがこの順に連続した整数であることも 全く保証されて……ないんですよね、やっぱり。 SUNDAY→0, MONDAY→1, ..., SATURDAY→6 を得たいんですけど、 いちいち走査するしかないのかなあ。
121 :
デフォルトの名無しさん :2008/02/11(月) 15:05:51
String s = ?(97); s.equals("a")にするための?の部分を教えてください。
>>119 どの環境でも使えるフォント名ってことなら"Serif"、"SansSerif"、"Monospaced"、"Dialog"、"DialogInput"
>>121 Character.toString( (char)97 )
>>120 作法としてまずいかどうかは知らないが
将来バージョンアップで値が変わったりとかはしないはずなので大丈夫かと
(そんなことしたら既存のプログラムが動かなくなるし)
qa3765663
質問です。 JNIで呼び出すCのライブラリの中でファイルを参照するのですが、 ファイルの読み込みは一度だけにして常にメモリ中に展開しておき、 2度目以降は読み込み処理をやらなくてすむようにはできるでしょうか?
>>120 APIドキュメントで対応する数値が明記されていない以上、
変更されて機能しなくなる可能性がないとはいえないが、
まあたぶん変えられることはなさそうだし前提にしてもいいんじゃないかな。
Calendar.SUNDAYとかはpublic static final intで宣言された定数なので、
使用側のコードに直接値が埋め込まれるため、
変更されるような事態になったら全部コンパイルし直しになるので。
>>128 どこかがつぶれてもいいような分散技術を使った高度な質問技。
しかし技を使ったことがバレると回答されにくくなる諸刃の剣。
ただのクロスポストだろ。なにが高度なんだ
>>120 必要が無ければやるべきではない印象を持つが、必要として考えると…
定数の値は公開されて確認ができるので、クラスの使用条件を
「Calendar.SUNDAY から Calendar.SATURDAY が連続した整数値を取ること」
としていれば、Java のバージョンが変わったときも、それを確認するだけで使えると思う。
もしくは、static の初期化子などでそれらが連続することを確認し、
そうでは無い場合には何らかの処置をする、とか
132 :
120 :2008/02/11(月) 22:28:27
レスありがとうございました。
書いた直後に出かけていて返事が書けませんでした、ごめんなさい。
>>124 いくら public とはいえ、SUNDAY と "1" という値とは本来何の繋がりもない、
Calendar クラスの中だけの約束事でしかないので、
定数をこういう風に使っていいのかなぁという疑問がずっと消えなくて。
>>127 やっぱり明記はされてないんですよね。
ただ、「使用側のコードに直接埋め込まれる」には思わず手を打ちました。
定数が変わるときにはどのみちコンパイルし直しになるんだから
そのときにチェックが入るだろう、という考え方ですね。
建国記念の日とか春分とかの「日本の休日」を扱うクラスは
(どうせあと数十年中に休日が増減するから)とりあえず21世紀中だけ
使えることにしておけばいいよ、ってのと似たような話でしょうか。
ちょっと違うかもですが。
>>131 その発想はなかったっ。
どうせ将来にわたっても定数が変更されることはないだろうけど、
もし万が一……というところで悩んでいたので、
その注意書きを選ぶことにします。
お三方ともありがとうございました。
>>132 >建国記念の日とか春分とかの「日本の休日」を扱うクラスは・・・
祝日ってDBかファイル持ちだち思うんだ
>>132 それなら自分でMap持てば済む話じゃないの?
135 :
デフォルトの名無しさん :2008/02/12(火) 00:59:23
JavaBeansの仕様で質問です。 String a_1 = null; というフィールドがあった場合、仕様として正しい geterは getA_1なのでしょうか?
逆に考えるんだ 「get,set,isに続くものをプロパティ名とする」と フィールド名は関係ない
質問です。 クラス名や変数名に「hoge」という文字が頻繁に使われていますが、 なぜ「hoge」なんですか?
そんなググれば出てくるような質問を テレビのイの字と同じようなものだよ
140 :
デフォルトの名無しさん :2008/02/12(火) 01:44:56
javamailを使ってメールの複数送信をしようと思います。 送信先をXMLデータベースから抜き出してループさせたいのですが, internetaddressクラスの配列使用の場合と SAXとの組み合わせ方が今ひとつわかりませんのでどなたか解説お願いします。
>>138 つまり、名前をつけるのが面倒なときにつけるんですね?
ありがとうございました
初歩的なことなんですが、 javaプログラムから新たなテキストファイルを作成するにはどうすればいいのでしょうか? ファイル作成のためのクラスとかありますか?
FileWriter
144 :
142 :2008/02/12(火) 04:19:25
>>143 FileWriterで書き込んだりReaderで読み込んだりすることは出来るのですが、ファイルを作成することが出来ないんです。
具体的には、絶対パスではなく自分より二つ上の階層に新しいテキストファイルを作成したいのですが、
ネットで調べてもファイルへの読み書きの仕方しか出てきません。
作成したいファイル名で new FileWriter("../../hoge.txt") すれば勝手にできる。 例外が発生するって言うならその例外の意味を調べろ。
146 :
142 :2008/02/12(火) 06:47:29
>>145 FileWriterで作成までしてくれるとは知りませんでした。
ありがとうございました。
>>148 それアプレットじゃないじゃん
普通に java MenuFrame2 で起動してみ
そうなんですか。 とりあえずIP抜かせてもらいました(^^v
穴があったら入りたいと思ったが穴が無かったので 小さいかまくらを作った。入れなかった。 アプレットだと思ってた俺がバカでした。回答thx。
152 :
デフォルトの名無しさん :2008/02/12(火) 14:53:19
tes01/tes02/tes03/sample.class という階層があって、 sample.classには、package tes03; の宣言がされています。 コマンドプロンプトから実行するとき、 tes02ディレクトリからでは java tes03/sample で実行出来るのですが、 tes01ディレクトリとtes03ディレクトリから実行出来ません。 例えばtes01ディレクトリから、java tes02/tes03/sample としてもエラーが出ます。 どうすればいいのでしょうか
>>153 つjava -cp test02 test03/sample
155 :
153 :2008/02/12(火) 17:17:22
>>154 ありがとうございます!無事実行できました。
JDBCでテーブル一覧を取得したいんですが、 どうやったらいいのでしょうか?
Connection#getDatabaseMetaData()
JNI で質問なんですけど、C/C++ から呼んだ Java のメソッドで new で確保したオブジェクト 返した場合、JNI でそのオブジェクト参照してても GC の対象になるよね? public byte[] foo(){ new byte[1024]; } jobject value = env->CallObjectMethod(clazz, method);
>>158 ネイティブメソッドから返るまでは掴んだまま
返れば GC の対象になる
明示的に放したい場合は DeleteLocalRef を呼ぶ
おまいら親切過ぎる 職場の上司もこんな優しく教えてくれたらなぁー
Threadのrunメソッドに引数を渡すことは出来ないんでしょうか? スレッドを複数作成してそれぞれのスレッドに異なる情報を渡して違った処理を実行させたいのですが。
メンバ変数に持たせときゃいいじゃん
>>159 そうなんですか。Java VM が参照見失うかと思ったんですがそうではないんですね。
ひょっとして env->NewByteArray() とかもちょあんt
お前のほうが色々見失っているよ
「うまいこと言った!」 そう考える 164 であった。
馬鹿っぽい質問だけど インスタンス変数はよくprivateにするのに クラス変数はどうしてpublicばっかなの? private static 〜 なんてのはあまり見ない気がする
スコープについて学べ
>>160 プロとしての自覚を持て
先輩の何十分の1程度の生産性しか出せないくせに
給料は同じくらいもらってんだろ?
普通後輩の方が安いはずなんだが
何十分の1なのか?w
先輩になっても給料変わらん会社にお勤めなんじゃないのか。
>>169 おまいも経験積んだら、高い生産性出せるようになるさ
今できない香具師はずっとできない希ガス
>>169 は管理職で残業代出る後輩のが手取りは多い、とか。
>>175 それはありそうだな
生産性が低ければそれだけ残業するしな
30過ぎて月給25万の俺を慰めてくれよ
愚痴るならマ板池
25万ももらえば十分だろ 贅沢言ってんじゃねえよカス
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です
いやだ。
>>180 エラーどこ、main どこ。クラスの先頭は大文字で。
eclipse ならエラーの対処方法も出るでしょうに。
>>180 問題点の候補はコンパイラが見つけて教えてくれてるだろ
エラーメッセージを読んで理解しろ
reader = new BufferedReader(new FileReader("./hoge")); で実行ファイルと同じディレクトリのファイルを読み込むGUIアプリを作っているのですが、 実行ファイルが置いてあるディレクトリとは別のディレクトリのファイル(例えばデスクトップ)を引数に そのアプリを立ち上げると カレントディレクトリが C:\Program Files\Common Files\System\MAPI\1041\nt\ と、よくわからないディレクトリになります。 何ででしょうか? 改善するためには、実行ファイルが置いてあるディレクトリを基点に ファイルを読み込むようにすればいいと思うのですが そのディレクトリを取得する方法がわかりません。 どうすればよいでしょうか?
そんな方法はない。 固定ファイルならリソース使え。設定ファイルなら Preferences 使え。
java.class.pathをとって、自分で探索していけば分かるかもしれない。
>>180 さらっと見ただけだが、
>ComServer() init();
こんな構文ないだろう
>>180 コンパイル出来ないのはバグじゃない。
なんでもバグで片付けようとするなよ馬鹿。
>>184 Mainクラスにmain()があるとして、
URL url = (new Main()).getClass().getResource("Main.class");
String dir = url.toString();
みたいなかんじでどう?
jarから起動のときはそこからちょっと処理しないといけないけど
190 :
デフォルトの名無しさん :2008/02/13(水) 12:27:21
Graphicsを画像保存したいのですが GraphicsオブジェクトからImageオブジェクトに変換できますか?
>>190 BufferedImageに描画するようにして、それを保存したらどうよ?
>>190 BufferedImage image = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
好きなように g に描く
g.dispose();
image げっと!
明解Javaとかいう本、糞すぎる 前半はいいとして後半がめちゃくちゃ 結城さんのプログラミングレッスンのほうがはるかに信頼できるわ
悪かったな。じゃあおまえが書けよ。
例外オブジェクトって何ですか
明解Javaって糞本なのか? 持ってないから解らんがw
Java SE なんてどの本も同じだろw つーかネットの連載とかで十分だし 本を糞と評価する奴が頭悪いだけって方が多いよな
TeX で組んでない技術本は総じて糞。
オライリは頑張って買ったw 英語版はつらいから日本語版待ってOrz..
いみふ
oh jesus my jesus I pleded my heart
>>197 おまえ生意気だな
口の利き方に気をつけろよ
誰に話してると思ってんだ?
知らぬが仏とはいうがたいがいにしとけよ
203 :
デフォルトの名無しさん :2008/02/14(木) 01:40:52
byte[] b; int i; //DoJa5.1がコンパイルエラー try { byte[] b = new byte[1000]; i = b.length; } catch(Exception e) { System.out.println("" + i + e); } //DoJa5.1がコンパイル成功 try { byte[] b = new byte[1000]; i = b.length; i = 5; //なぜこれを書くとコンパイルが成功するんですか? } catch(Exception e) { System.out.println("" + i + e); }
て言うかそもそも b を二回定義してるのがおかしい気が…
>>195 検索で大体意味はつかめると思うのだが…
まぁ、言語規定によると「オブジェクトは、クラスのインスタンス又は配列」とある。
当てはめると、「例外クラスのインスタンス又は例外配列」ということになる。
そもそも、オブジェクトを配列の意味で使ってる文は少ないし、
例外は配列としないことが普通だろう。として限定すると、前者の意だろう。
>>203 エラー詳細も張らずに質問とな?
>>203 try節の中でbを二重定義しているのはおいておいて、
i=5;をそこに書いてもコンパイルに成功しない気が。
上が失敗するのはi=b.length;を評価する前に例外が発生して、
catch節に飛んでしまう可能性があるから、
その場合はiが初期化されていないのでコンパイルエラーを起こす。
int i;の段階でint i=0;とかで初期化すればエラーは出ないはず。
動作として正しいかどうかは別として。
そっちかよw でもiの未初期化でもエラーが起こらなかった?
209 :
◆xkgLgN/H4. :2008/02/14(木) 10:24:06
Sun認定Javaプログラマの試験対策問題集で納得できない部分があったので 質問させてください。 ---------- 問:アサーションの使用方法として適切なものを選びなさい。 【A】 public void method(int data) { assert data < 0: "dataが負数"; } 【B】文法間違いなので割愛 【C】 public void method(int data) { assert check(data): "checkメソッドがfalseを返した"; } private boolean check(int data) { if (data < 0) {return false;} return true; } 続く...
...続き 【D】 public void method(int data) { boolean checked = check(data); assert checked: "checkメソッドがfalseを返した" } private boolean check(int data) { if (data < 0) {return false;} return true; } 正解は【D】なのですが、その解説が 【A】publicなメソッドの引数チェックをアサーションで行うのは不適切 【C】デバッグ時のみ使用し本番では使用しなくなるアサーションで メソッドの呼び出しを行うのは不適切 【D】内容は【C】と同じだが、メソッドの戻り値を変数へ格納し、その変数を アサーションでチェックしているので適切 というものでした。 【C】も【D】も「publicなメソッドの引数チェックをアサーションで行うのは不適切」に 該当する感じがして納得できないのですが、どう考えるべきですか? また、【C】の解説が言わんとすることは、 アサーション有効時と無効時で呼び出されるメソッドが違う等の条件の違いがあっては デバッグ作業として良くない ということでOKですか? よろしくお願いします。
訂正 【D】のassert行の末尾にセミコロンが抜けてました。 本来はセミコロンは付いています。
Eclipseで製作したプロジェクトをjarファイルにエクスポートする際、 ImgaIconに使った画像や、プラグインとして使用したjarファイルが 含まれずに生成されてしまいます。どうすればよいでしょうか?
>>210 しょせん試験なんてそんなもの。
問題作ったやつがアホだったんだろう。
215 :
デフォルトの名無しさん :2008/02/14(木) 10:54:40
long a,b; aとbを比較したいのですが、a<bではダメなのですか??
>>212 jarにエクスポートするとき、含めるファイルと含めないファイルを選択できると思うが
含めたい画像ファイルやjarファイルにチェックマークを付ければいいんでないか
>>216 その際、srcフォルダの.javaにはチェックボックスが現れるのですが、
画像やプラグインには現れませんでした
別に設定すべき箇所があるのでしょうか?
219 :
デフォルトの名無しさん :2008/02/14(木) 11:00:32
>>217 それですると
Exception in thread "main" java.io.IOException: Bad file descriptor
でてくるんですけど・・・。
>>219 long値a,bの比較は a < b の形式で問題ない。
その周辺のコードが悪いんだろうよ。
>>219 longの比較でIOExceptionが出るわけないだろうと思うが・・・
スタックトレースは?
222 :
デフォルトの名無しさん :2008/02/14(木) 11:13:12
>>220 .221
すいません、正確には
RandomAccessFile bin1 = new RandomAccessFile(new File(FileName1),"r");
RandomAccessFile bin2 = new RandomAccessFile(new File(FileName2),"r");
if(bin1.length()>=bin2.length())
c=bin2.length();
if(bin1.length()<bin2.length())
c=bin1.length();
としており、long型のcに短い方のファイルサイズをいれたいのです。。
この部分に問題があるのは確かなのですが・・。
>>218 ビルドパスに入ってるjarファイルは出ないみたいだけど、画像はなんだろう・・?
ところで、jarにjarを含めても読み込めないよ
そういう場合はFatJarプラグインを使うといいかもしんない
224 :
デフォルトの名無しさん :2008/02/14(木) 12:01:55
jconsoleのリモート接続ができないのですがどんな理由が考えられますでしょうか? 接続対象の環境は Windows2003 Java HotSpot(TM) Server VM バージョン 10.0-b19 VM引数として -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false を設定しています。 接続元からportqryコマンドで8888がLISTENING状態になっているのは確認済みです。
>>209 CとDとの違いは、Assertionを有効にしない実行時にcheckメソッドが通るか否かという点は理解できているな?
これは試験用のサンプルだからわかりにくいけど、
int result = dao.update(entity);
assert result == 1;
というサンプルならばCはNGでDがOKと解るだろう。
わざわざcheckというメソッドで引数をチェックさせているのは意地悪な引っ掛けだね。
>>225 俺は、A を却下してる時点で、C や D も却下されるべきだと思うな。
assertion 使わずに、変な引数にもちゃんと対応しろって言ってるように見えるのに、
C と D のどちらもそのガイドラインに沿っていない。
227 :
225 :2008/02/14(木) 12:56:28
追記 >213 アホはお前。 「アサーションの使用方法として適切なもの」であるから、CDは「publicメソッドで引数チェックのやり方は不適切」だがアサーションの使用方法に関してはDが正しい。
>>222 その先何をやるのかわからないけど、必要なければ RandomAccessFile を使わない方が無難。
native なメソッドで追跡不能。例えば、ファイル長なら File.length でも可。
229 :
デフォルトの名無しさん :2008/02/14(木) 13:10:20
int型配列の最大要素数はどんだけ?
>>229 言語規定によると…
> 配列は,int値によってインデクス付けしなくてはならない。
で、int型の最大値 (Integer.MAX_VALUE) は 2,147,483,647 なので、要素数はその -1 まで。
231 :
230 :2008/02/14(木) 13:27:25
自己レス。 要素数が最大値でインデクス値が最大値-1。かな… まぁ、確保した時点で普通は OutOfMemoryError かと。
234 :
デフォルトの名無しさん :2008/02/14(木) 16:12:12
質問です。 現在、mainクラスのガベージコレクションを、 多重継承されたインスタンスからコントロールしています。 ただ、Heap領域にアクセスする場合について、 そのコレクションフレームワークからマルチスレッド化させると、 ローカルにremoveしようとしても同期的な排他制御が取れません。 やはりラッパークラスのプリミティブ型は、エレメントのイテレータもhasNext()メソッドもどきで volatile修飾子のシリアライゼーションをさせるのが絶対条件なのでしょうか。 ちなみに、もしコマンドライン引数によってJava.langのStringBufferまでimportしたとしても、 SetインターフェースのisEmptyメソッドにするとなぜかStackOverflowErrorの例外が発生します。 staticなyield()メソッドを汎用させるため、 throwsで例外ハンドラをコンストラクタなアサーションをしているのですが・・・。 C言語が腐るほど考えたのですが、 バイナリでのファイル操作がなかなかまとまらないため質問した次第ですので、 どうかお答えお願いします。
不覚にも吹いたw プログラミングを何も知らない初心者が見たら、 めちゃくちゃ高度なことに見えるんだろうなぁ
未消化な単語ばかり並べてるけど、まあ初心者板なのだから。 やりたいことを自分の言葉やコードで示せば回答もあると思うよ。
スイーツ(笑)
>>234 まず、「てにをは」だけでも見直してみたらどうか?
まるで自動生成したかのような意味の通らなさだ
釣られてみる。 多重継承 :無理 GCのコントロール:原則としてできない Heap領域にアクセス:?? ローカルにremove:?? ダメだ、突っ込みようもないわ
241 :
デフォルトの名無しさん :2008/02/14(木) 18:22:37
JLabelのpaintComponent(Graphics g)をオーバーライドして、 中でg.draw(new Line2D.Double(x, y)) とやると直線が引けました。 この直線を半透明にグラデーションさせたいのですが、どのようにするのがよいでしょうか?
AGGへのラッパーを書く。
>>222 小さいほうの値を選ぶだけなら static long Math.min(long, long) を。(if文を消せる。
>>241 GradientPaint と AlphaComposite を調べろ
245 :
241 :2008/02/14(木) 20:19:12
ありがとうございます。 とりあえず直線はおいておくことにして、任意のShapeについて半透明グラデーション させられるかを考えることにしました。 AlphaCompositeを利用すると一様にアルファ値が適用されてしまうようです(当たり前ですね)。 これを徐々に変化させるような処理というのはどういうプロセスになるのでしょうか・・・ かなり考えたのですが、すみません、ヒントいただけませんか?
少し描画して変更して、また少し描画する、あとは適当なタイミングになるように工夫して繰り返せ
ああ、少しずつ描画すればいいわけですね。 このY座標までは0.6fで、次からはもっと薄く・・・とか。 ありがとうございます。 しかし、タイミングって関係あるんでしょうか? ひょっとして「徐々に」というのが時間的に捉えられてたとか・・・ すみません。これは距離的にということでした。
GradientPaintとか
速度が与えられれば時間的≒距離的だろう。 中学生レベルの理科か算数の話じゃねーか
>>244 のヒントであとは自力でできないようなら他のことを教えられてもできそうにない
あきらめたほうがいい
いや、速度とか言ってるけど何か動かすような話じゃないと思うよ。
要するに図形を半透明にグラデーションさせたいわけだろ?
領域の面積で考えれば済む話じゃないか。しかももう判りかけてるみたいだし。
>>249 ,250はもうちょっと考えた方がいい。
「釣られて見る」 と宣言すればネタに無粋な突っ込みして許されるってもんでもないぞ。
253 :
デフォルトの名無しさん :2008/02/15(金) 00:25:57
すいません、質問です。 ゲームを作っているのですが、方向キーを押したときに画像が 切り替わるようにするにはどうしたら良いでしょうか。 歩いているように見せたいんです。 現在、方向キーを押すと画像が動くようにはできています。 分かりにくかったらすいません。
10個以上も上のやつのネタに突っ込みするんだからレス番ぐらいつけなきゃ無粋なんじゃ?
>>253 普通に描画するだけなんじゃ?
ていうか質問の件よりは動かすほうが難しいと思うんだが
256 :
デフォルトの名無しさん :2008/02/15(金) 00:33:24
ふと思ったんだが やっぱり、strutsよりJSFの方が良くないか?
Struts が良いものと思ってる奴なんて居るのか?
>>255 キャラが左右に滑るだけでまだ手足が動かないということなんじゃ?
259 :
253 :2008/02/15(金) 01:23:33
>>258 そういうことです。いいクラスライブラリがあるのでしょうか?
JSF って JSTL と何か違うの?
>>259 座標を適当な数で割った余りによってキャラを切り替えていくというのは?
何を考える余地があるんだ?
ちょっと考えたほうがいいのは241だろ
アルファ値込みでグラデーション設定したGradientPaintをsetPaintで設定したグラフィックコンテクストを使って
drawなりdrawLineなりで直線引けば終わりじゃないか
>>244 でGradientPaintってヒントが与えられてるのに
AlphaCompositeで一様にしかアルファを設定できないって言ってるやつが変
GradientPaintで力不足ならAPIドキュメントでGradientPaint周りをぶらつけばLinearGradientPaintとかにも行き当たる
264 :
195 :2008/02/15(金) 01:47:42
>>205 激しく遅レスでごめんなさい。
言葉足らずだった、というか話が長くなる予定だったので最初は簡単に意向と思ったというか。
Java(というかJVM?)でも、普通にメソッドを呼び出すと引数とかリターンアドレスとか
ローカル変数とかをスタックに積んでいくんだと思うんですよ。
でも呼び出し先で「例外」投げると呼んだメソッドへのリターンではなくって、
メソッド呼び出しを含むtry節に対応したcatchのところに(しかも例外の種類にあったcatchのところ)へ
一足飛びに戻ってくるわけですね。
そしてそこでキャッチした例外のインスタンスには、
そこから上のスタックがごそっと詰まっているように見えるわけです。
そんなこんなで、tryを実行するとJVMがどっかにcatchのアドレスと例外の型を保存していて、
呼び出し先のどこかで「例外を投げる」を行うと、スタックをこれまたどこかに保存したうえで、
もともと保存してあったcatchのアドレスにまで一足飛びにジャンプして、というのを考えると、
それというのはGotoなんかよりよっぽどたち悪くないか、なんて思ったりするんですけど、
それでも例外は使うな、なんて話は別に聞かないですし、そんなもんかとも思うんですが、
例外処理書くときにもやもやするのは確かなのです。
そういう例外処理機構がくわしくわかるようなWebとかないでしょうか。
名前空間付きの XML (DOM) に対して:
<foo xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance "
xmlns="
http://foo-uri "
xsi:schemaLocation="
http://foo-uri foo.xsd">
<bar>...</bar>
…
XPath でノードを参照してみたんですけどノードと一致しません。
NodeList nl = (NodeList)xpath.evaluate("/foo/bar", doc, XPathConstants.NODESET);
// nl.getLength() == 0 になる
XML から名前空間の指定を取り除くと一致するため、検索時にパスの名前空間が考慮されてない
動きだと思うのですが、XPath に名前空間を意識させるにはどうすれば良いでしょうか?
DOM を構築するときにファクトリへ setNamespaceAware(true) は行っています。
267 :
デフォルトの名無しさん :2008/02/15(金) 02:01:33
先ほどスレ立てるまでもない質問スレで質問させてもらったんですが、板違いってことで こちらで再度質問させてくださいまし。 一昨日からずっとこの問題を考えているのですが、基礎知識があまりに不足していて全くわからないで困っています。 プログラムに詳しい方いましたら長いですが完全解答を導き出していただけませんでしょうか? 以下に掲げたおこずかい帳プログラムの説明を書きなさい。ただし、書き方は次の例 を参考にすること。<form name=f><input type=text name=i value=""><input type=button value="偶奇判定" onClick="check()"></form><script>function chech() {var a=Number(document.f.i.value);a=a+1;if(evenp(a)) alert("偶数");else alert("奇数");}function evenp(a){return a%2==0}</script> 【説明例】formタグとinputタグによって、画面にテキスト文字表示窓と偶奇判定用のボタンを表示。この際、ボタンをクリックした時、関数check()を呼び出すように設定する。 関数checkは、テキスト文字窓から入力された値(document.f.i.value)を関数Numberによって数値に変換し、これを変数aに代入する。ついで、aの値を1増やし、関数evenpによって変数aの 値が偶数か、奇数か判別し、偶数の時は"偶数"、奇数の時は"奇数"とalertウィンドウに表示する。関数evenpは、与えられた値(a)が偶数かどうか判別(aを2で割った余りが0かどうかで判定)し、結果(trueかfalse)を返す。
何だこれ? 読む気しねえ
270 :
265 :2008/02/15(金) 02:40:39
XPath の表記に接頭辞付けて、その接頭辞に対する URI (XML のと同じ URI) を返す NamespaceContext サブクラス作らなきゃいけないみたいですね。
271 :
デフォルトの名無しさん :2008/02/15(金) 03:14:39
>>267 板違いって言われてなお同じ板の別スレに投げるとは
web制作板へ行ってもそのままじゃ誰も読んでくれんぞ
あっちの板で質問するときはせめて改行を入れろ
長くなるようならうpろだにあげろ
>>264 お察しの通り、例外が発生した際の手順は見かけ以上に多く、議論の的になります。
例外を使う場面に関する検索キーワードとしては「java 例外 コスト」などでしょうか。
条件分岐目的で例外を発生させる書き方は、好まれていないように思えます。
instanceof とキャストと例外の話も面白い。
273 :
デフォルトの名無しさん :2008/02/15(金) 05:59:57
httpclientを使用してログインが必要なサイトにアクセスしたはいいものの リダイレクトされて、html情報を取得できません。。。 ググってもリダイレクト先のURLを取得する方法がわかりませんー! どなたかご存じありませんか><
Location ヘッダを取れ。 つかリダイレクトを自動処理する設定くらいないのか。
>>213-214 ,225-227
レスありがとうございました。
メソッドの事後条件チェックにアサーションを使用した例と
考えることにします。
引数チェックに見えるのが腑に落ちないですが、
そこは問題作成者の思いやりが足りなかったと思うことにします。
>>264 処理の重さが気になるって話なら、実際に例外が発生しない限りほとんどノーコストなんだし、
実際に例外が発生した場合にコストが高いのは、まぁエラー発生時のみだからと割り切る。
gotoっぽくてイヤって話なら、returnでエラーコード返す処理を連ねてくのに比べればマシかと。
paint(Graphics g)やupdate(Graphics g)のgの部分を他のクラスから使う方法はありますか? 今はエラーを表示するだけなのに、 paint(Graphics g){ test(g); } test(Graphics g){ ……… tset_error(g); } test_error(Graphics g){ g..drawString("エラーがでたよ",0,0); } こんな感じの入れ子が数段連なってます。 なんだかガベージコレクトも頻発してるみたいなのでGraphics gを無くしたいのです。
根本的な使い方が間違っていると思われ
エラーに限らずほとんどのクラスにGraphicsが付いてるんですよ。 なんとかしたいでつ(>_<)
作ったやつに氏ねと言ってくれ
>>277 設計を見直すべきかと
paintの中で描画以外の処理をやってないか?
paintでは描画に集中し、ほかの事はやらない
設計に問題がないのなら、gを渡すのは仕方ない
あとガベージコレクションはgを渡してるのとはおそらく関係ない
>>281 Graphicsの入れ子はガベージコレクト的に問題ないと言うことですね。それを聞いて安心しました。
ということはImageや整数配列の入れ子が問題なのかな。
Cみたいな参照変数になってるのか、なってないのかがよく分からなくて。
Javaには参照渡ししかない。
284 :
デフォルトの名無しさん :2008/02/15(金) 13:22:26
直線のデータをdに入れます。 dは配列です。1次元目が開始位置、2次元目が終端です。 1次元目、2次元目がそれぞれx,yの座標を持っているので、 int d[][]型です。 int d[][] = new int[2][2]; 配列dのメモリ確保はこれでよいですか? C言語のようにd = new int[2]を実行してから、2次元目はforで回しながら newしなくてはならないのでしょうか?
ごめん、うそついた。 Javaの変数は、オブジェクトについてはすべて参照。 引数はすべて値渡しだが、オブジェクト自身を渡すことはできない。
>>285 試してみたら、Imageはコピーでした。Graphicsは参照。
全部試してみればよかったんだね。
java3級 落ちてきたオイラに一言。
java3級ってなに?
サーティファイか
291 :
デフォルトの名無しさん :2008/02/15(金) 17:14:19
propertiesファイルで firstname = taro lastname = yamada fullname = ${lastname} ${firstname} みたいなことって無理ですか?
>>234 なんか、完ぺき主義者みたいだな。
ところどころで主語や目的語が抜けて凄いな。
何を多重継承したのかわからんし、何をどのようにコントロールしているのかもわからない。
5W1Hがなっていないというか。
>291 無理
294 :
デフォルトの名無しさん :2008/02/15(金) 20:22:43
anko1;;あんこ anko2;;あんこ2 このような形式の辞書ファイル(100MB)を ランダムアクセスファイルで分割してメモリに読み込み 検索する辞書検索プログラムを作っているのですが 検索はできるのですが、かなり時間がかかり困っております ハッシュ系のコレクションフレームワークを使えとヒントをもらったのですが 100MBのデータをハッシュ化すると当然メモリがたりなくなりました 大量のデータをハッシュで高速に検索する方法をおしえていただけないでしょうか
>>294 メモリ増設
てか、ヒープを256MBくらいにすればいいだろ
>>294 普通にデータベース使え。
それが嫌ならその辞書ファイルにインデックスでも付けろよ。
SAX パーサに Schema やなんかの Validator が設定できないみたいなんすけど 解析しながら ヴァリデーション ができるようには作れないんでしょうか。
>>294 他の人も書いてるけど、
普通にJavaDBでEmbeddedでやれば何も考えずに楽勝だと思うんだけど。
辞書ファイルがテキスト形式絶対でも
nioだったらヒープ外にバッファが取られるから
それほど遅くならんと思うがなぁ。
コマンドライン引数指定はしないとまずいし、今やってないかもしれないしなぁ、
どの程度のレスポンスで遅いって言ってるか解らないし。
300 :
デフォルトの名無しさん :2008/02/15(金) 23:46:17
アプリの中のデフォルトフォントを設定したい。 Label l = new Label(""); l.setFont(f); をいちいちインスタンスごとにやるのではなくて、main()が始まったらすぐに デフォルトフォントを設定して、Label l = new Label("");した時点で そのフォントが適用されているようにはできませんか?
Labelをextendsしたらあかんの? 自前の俺Label作ったらええやん
>>300 Javadocには親のフォントを継承するかのように書いてあるから、
FrameにsetFontすればいいんじゃなかろうか
303 :
デフォルトの名無しさん :2008/02/15(金) 23:52:59
Javaのソースコードを構文解析木に変換したいです。 たとえば a = max(b,c/2); だったら = / \ a max / \ b / / \ c 2 のような木を得たいです。出力のフォーマットはどのようなものでも構いません。 何かご存知の方いらっしゃいましたらよろしくお願いします。
JavaCCでググれ。 BNFが有るのが前提だったら楽。
>>301 Label.setFont()がありましたが、setDefaultFont()で解決しました。
>>302 ありがとうございます。あきらめました。
public class OrigApp extends IApplication {
public OrigPanel oPanel;
public void start() {
oPanel = new OrigPanel();
oPanel.setFont(Font.getFont(Font.FACE_SYSTEM | Font.SIZE_SMALL | Font.STYLE_PLAIN));
Display.setCurrent(oPanel);
307 :
デフォルトの名無しさん :2008/02/16(土) 00:52:49
↑import com.nttdocomo.ui.Font; が無いとFontのシンボルが解決でないというコンパイルエラーです。 Fontというクラス名が衝突しているのですか?
iアプリかよ・・・・・。
>>307 いみがわからん。
インポートしちゃいかんの???
>>308 import com.nttdocomo.ui.*
こう書けばFontが使えると思っていましたが、
>>306 のソースでは
import com.nttdocomo.ui.Font;
でなくてはコンパイルできない理由が分かりません。
なるほど。 じゃぁ、Fontというクラス名の衝突という認識で正しい。 import java.awt.*; とかやってないかい? そこのFontクラスがある。 つーか普通Fontっていうとjava.awt.Fontだとおもうんだが。 まぁ、ソースに明示的に oPanel.setFont(com.nttdocomo.ui.Font.getFont(com.nttdocomo.ui.Font.FACE_SYSTEM | com.nttdocomo.ui.Font.SIZE_SMALL | com.nttdocomo.ui.Font.STYLE_PLAIN)); って書いてもいいけどなw ま、Eclipseとか使えってことだ。
311 :
デフォルトの名無しさん :2008/02/16(土) 01:17:23
java初心者です Cだとif文で〜のときは変数○に値□を入れて ーのときは変数○に値△をいれる ってのができるのにjavaはスコープの関係上それができません>< 一体どうやってやるんですか??
>>310 import java.awt.Font;は、携帯用のコンパイラだからエラーでしたが
クラス名の衝突なんでしょうね。?
Eclipse使ってないことまでバレちゃうんだな。
Eclipse使えと言われているんだが。
>>311 何を言っているんだ C のスコープも同じだろ (最近の ANSI C/C++ は違うのか?)。
String ○ = null;
if(〜){
○ = "□";
} else if(ー){
○ = "△";
}
316 :
デフォルトの名無しさん :2008/02/16(土) 01:23:22
>>312 あーごめん。
おれiアプリとか書いたこと無いから「クラス名の衝突」に関してはウソかもシレン。
IDE使ってないのが解るのは
import java.awt.*;
とかでアスタリスクを使ってるから。
Eclipseだったら使ってるクラスのみをインポートするし
作法的にも衝突が起きないように省略するとかしない。
スタティックインポートとかつかえんよね?iアプリだと。
コンパイルする前からエラー教えてくれるし、俺は初心者であっても使うべきだと思う。
今ならEclipseじゃなくてNetBeansでもいいとおもう。
なんか日本語むちゃくちゃだなorz. まだ会社なんだ・・・・・許してくれ。
319 :
311 :2008/02/16(土) 01:28:52
初期化してなかっただけでした\(^o^)/
>>317 スタティックインポートって聞いたことがありません。
まだインポがうまく使いこなせていませんが、
「Java謎+落とし穴徹底解明」を読んで、クラス名の衝突なのでは、と思いました。
Java5から導入されたんだが、 クラス名から書かなくてもメンバを参照できるってだけ。 この場合だと import static com.nttdocomo.ui.Font.FACE_SYSTEM って宣言しておけば Font.getFont(FACE_SYSTEM ・・・ って書けるってだけ。 あんまり便利でもないし、積極的に使う場面でもないな。
<? extends Hoge> と <? super Hoge> とかってどう違うの?
Hogeのサブクラスに限定するか、Hogeのスーパークラスに限定するかの違い
<? extends T> Tの派生クラスだったらなんでもいい <? super T> Tのスーパクラスだったらなんでもいい
class A{} class B extends A{} class C extends B{} とした場合、 List<? extends B> には B, C が入れられ List<? super B> には A, B (Object も) が入れられる って事で良いの? スーパークラスに限定が必要性ってどういう状況で出るんだろ。
別にクラスだけじゃなくて、インターフェースも指定できるから、 状況的にはあるとおもうが。
ん? ゲネリクス の型チェックってコンパイル時の静的な奴だから <? super B> としても A にキャストした C のオブジェクトは OK になっちゃうんじゃないの?
>>325 たとえば、java.util.Collections#copyとか。
<? extends T>なListの要素を<? super T>なListにコピーするメソッド。
Tのサブクラスが入ったListはTのスーパークラスを入れられるListにコピー可能。
List<? extends B> bext1 = new ArrayList<A>(); // エラー List<? extends B> bext2 = new ArrayList<B>(); List<? extends B> bext3 = new ArrayList<C>(); List<? super B> bsup1 = new ArrayList<A>(); List<? super B> bsup2 = new ArrayList<B>(); List<? super B> bsup3 = new ArrayList<C>(); // エラー ↑これはまぁ分かりますと。 List<? extends B> bext = new ArrayList<C>(); bext.add(new A()); // エラー bext.add(new B()); // エラー bext.add(new C()); // エラー ↑何で全滅やねん! List<? super B> bsup = new ArrayList<A>(); bsup.add(new A()); // エラー bsup.add(new B()); bsup.add(new C()); ↑B のスーパークラスってのは代入の時のみで、 実際に適用するオブジェクトの型を上位に限定するんじゃないのか。
>>329 >List<? extends B> bext
List<? extends B> ってことは、たとえば List<D> だったら
add の引数は D でなければならないわけで、
その場合は A も B も C も add 出来ないことになる。
? が確定しない限り、安易に add 出来ない。
>List<? super B> bsup = new ArrayList<A>();
こっちは、? が D ではありえない。List<Object> か List<A> か List<B> しかない。
List<B> かもしれないことを考えると、A は add できない。
B だったら、List<Object> でも List<A> でも List<B> でも OK だ。
>>330 前半、全て NG なら何のためにそういった書き方が出来るんでしょうか?
さらに別に参照を受け渡すためか class D extends C{} を作って
List<D> dlist = bext; とかしてみましたがエラーでした。
後半、言語設計する側の理屈で言えばそうですね。使う側の立場で宣言だけ見ると
B のスーパークラスだけ add できるリストなのかと思ってしまいそうですが。
何でこうゲネリックウsって消化悪いんでしょうか。誰ですか設計したのは。
>>330 なるほど。ありがとうございます。(質問者じゃないけれど)
かなり理解が進みました。
// 代入文を見ると、ついつい右辺の型で考えてしまうのよね…
独習Javaをやっているんですが、 本が厚すぎてコードを打っているうちにパタンと閉じてしまいます。 何かいい方法はありませんか?
板違い
章ごとに小分けして製本する。
独習Java読んでみたけどあれはひどいね。 J2SE5.0対応を謳ってるくせに、 実際は1.3以前の内容しか載ってない。 例えば、キーワードにassertやenumが無かったり。 よくあんな本が売れるもんだ。
339 :
333 :2008/02/16(土) 11:26:25
>>337 今、購入しました。
商品が届くまでは本に「やさしいJAVA」を乗せておくことにします。
340 :
333 :2008/02/16(土) 11:34:57
>>338 それを聞くとモチベーション下がるなぁ。まだ第2章だっていうのに。
このスレには独習にお世話になった人はどのくらいいるのだろうか。
ノ お世話になったよ。 5.0は対応しているだけで、5.0用ってわけじゃないからなぁ。 1.4系を独習するという事で割り切れば今でも良本。 そもそも5.0系でまともな入門本ってあるかい?
>>331 Java言語仕様一通り読んだけど、Genericsまわりははっきり言ってわけわからん。
つか、理解を完全に放棄したw
何らかの数学的背景があって、その範疇で整合性を取っているような感じだったが……。
>>341 assertが載ってないから1.3系だよ。
1.4系の独習なら、他にもっといい本があるだろう。
5.0系の入門書は知らないけど、
1.4系なら結城さんの本とかいいんじゃないの?
5.0に対応してたかも知れないし。
344 :
デフォルトの名無しさん :2008/02/16(土) 12:22:00
java(TM)plug-inの致命的エラー XP IE7 導入 JAVAの再インストール すべてやってもエラーでみれません 対処方法教えていただけませんか?
>>331 >前半、全て NG なら何のためにそういった書き方が出来るんでしょうか?
それは、get の方を考えてみればわかる。
List<? extends B> の場合、保持してる要素は少なくとも B か
そのサブクラスであることがわかってるから、get は B を返すことができる。
List<? super B> の場合、List<Object> という可能性があるから、
get は Object でしか返せない。
>List<D> dlist = bext;
それは無理。
bext は List<A> かもしれないし。
List<D> の get は D を返すわけだから、A とか入ってたら困るだろう。
javaVM1.2以降の時だけGraphics2Dを使いたいのですが、 バージョンをチェックして振り分けてもMSjava1.1だとランタイムエラーになってしまいます。 SUNjava1.1はキチンと振り分けられて動いています。 これって対処できますか?
理由を聞けばもっともだとは思うが、あんだけ時間かけといて何でこんなgdgdなんだろうか。 まぁ誰の声が一番でかいかを争ってたんだろうというのは想像に難くないけど。
348 :
346 :2008/02/16(土) 12:55:07
具体的にはClassNotFoundExceptionが出ます。 if文で1.1以下の時だけそのクラスを使わない処理にしたら、 sun-java1.1はエラーを吐かなくなりましたが、 ms-java1.1はエラーで止まってしまいます。
349 :
hage :2008/02/16(土) 12:57:37
質問です。(コードは以下に連投します) キャンバス上に JComboBox を混ぜたプログラムを作ってるのですが、 マウスドラッグ中に JComboBox がちらついてしまうのが嫌なのですが、 なんとかなりませんでしょうか? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame{ private Image offs; private JComboBox cb; private Point mp; public Test(){ init(); } private void init(){ Container c = getContentPane(); c.setPreferredSize(new Dimension(300, 300)); c.setLayout(null); // レイアウト無し // JComboBox の設定 String[] ss = {"hage", "hige", "huge", "hege", "hoge"}; cb = new JComboBox(ss); c.add(cb); cb.setBounds(30, 30, 100, 20); pack(); repaint(); setResizable(false); setVisible(true); // ドラッグで再描画 this.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseDragged(MouseEvent me){ offs = null; mp = me.getPoint(); repaint(); } }); }
350 :
hage :2008/02/16(土) 13:00:11
public void paint(Graphics g){ if (offs == null){ offs = createImage(getWidth(), getHeight()); Graphics g2 = offs.getGraphics(); g2.setColor(Color.BLUE); g2.fillRect(0, 0, getWidth(), getHeight()); g2.setColor(Color.RED); if (mp != null) g2.fillOval(mp.x - 2, mp.y - 2, 4, 4); cb.repaint(); } g.drawImage(offs, 0, 0, null); } public static void main(String[] args){ new Test(); } }
>>346 Graphics2D を使う部分だけ別のクラスに分けておいて、通常のクラス名で new する代わりに
Class#forName でロードして Class#newInstance でインスタンス化すれば大丈夫かと思うが、、、
(Graphics2D を使うクラスの名前は Class#forName の引数以外には一切書かない)
そんな昔の、切り捨てたら?
>>349 とりあえず、JFrameに直接描くな。
JComponentを派生して自前のキャンバスクラスを作り、そのpaintComponentで描け。
353 :
hage :2008/02/16(土) 13:19:04
すいません。書き直しました。本来のプログラムのほうも、構成はこんな感じになっています。 (以下、連投) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame{ public static void main(String[] args){ new Test(); } public Test(){ init(); } private void init(){ MyCanvas canvas = new MyCanvas(); getContentPane().add(canvas); pack(); repaint(); setResizable(false); setVisible(true); } }
354 :
hage :2008/02/16(土) 13:22:11
class MyCanvas extends JComponent{ private Image offs; private JComboBox cb; private Point mp; public MyCanvas(){ init(); } private void init(){ this.setPreferredSize(new Dimension(300, 300)); this.setLayout(null); // レイアウト無し String[] ss = {"hage", "hige", "huge", "hege", "hoge"}; // JComboBox の設定 cb = new JComboBox(ss); this.add(cb); cb.setBounds(30, 30, 100, 20); // ドラッグで再描画 this.addMouseMotionListener(new MouseMotionAdapter(){ public void mouseDragged(MouseEvent me){ offs = null; mp = me.getPoint(); repaint();}}); } public void paint(Graphics g){ if (offs == null){ offs = createImage(getWidth(), getHeight()); Graphics g2 = offs.getGraphics(); g2.setColor(Color.BLUE); g2.fillRect(0, 0, getWidth(), getHeight()); g2.setColor(Color.RED); if (mp != null) g2.fillOval(mp.x - 2, mp.y - 2, 4, 4); } g.drawImage(offs, 0, 0, null); cb.repaint(); } } と、途中で気づいたのですが、 paint を paintComponent にすると治りました・・・ paintComponent というのをはじめて知りました orz 勉強になりました。ありがとうございました
>>351 Java 系のグループじゃそう言われてるけどなぁ、先日ニュース系の板から秘密で誘導して
統計とって見たら一番多かった Java 6 に続いて 5.0 と MS JVM 1.1 がほぼ同じだったよ。
もっとも、入れてもない奴がダントツだったけど。
>>351 ありがとうございました。でもさっぱりわかりません。
>>355 ライバルが1.1サポートなんですよ(^^;
どうやらクラスローダーの挙動が違うのが原因なのかな。
xmlをhttpでpostするサンプルをください!
本みながらやってるんだけど Iteratorとかvectorに<E>みたいなのをつけろって eclipseでやると注意されるのですが そこにIteretorでStringをあつかうとき<String>みたいに やったら動きました。 本には書いてないので<>がなにかわかりません。 本だとIteratorでObjectにして好きなクラスを返すみたいになってるけど、 それはできないんですか?
5.0で導入されたジェネリクス。 本に従ってやるならば、Eclipseでコンパイラレベルを1.4に汁
360 :
デフォルトの名無しさん :2008/02/16(土) 16:37:08
正規表現で hoge[0]=○○ という文字列を検索したいのですが 半角[]をどうやって表現すればいいのかわかりません><
>>350 正規表現としては\でエスケープすればOK
Javaの文字列としては・・・
\\[で[にマッチするということになるな
>>356 ClassNotFoundが出たら1.1だと判断すれば?
で、
>>351 が言うように、1.1に存在しないクラスを直接参照しないようにする。
364 :
デフォルトの名無しさん :2008/02/16(土) 17:40:55
>>362 ありがとうございます!
てっきり\ひとつだけだと思ってました><;
365 :
デフォルトの名無しさん :2008/02/16(土) 17:59:34
Derbyの使い方について教えてください
>>365 このスレでDerbyの使い方講座を開講しろっていうのか?
Apacheのページへ行ってDerbyのドキュメントを読め。webで検索しろ。
ここで質問するならもっと質問を具体的にして絞り込め。
>>365 (1) derby.jarファイルにクラスパスを通す
(2) Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); を呼ぶ
(3) DriverManager.getConnection("jdbc:derby:test;create=true") で Connection を取得する
(4) 好きなSQL文を実行する
(5) Connection を閉じる
(6) DriverManager.getConnection("jdbc:derby:;shutdown=true"); を呼んでシャットダウンする
>>331 T な変数には、<? extends T> なものを代入できるし、
<? super T> な変数には、Tはものを代入できるので、
返値に対してコバリアント的にしたい場合は、extends にして
引数に対してコバリアント的にしたい場合は、super にする
制御文について質問なのですが if(a||b||c&&d)というのはaもしくはbまたはcかつdがtrueの時if文を実行ですよね? ではif(a||b&&c||d)というのはaもしくはbがtrueかつcまたはdがtrueの時if文を実行。 ということで良いんですか?この仮定が合ってるとすると条件式の順番にも気をつけなくてはいけませんよね?
>>356 ClassNotFoundException は、それを実行しようとしているかどうかに関わらず
それが分かったらいつVMが投げても構わないって仕様じゃなかったっけ。
それぞれの実装を別のクラスローダで読み込むのがいいんじゃまいか
>>369 Java とは関係なさそうだけど。
* と + に優先順位があるのと同じ。
a || b || c && d => a || b || (c && d)
a || b && c || d => a || (b && c) || d
373 :
369 :2008/02/16(土) 21:51:17
今一良く分かりませんorzここから先はGoogle先生に聞いてみます。 ありがとうございました。
>369
もう少し解りやすく、他人に伝わるよう書く努力が欲しい。
if(a||b||c&&d)というのは、『a』もしくは『b』または『cかつd』のいずれかがtrueの時にif文を実行ですよね?
ではif(a||b&&c||d)というのは、『aもしくはbがtrue』かつ『cまたはdがtrue』の時if文を実行。
ということで良いんですか?
質問はこういう意味? なら
>>372 ググるときは、『Java』、『演算子』、『優先順位』でOK。
375 :
デフォルトの名無しさん :2008/02/16(土) 22:45:04
古いデータと新しいデータを比較するプログラムを作ってます データを取得してテキスト形式で保存→新たに取得して比較→二日以上たったデータは削除 という感じなのですが、二日たったことを判断するのはどういう風にすればいいのか悩みます。。 ちなみにデータ取得時の日時は年/月/日/時/分まで保存してます 簡単に日にちで比較すると31日とか30日の判断もあるし、うるう年とかもあるので悩んでます>< いいアイディアはないでしょうか?
376 :
375 :2008/02/16(土) 22:50:32
良い方法をひらめきました! どうもすいませんでした><;
377 :
デフォルトの名無しさん :2008/02/16(土) 23:15:14
ひらめいたならいいけど、そういうのはミリ秒で保存しといた方が良いよー
>>361 そんないつの時期に取ったか分からん統計出されても知らんがな。 Win に MSJVM が
デフォルトインストールだった時代や JavaScript のアプレット enable フラグだけ見てたら
それくらい行くだろうね。少なくとも 30 秒以上滞在してアプレットが起動しない環境は
倍以上居る。
HashMapのKeyと値にそれぞれ変数から代入したんですが保存されないみたいなんです 上記の方法で次々に値を代入していくにはどうすればいいですか?
380 :
デフォルトの名無しさん :2008/02/17(日) 00:41:28
>>379 HashMapにaddするときに使ってる変数を変に使いまわしていないか?
HashMapに代入されるのは結局の所は参照なので参照先を書き換えると変わるぞ
>>380 ありがとうございます
参照先が変わってるのかなあ
やろうとしていることは HTMLで入力した値を
サーブレットに渡してintにランダム変数を入れて
それをhashmapのkeyにして値も代入
一回目はうまくいくんですけど二回目以降に値が
リセットされてしまいます
>>381 …?
HashMap のインスタンスが毎回生成されてる、なんてオチは無いデスヨね
383 :
デフォルトの名無しさん :2008/02/17(日) 01:12:22
>>382 た、たぶんそれです
ありがとうございますOrz
もう少しがんばってみます
サーブレットとか知る前にやることがある気がするんだが。
自分でもまったくそう思いまする
手元の W-ZERO3 に JBlend が乗ってるんで暇つぶしに何か作れないかと思ったんだけど いかんせん組み込みっぽいのはやったことがなくて。MIDP 2.0? とやらに対応させれば 良いんでしょうか? それとも専用の SDK でも買わなければけいないんでしょうか? 携帯の開発情報はそこそこありますがそれと同じと思って良いんでしょうか。
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
PATHの設定がどうしても出来ないためこれが出てしまっていると思うんですが、
>>1 に書かれているURLが消えているのか飛べないです。
他に本も色々なサイトも見ましたが分かりません。
どこか分かりやすく説明しているところは無いでしょうか?
ありがとうございます。 しかしやはりどうも落としたバージョン(jdk-6-doc-ja) だと上手くいかないようなので、申し訳ないのですが、質問を変えます。 改めてj2sdkを落としたいんですが、場所がどこなのか分かりません。 Javaの公式サイトから探しましたが、日本語に変換しても 別のページに飛ぶとまたすぐ英語になってしまうので、読めませんし訳が分かりません。 具体的なURLを直接教えて下さると大変助かります
> jdk-6-doc-ja コーヒー返せwww
やはり何かおかしかったですかねw やたら重いんで何かおかしいと思ったんですが。 でも英語だらけで分からないんですよ、ほんと。 国際派じゃないとこれから生きていけそうもないな
doc document
国際派じゃなくても
>>388 見れば普通は何が言いたいか解る
ググれカス
394 :
387 :2008/02/17(日) 11:56:23
困ったな…調べてみてはいるんですが、どうもありそうにないですね。 ほんとに日本語でおkという感じなんですが…読めない。 やさしいJAVA2版に書かれていたURLも消えているようですし、 今の主流はもうj2sdkじゃないんでしょうか?
>>389 確かにJDKとは書いてありますが、ドキュメントの方を取得されたようで。
Java SE Downloads
ttp://java.sun.com/javase/ja/6/download.html リンク先には、JDK, J2EE, NetBeans, JRE と並んでいますが、
それぞれの説明を読む等で適切なものを選んでインストールしてください。
>>391 ま、ゆっくりやってくださいな。好きこそ物の上手なれとも言いますし。
アルファベットが読めないとか辞書を触ると目が見えなくなるとか言う人なら
更に教育を受けるか、病院に行った方が良いと思いますが。
396 :
387 :2008/02/17(日) 11:58:16
やっと見つかった…検索の仕方がまずかったみたいです。 お騒がせしました
397 :
387 :2008/02/17(日) 12:00:23
>>395 ご立派な嫌味をどうもw
知識が豊富で羨ましいです
398 :
デフォルトの名無しさん :2008/02/17(日) 12:01:48
本当ご立派な
>>397 は人格に問題ありすぎだな。
あんなに懇切丁寧なレスを嫌味だなんて。
というか、有用な情報を見いだす目が著しく欠如しているってことか。
JDK落とすだけでこれだから、この先は想像を絶するいばらの道が待っていることだろう。
初心者相手にいちいち優位に立とうとするなよ。
Java初心者ってか対人関係初心者だけどなw
おまいも十分そう見えるが。
そう思いたいのですね。
そのほうが面白いし。
そうか。
うん。
こ。
ころころうんこ
食物繊維取れ
普通にSunのページわかりにくい
非開発者向けではどう見てもないよな。 母さんにあそこから最新の JRE 落として入れろとはとても言えない。
ほんと、SUNにはもっと普及率を上げるための努力をしてもらいたい。 まずはインストールをもっと簡単にして。
>>1 のリンク死んでるな。というかサーバが停止してるようだが。
ム板なんだし JRE の落とし方はどうでも良くない? かえって混乱すると思う。
417 :
369 :2008/02/17(日) 18:54:29
なるほど!何とか理解できました。>374 さん thx
>>416 ところがEclipseを使うのにJDKは不要だ罠
新人研修等ではじめからEclipseでスタートする場合、
JDKを入れたことがないという人も出てきそうなご時世だね。
419 :
デフォルトの名無しさん :2008/02/17(日) 20:16:41
Arrays.sortを使って数値の配列をソートしたんですが これってソート後の配列の添え字情報とかも取得できないんですか?? たとえば ソート前 a[0]= 2 a[1]= 1 a[2]= 3 ↓ ソート ソート後 a[1]= 1 a[0]= 2 a[2]= 3 の[1],[0],[2]の情報を取得したいですー!何か方法ありませんかー!
その添え字情報を何に使うんだ? ただ単に安定なソートがしたい、ってだけなら、 List<Integer> lst = Arrays.asList(2, 1, 3); Collections.sort(lst); でOKじゃない?
class Hoge { public int ソート前のインデックス; public int 値; } こういうラッパーをかぶせてからソートすればいいんじゃね
>>419 一番高速なのは、quicksortのコードを自分でいじって実装することかな。
値をスワップするところで、添え字もスワップすればいい
423 :
419 :2008/02/17(日) 21:09:52
>>420 ,421
返答ありがとうございます
hoge[0] = 3423
hoge[1] = 4123
hoge[2] = 4142
a[0]= 2
a[1]= 1
a[2]= 3
みたいにhogeにID、aに値を保存していて、それぞれ添え字で=を確認してたんです
(つまり添え字が0ならID;3423→2みたいにです)
あとaには同じ値がたくさんはいっているのでソート後に値で確認もできないんです。。。
もしかして他にいい保存方法あったりしますかね^^;
424 :
デフォルトの名無しさん :2008/02/17(日) 21:10:48
>>422 やっぱ自分で実装するのが一番早いですかね?。。
クラス使えよ class IDAndValue { int id; int value; } ソートはComparatorを自分で実装すればいいだけ
426 :
デフォルトの名無しさん :2008/02/17(日) 21:21:10
Comparableでもいいよ
ファイルを後ろから読み込むにはどうすればいいのでしょうか? BufferedReaderのreadLineのように一行ずつ読み込めるものがあると良いのですが、、、
そんなに大きくないならListに全部読み込んで、後ろから取り出せば?
多分だけど、どうしてそれがしたいかを説明すると よりハッピーになると思う
>>378 >>361 のページに↓のようにいつ統計を採ったのかを書いてある
Millward Brown survey, conducted December 2007.
See Methodology Section for details on the Millward Brown study.
432 :
デフォルトの名無しさん :2008/02/17(日) 23:24:14
public ShortTimer t; t.start(); これでタイマーが開始しましたが、再びここで t.start(); すると実行時エラーになります。 そこで t が t.start(); されているかを知る方法を教えてください。
428です。 後ろに行くほど新しい情報が書いてあるログファイルなので後ろから読み込めたらいいなと。 容量はそれほど大きくもないのですが、、、
>>434 それは tail コマンドと同じ機能っぽい印象を受けました。
そして、あまりに便利なコマンドだから、かっこいいことをしてるハズだ
と、そう思って検索してみました。すると…
勘違いしていました。tail.c
ttp://programamemo2.blogspot.com/2008/02/tailc.html バッファサイズ決めて、(最初はファイル長を割って余った分だけ)ファイルから読み込んで
改行文字数を数えて、必要数たまったら、そのバイトから最後まで出力っぽい感じ。
ファイルが更新された時の処理も、そのブログ記事にあるとおりで、なんともはや…
んなもん tail の動き見てりゃ 1 秒ごとに監視してるだけくらい想像付くべ。 ファイルのケツから数kB〜数十kB ごとに読み込んで行数カウント、必要行数に 達したらそこから開始位置まで出力、達しなければその前のブロックを評価が定番。
437 :
デフォルトの名無しさん :2008/02/18(月) 08:34:15
class Test { int sum(int[] date){ int r=0; int i; for(i=0; i<date.length; i++) r += date[i]; return r; } } public class sample34{ public static void main(String[] args) { Test test =new Test(); int[] date1 = new int[]{1,2,3,4,5}; int result; result=test.sum(date1); System.out.println(result); } } これで15が返ってくる理由教えてください。 私の考えはsum(int[] date)ここに{1,2,3,4,5}を入れるわけですよね? でdate.lengthとなっているから、その個数5だと思うんですけど すいません意味不明で・・・
配列のインデックスは0から始まる
>>437 配列型の変数 date の length は int型で、この場合の値は 5 です。よって
L5: i が 5 未満の場合、L6 へ進む。そうでなければL7へ進む。
L6: r と date[i] を加算し、r にその結果を入れる。(i に 1 加える。L5へ進む。)
L7: r を返す。
// 何をしてるかと言えば、配列の各要素の値を加算した値を返してるだけ。
よって、Test のインスタンスメソッド sum(int[]) に
date1 を入れて実行すると 15 が返される。
// 各要素の値、1 から 5 までを加算した値
後は手元の本などで for文の仕組みを調べ直してください。
蛇足。制御文 if, else, for, while, do-while の "{ }" を省略した場合、
直後の1文が制御対象になりますが、見易さや事故防止等の為、
省略しないことをお勧めします。
data.length Σ data[i] i=0
441 :
デフォルトの名無しさん :2008/02/18(月) 09:36:09
ありがとうございます。分かりました!!! これからも勉強頑張っていきます!
442 :
デフォルトの名無しさん :2008/02/18(月) 13:40:38
TreeMapでデータをソートしたのですが Entryで得たvalueとkeyをStringにキャストしてInteger.parseIntをつかってから int型にしてint型変数に格納しようとするとkeyだけキャストできないというエラーが出てしまいます 原因がわかりませんー・・・
443 :
デフォルトの名無しさん :2008/02/18(月) 14:01:46
OSのタイムゾーン設定では日本時間なのに JavaのデフォルトタイムゾーンがGMTになっています。 デフォルトのタイムゾーンってどこをいじれば変更できるのでしょうか? 環境はJava1.6.0_04 Windows 2003 です。
>>442 コードを見せてみれ
エラーメッセージも正確に
>>442 キャストできないエラーというのは、「Stringにキャストして」の部分なのでしょうか?
1.5以降ならジェネリクスをお勧めします。
原因としては TreeMap に格納する際に何型を使ったのか、が怪しいところです。
446 :
442 :2008/02/18(月) 14:14:34
public class Sort { public Sortdata sort(Difference dif){ int i = 0; String change_sm = null; String change_play = null; Sortdata data = new Sortdata(); NumericComparator c = new NumericComparator(); TreeMap map = new TreeMap(c); while(i < dif.number){ change_sm = Integer.toString(dif.sm[i]); map.put(new Integer(dif.replay[i]), change_sm); i++; } Set s = map.entrySet(); i = 0; Iterator it=s.iterator(); while(it.hasNext()){ Map.Entry e = (Map.Entry) it.next(); change_sm = (String) e.getValue(); change_play =(String) e.getKey(); //getKeyだけキャストがおかしいというエラーがでる data.sm[i] = Integer.parseInt(change_sm); data.replay[i] = Integer.parseInt(change_play); System.out.println(data.sm[i]+":"+data.replay[i]); i++; } return data; } class NumericComparator implements Comparator { public int compare(Object o1, Object o2) { int result=((Integer)o1).compareTo((Integer)o2); if(result==0) result=1; return result; } } }
447 :
442 :2008/02/18(月) 14:16:22
すいません初心者でコピペで作ったようなプログラムなのでどこを載せればいいのかわかりませんでしたTT エラーは Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at Sort.sort(Sort.java:34) 行は書き込むときに編集してしまったので違うかもです change_play =(String) e.getKey(); //getKeyだけキャストがおかしいというエラーがでる とりあえず↑を指してます
そらだめだよ。 Integerで格納したんだから、Stringにはキャスト出来ない。
>>446 Mapにputするときはkeyの部分をInteger型で入れている。
Integer型なのにString型へキャストしようとするからエラーになる。
>>446 重ねてJ2SE1.5(5.0)以降ならジェネリクスをお勧めします。
ついでに autoboxing も機能するので更に見やすくなります。
> map.put(new Integer(dif.replay[i]), change_sm);
key が Integer, value が String。そりゃ key でキャストエラーになります。
以下蛇足。
・変数は使う直前で宣言すること。
・元が int型なら Integer だけにしておけば良いのに。
・初期化、比較、更新があるなら while ではなく for を使うように。
・ついでに初期化部で int i = 0; で宣言すること。(添え字の使いまわしは厳禁)
451 :
デフォルトの名無しさん :2008/02/18(月) 14:36:27
みなさんありがとうございます! ジェネリスクも試してみようと思います><
>>443 set | find "TZ"
結果はカラ?
453 :
443 :2008/02/18(月) 14:45:46
>>452 レスありがとうございます。
TZ=JST
とでます。
454 :
デフォルトの名無しさん :2008/02/18(月) 15:37:48
ネイティブインターフェイスの使い方を教えてください
>ネイティブインターフェイス JNIのこと?
456 :
デフォルトの名無しさん :2008/02/18(月) 15:55:04
はい
458 :
デフォルトの名無しさん :2008/02/18(月) 16:05:55
dllの作り方教えてください
それはJavaじゃないよ
わからない問題があったので教えてください public class Test extends Thread{ private int i, j; public synchronized void run(){ for(int count = 0; count < 2; count++){ i++; j++; System.out.print("i=" + i + " : j=" + j + " "); } } public static void main(String[] args){ new Test().start(); new Test().start(); } } A. i=1:j=1 i=1:j=1 i=2:j=2 i=2:j=2 B. i=1:j=1 i=2:j=2 i=1:j=1 i=2:j=2 C. iとjの値は出力されるが表示順は一意ではない Testクラスは二つでき、runメソッドはそれぞれで動くため AにもBにもなりえる(実際は何回やってもBになるが)と思ってCにしたんですけど答えはBでした Aにはならないんでしょうか? 解説には「run()メソッドをsynchronized指定しているためrun()メソッド実行中は 他に制御が移ることなく処理されます」とあります
答はCであってます。 printの後ろに、 try { Thread.sleep(1000); } catch (InterruptedException e) {} を追加して実行してみてください。
たぶんスレッドでの(i=1:j=1 i=2:j=2)の組の出力は保証されるということなのだろうけど、 どっちのスレッドかわからんよな、これ。 Aは間違い。でも、結果的に出力は必ずBになるなw
えー、保証すらされないだろ
フルパスからファイル名を取り出す関数とかあれば 教えてください。 WinAPIのGetFullPathName()のようなやつがあれば・・・
File#getName()
wikiのリンク切れてる・・・ だれか原因わかる人います?
リンク切れてるっつーか、ホスティングしてる wikiroom が 最近落ちまくり & ほったらかし & メール送っても無応答状態らしい。
>>469 レスサンクス!
まじか…javacの設定方法探そうと思ったのに…
471 :
デフォルトの名無しさん :2008/02/18(月) 18:15:45
lass Test { int m; int n; Test(int i,int j) { m=i; n=j; } Test(Test testC) { m= testC.m; n= testC.n; } int sum(int i,int j){ return m + n + i + j; } } public class sample38{ public static void main(String[] args); Test test = new Test(10, 5); test.m++; test.n++; Test test2 = new Test(test); System.out.println(test2.sum(2, 3)); } } このプログラムの中の Test(Test testC) { m= testC.m; n= testC.n; がある意味がよくわかりません。テキストを読んでいてもよく分からないので教えてください。
いわゆるコピーコンストラクタってやつ
コンストラクタのオーバーロードじゃね
Java 的には clone() だな。
475 :
デフォルトの名無しさん :2008/02/18(月) 18:33:51
JNIはどうすんの
476 :
デフォルトの名無しさん :2008/02/18(月) 18:35:42
>>471 です。処理はどんな手順で進んでいくのですか?
どこまでわかるのか書け
オブジェクトはフィールド、メソッド、クラス、を持つとよく聞きますが、実際にオブジェクトを生成する際、フィールド以外の物も新たに作るのでしょうか? それとも状態を持つのはフィールドだけなのでメモリにはフィールドのみを生成するのでしょうか?
フィールドのみと考えていい
クラスとメソッドはほぼ一体。最初にクラスを参照したときにメモリ上に現れ static 宣言 されたフィールドとメソッドを持つ。非 static フィールドはインスタンスごとに作成される。
>>479 ,
>>480 素早く分かりやすい回答ありがとうございました。
ずっと気になっていたことだったので本当にすっきりしました。
482 :
デフォルトの名無しさん :2008/02/18(月) 19:23:08
>>477 Test test = new Test(10,5);
これを上の
Test(int i,int j) {
m=i;
n=j;
に入れて、つぎにmとnに1を足すまでは分かる。
Test(Test testC) {
m= testC.m;
n= testC.n;
これどんな処理してるん?
testCに渡された既存のTestオブジェクトの中身を 新しく作ろうとしてるTestオブジェクトにコピーしてる
Javaのコントロールパネルの出し方教えてくれ どこにもなくて困ってる
485 :
デフォルトの名無しさん :2008/02/18(月) 19:36:35
test
486 :
デフォルトの名無しさん :2008/02/18(月) 19:37:48
どういうときにコピーコンストラクタは使うの?
オブジェクトをコピーしたいとき
必要なクラスやライブラリが増えるとクラスパスの設定が面倒になりますが、 自分が書いたソースのクラスファイルを格納してるフォルダに全て突っ込んじゃえばいいと思うんですが、 この考え方は間違ってますか? 例えばDBのJDBCドライバを使うにはCLASSPASSに追加するかtomcatのcommon/binに入れたりするけど 前者の場合、無関係なプログラムにも影響を及ぼすし、後者の場合はコンテナを変えたらまた作業が増える。 自分が作ってるサーブレットのクラスファイルを保存してる場所にJDBCドライバを入れちゃえば全て解決な気がする。
Javaのアルゴリズム本はどれがオススメですか?
>488 間違ってる クラスが増えれば増えるほどクラスパスの設定の方が、クラスの競合とかの考慮より楽になる そんなことよりIDE使っているなら面倒な作業にはならんだろ
プリミティブ型も実はクラスある? 判別のために例外的に形だけあるってことかな int.classやらがあって驚いたわ。
Integer.TYPE
493 :
デフォルトの名無しさん :2008/02/18(月) 23:14:44
bolean b; b=true; ?ここを教えてください。 (b==false)が新になる。 bolean b; b=false; ?ここを教えてください。 (b==true)が新になる。
b=!b;
boolean
>>491 プリミティブ型はあくまでプリミティブ型で、そのクラスといったものはない。
あるのは、プリミティブ型を表すClassクラスのインスタンスで、各ラッパークラスで定義されている。
例えば、リフレクションAPIでメソッドの引数の型を指定する時などに使ったりする。
初心者用スレとはいえ質が低過ぎる 答える気すら起きん
画像ファイルを手動で振り分ける簡単なソフトを書いた。 表示して、設定してあるフォルダに振り分けるだけの簡単なソフトだ。 とりあえず、予定の作業は出来るようになった。 だが、アニメーションGIFの再生がおかしいことに気づいた。 「透過色」というのが上手く扱えていないようだ。 Toolkit.getDefaultToolkit().getImage("hoge.gif");で入手したImageを JPanelから導出したクラスのpaint(Graphics g)でdrawImageにかけているだけなのだが、 何か足りないようだ。 足りない部分は簡単に補える? それとも、意外に面倒?
ペイントコンポーネンツ
500 :
デフォルトの名無しさん :2008/02/19(火) 12:26:35
JSFの使い方を教えてください
すみませんが、質問です。 クラス継承についてですが、親クラス、子クラスに共通して、同名のパブリッ クなインスタンス変数があり、その初期値は親と子で違うとします。 子クラスのインスタンスを作り、それを親クラスの型の変数に代入した場合、 その変数のインスタンス変数には、親の価が入っています。 public class Parent { public String hoge = "親"; } public class Child extends Parent { public String hoge = "子"; } Parent x = new Child(); System.out.println(x.hoge); // => 親 System.out.println((new Child()).hoge); // => 子 要するに、パブリックなインスタンス変数は、子によってオーバライドできな いのです。メソッドと違って。 どうしてこれは、こういう言語仕様になっているのでしょうか? メソッドのようにオーバライドできてもいいと私は思うのですが。
どうしてだろう・・・ Parent[] xArray = { new Child01(), new Child02(), new Child03()} for( Parent x : xArray ) System.out.println(x.hoge); みたいに同じ変数名にアクセスして子独自の値が取れたら便利そうだよね。
実装は面倒だし(というか汚くなる)、効率の問題もある。 何より、変数をそんなに便利(に見える)にしてしまったら、 マルチスレッドとか大変になる。 オブジェクト指向の原則も何もあったもんじゃなくなるだろうが。
>>502 子の方に新しいhogeを定義しなきゃいいんじゃ?
public class Parent {
public String hoge = "親";
}
public class Child extends Parent {
public Child(){ hoge ="子"; }
}
Parent x = new Child();
System.out.println(x.hoge); // => 子
フィールドの隠蔽は普通に出来てるんだから面倒も効率も関係ないだろ。
Javaはフィールドは静的解決だからだろ 以上
付いていけん 馬鹿にも分かるように誰か説明してくれよ
フィールドは静的に(つまりコンパイル時に)解決できるから効率いいよね、ってこと。
>>506 は何か勘違いしているから無視してOK
スレッドとか関係ねーじゃん。
フィールドアクセスにはsynchronizedで制限かけられないだろーが
つまり静的解決にすれば効率いいけど柔軟性に欠ける 動的にすれば柔軟性は上がるが実行時の効率が落ちる そこでバランス取ってメソッドだけ動的にしたってこと?
フィールドを動的解決するとどんないいことがあるのか例を教えてくれ
まともな人と、ちょっと鈍い人と、どうしようもない馬鹿がいるっぽい
何か主張があるようだが強烈な表現力のなさで何を言いたいのかさっぱりわからん。 「フィールドアクセス」 は行為であって主体じゃないから synchronized でモニタ取れるわけないだろ。 this かそれに順ずるインスタンスに synchronized かけろよ。
Hoge hoge = new Piyo(); synchronized (hoge) { hoge.x = ""; } いちいちクライアントサイドでこんなことしたく無いだろ?ってことが言いたかったんだが
>>518 それ hoge.x が Piyo のフィールドかスーパークラスのフィールドかは全く関係なくね? って事。
synchronized(hoge.x) とした時にどっちのモニター取ってるか分からなくなるというならともかく。
>>514 悪いことの方は、以下の場合コンパイルエラーを出さないといけなくなる。
class S { int x = 0; int z() { return x; } }
class T extends S { String x = "1"; }
それは関係ないけど、フィールドアクセスが動的だと、 何も考えずに使ってしまうようなやつが絶対いるだろ? で、518のように書くやつなんているのか、と考えたときに、 いないだろうな、と。
フィールドがサブクラスから書き換えられないのって 単純に、フィールドはなるべく隠蔽されるべきって考え方からだと思ってたけど違うの?
書き換えられるよ、finalとかprivateじゃなければ
書き換えってオーバーライドのことね
親のフィールドをそのまま継承してるだけと、オーバーライドするのと、どう違うのか説明すれ
>>522 それは新しい話題? カプセル化の話?
上書き(override, オーバーライド)は動的処理。
仮にフィールドの動的処理が可能なら、カプセル化は簡単に崩壊する。
// メソッドを上書きせずに、フィールドだけ上書きすればよい。
privateメソッドがオーバーライドできないのと同じように、 privateフィールドもオーバーライドできなければ、別にカプセル化は壊れない オーバーライドしたいのはprotectedとかpublicだけだろ? 隠蔽だかカプセル化だかとは別問題かと
誰が正しいことを言ってるのかカオスだわ。と言いつつ私は526だったり。 言語規定を貼る作業に戻りますm(_ _)m
さっぱりわからん 誰かねんどろいどに例えてくれ
状況が逆なら逆で適当に自分流の解釈始めるだけだから、 決めの問題的な話題なんてどうでも良いんじゃないのか。
531 :
502 :2008/02/19(火) 18:38:57
どうやら収束したようなので、お礼を言わせていただきます。皆さん、ありが とうございました。 意外に思うかもしれませんが、自分は最初の質問以外、一件も書き込んでいま せん。自分の分からない点は全部、他の人がツッコんでくれました。このスレ は時々利用させていただいてますが、こんなのは初めてです。 レスの全部が理解できたとは言えませんが、大変勉強になりました。
>>486 Javaによるアルゴリズム事典
おすすめ
開発ではeclipse使ってるんですが、 わざわざeclipse立ち上げるまでもないちょっとしたファイルを作ったり編集したりするためのエディタが欲しいです。 具体的には、html、java、jsp、ビルドxml、単なるテキスト文…こういったファイルを編集します。 メモ帳ではあまりにも使いづらいので他を探してるのですがオススメのものは無いでしょうか
豊丸
サクラエディタ
>>533 eclipseを立ち上げっぱなしにしておけばいいのでは?
vim だな。
Mule。 馴れれば結構使える(と思う)けど馴れるまでが大変(だろうな)
eclipseのエディタ機能だけ使うことが出来る? わざわざプロジェクトとか作らないで
viとかvimって極度に嫌ってる人がいるよね 史上最悪のエディタだとか
んなこと言ってる時点で Sun の Java 使う資格はない。
史上最悪のコードというのなら分かるが エディタとしては中毒性が高い。
viとvimって何が違うの?
機能差が歴然。
eclipseの補完機能が優秀過ぎるから他のどのエディタ使っても物足りなく感じる
お尋ねします。 SortedSetを使い、ソートさせ、表示にはtoStingを使っているのですが、"[""]"の表示が出てしまいます。このカッコを表示させない方法はありますか? もしくは、違った方法でソートの結果を出力させられるのでしょうか? 教えていただける方、よろしくお願いします。
set.toString().substring(1, set.toString().length() - 1)
>>548 さん、早速ありがとうございます。
最後にもう1つだけ質問ですが、2つの結果を出す際に、1つ目の結果と2つ目の結果の間の","を消す方法はあるのでしょうか?
たびたび申し訳ありませんがよろしくお願いします。
set.toString().substring(1, set.toString().length() - 1).replaceFirst(",", "")
>>539 Remote System Explorerプラグイン入れれば、ローカルや、Telnet、FTP、SSH経由で
ファイルシステムにアクセスできる。
>>547 toStringはデバッグ出力などで使うものであって、
特定の書式にしたいのなら、自力で出力すべき。
552 :
539 :2008/02/20(水) 12:32:29
>>551 ありがとうございます!まさに探してた機能でした。
tomcatの起動について質問です。 現在linuxにtomcatを入れて開発を行っているのですが自動起動に失敗してしまいます。OS起動後に直接起動スクリプトを実行すると正常に起動します。 環境とバージョン CentOS5.1 32bit/jdk6/tomcat6 ログには以下のような出力があります。 文字制限に引っかかるため一部省略します。 -- 2008/02/20 11:47:00 org.apache.catalina.connector.Connector pause 致命的: プロトコルハンドラの一時停止に失敗しました java.net.SocketException: Network is unreachable at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:519) at java.net.Socket.connect(Socket.java:469) at java.net.Socket.<init>(Socket.java:366) at java.net.Socket.<init>(Socket.java:209) at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:486) at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:283) at org.apache.jk.server.JkMain.pause(JkMain.java:681) at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153) 2008/02/20 11:47:01 org.apache.catalina.core.StandardService stop 情報: サービス Catalina を停止します 以下試したこと。 ・自動起動を一番最後に持って行った(rc3.d/S99tomcat) ・F/Wの自動起動を停止 どなたか解決策をご存じの方がいたら教えてください。
eth0 起動してんのかよ。
>>554 eth0にグローバル、eth1にローカルを設定しています。
また、iptablesにてグローバルは25番のみIN/OUTを許可、ローカルは全て許可に設定しています。
iptablesの自動起動も止めてみたのですが、解決しませんでした。
556 :
デフォルトの名無しさん :2008/02/20(水) 19:00:05
アプレットに関する質問です。 アプレットを使って画像を表示させたいのですが、 アプレットビューアを起動するコマンドを打つと上手く表示されるのですが html形式のファイルを直接開くと画像が切れて表示されてしまいます。 htmlファイルを直接開いたときに画像が切れないように表示させるには どうすればいいでしょうか? よろしくお願いします。
557 :
553 :2008/02/20(水) 19:11:40
自己解決しました。 環境変数がちゃんと読めていなかったようです。
558 :
デフォルトの名無しさん :2008/02/20(水) 20:17:04
マイナスをプラスに反転させたいのですがどのように書けばいいのでしょう? 例えば-5を5にしたいです。 どなたかおたすけを・・・
x = -x;
560 :
デフォルトの名無しさん :2008/02/20(水) 21:17:13
Javaマルチスレッドで明示的にLockを書ける方法ってあります? lock(); func(); unlock(); みたいな
どうとでも書ける
>>324 Tが一つのクラスだけだったらスーパークラスは一つだけですよ。
スーパーインターフェースなら妥当でしょうか
>>564 superclassとdirect superclassの違いも知らないのか?
direct superclass と言いたいだけとちがうか。
567 :
556 :2008/02/20(水) 23:10:18
もう一度質問してもいいでしょうか(質問文が悪かった??) アプレットを作るにはxxx.javaとxxx.htmlという2つのファイルを作りますよね xxx.javaをコンパイルしてxxx.htmlというファイルに対してAppletviewerの コマンドを実行してやるとその際に表示されるアプレットは画像が切れずに キレイに表示されるのですが、xxx.htmlというファイルをクリックして 直接表示しようとすると画像が切れてしまいます。 画像が切れないように表示するためにはどうすればいいのでしょうか? よろしくお願いします。
ソース
xxx.htmlでアプレット用に指定している幅と高さが画像を表示するには小さかったってオチ?
if(1<=x<=18 & y==0){〜処理 ↑見たいな感じで"<="を使いたいんですけどどうしたらいいですか?
1 <= x && x <= 18
日本語にすると xは1〜18のいずれかで、かつ yは0 ってこと? if( (x >= 1 && x <= 18) && y==0 )
>>569 ああ画像が切れるってそういう意味なのか。
574 :
デフォルトの名無しさん :2008/02/21(木) 10:26:40
質問です。 HashMap<Integer,String>[] map = new HashMap<Integer,String>[3]; という配列を作ろうとしたときに、コンパイルしようとしたら 汎用配列を作成します。 というエラーが出てしまいます。調べてみてもさっぱり理解できません。 よろしければご教授お願いします。
>>574 ジェネリクスはコンパイル時のチェック機能。
コンパイルした後は HashMap という型情報しか存在しない。
よって、その型の配列が作成される。
つ ArrayList<HasMap<Integer, String>>
577 :
デフォルトの名無しさん :2008/02/21(木) 15:47:43
tomcat5のJDBCレルム機構に対して、サーブレット内からプログラマが任意のタイミングでユーザ認証を済ませる方法を探しています。 contextA/auth/AuthServlet contextA/noauth/NoAuthServlet web.xmlで/auth/*を認証ゾーンとして指定。 NoAuthServlet内から、プログラマーが自前でユーザIDとパスワードを使って/auth/*ゾーンの認証を済ませたいのですが どうすればできるでしょうか? 認証を済ませる=HttpServletRequest#getUserPrincipal() != nullという意味です。
578 :
デフォルトの名無しさん :2008/02/21(木) 16:00:26
質問です。 初心者丸出しの質問ですみません。 同じパッケージ内のクラスを使うにはどうしたらいいのでしょうか? よろしければご教授お願いします。
>>578 それらのパッケージ名とクラス名は何でしょう?
それと、何を何処までやって出来なかったのか。
581 :
デフォルトの名無しさん :2008/02/21(木) 17:15:41
質問です。 正三角形の中点を中心に1回転させるにはどうすればいいですか? マルチスレッドとアフィン変換を利用して回転させたいんですが、角度を細くするほど誤差?で変形してしまいます。今のとこ30゜ぐらいが限界です! 下手文ですみません
独学でjavaを勉強してるのですが、データベースとの連携の手段が色々あり過ぎてどれを使えばいいのか分かりません。 JDBC、EJB、Hibernate、これらはどういう関係にあるんでしょうか? 例えばEJBを実装すればJDBCやHibernateは要らないのでしょうか? 自分が調べた限りでは、 実際の開発ではEJBが普通だが、小規模な開発ではHibernateを使い、もっと単純なものならJDBCで済ます って印象なんですがこんな感じで当たってますか?
当たってね
584 :
デフォルトの名無しさん :2008/02/21(木) 18:26:46
abstract class Test { abstract void calc(int i); void printNum(int i) { System.out.println(i); } } class ExTest extends Test { void calc(int i) { int j=i*i; printNum(j); class ExTest2 extends Test { void calc(int i) { int j=i+i; printNum(j); public class sample46x { public static void main(String[] args) { int i =5; int j; Test[] ex_test = new Test[2]; ex_test[0]=new ExTest(); ex_test[1]=new ExTest2(); for(j=0; j<2; j++); ex_test[j].calc(i); これなんですけどコンパイルはできるんですけど、実行するとこんなの出ます。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at sample46x.main(sample46x.java:28) どこが原因なんでしょうか?
585 :
デフォルトの名無しさん :2008/02/21(木) 18:36:37
}は省略してあります
>>584 >for(j=0; j<2; j++);
これだな
587 :
デフォルトの名無しさん :2008/02/21(木) 18:51:20
ありがと!気づかなかった!集中せねば!!! 渇っ!
588 :
デフォルトの名無しさん :2008/02/21(木) 19:23:00
EJBから同じホスト内のbatをたたきたいんですが、 どういう方法があるでしょうか。
589 :
デフォルトの名無しさん :2008/02/21(木) 19:24:44
RMIの使い方について詳しく教えてください
>>590 Runtime#execはEJBからは使えないはず
592 :
デフォルトの名無しさん :2008/02/21(木) 19:40:43
>591 なんで?使えるよ、ふつーに
>>582 DB関連のAPIが林立しているのは、APIの進化変遷の跡。
最初から使い分けを意図して作られた物じゃない。
初期のEJBは詰め込みすぎで設計がクソで生産性が低いので、
小さくない規模の開発でも、Hibernateなどの他のマッピングフレームワークは使ってたよ。
594 :
デフォルトの名無しさん :2008/02/21(木) 21:38:57
質問させてください。 FileInputStream fis = new FileInputStream(file); FileChannel srcChannel = fis.getChannel(); // 一つのデータは 2 byte (16 bit) ByteBuffer buffer = ByteBuffer.allocateDirect(length * 16); buffer.order(ByteOrder.LITTLE_ENDIAN); // 読み込み srcChannel.read(buffer); srcChannel.close(); fis.close(); buffer.clear(); int ch1, ch2; for(int i = 0; i < 1000; i++){ ch1 = buffer.get() & 0xff; ch2 = buffer.get() & 0xff; data[i] = (ch1 | (ch2 << 8)) & 0xffff; } buffer.clear(); int[] data という配列に バイナリファイル中の符号なし short を読み込みたいのですが、 getShort() をつかったら、符号ありで読まれてしまったので、上のようなコード でやっています。 処理が遅い(無駄計算が多い)気がするのですが、もっと良い方法はありますでしょうか
595 :
デフォルトの名無しさん :2008/02/21(木) 22:10:42
"แอมเพอร์แซนด์" 上記のような文字列が部分的に含まれているファイルを SQLに入れる作業をしているのですが、 これを読み込むとunrecognized tokenエラーが出ます このような文字の扱いはどのようにすればよいでしょうか
>>594 data[i] = buffer.getShort() & 0xffff
でダメかね?
>>595 ファイル読み込むときのエンコーディング正しく指定してる?
JAVAとC#どっちがリバースエンジニアリングに強い? どっちも変わらない?
そんな高度なことできるやつがそんな質問するとは思えないのだが
強いってのはやりやすいって意味か? それともやられにくいって意味か? 基本的にJavaはネイティブにしない限りソースへ復元は簡単な方 C#はどんだけネイティブ系使っているか次第
逆コンパイルはどっちも超簡単でほぼ完璧だよ
602 :
582 :2008/02/21(木) 23:00:01
>>593 ありがとうございます。
色んなベンダから別々に色んな技術が生まれてカオスな状態という感じでしょうか
デフォになってるものも無いようなので自分で色々試してみます。
603 :
594 :2008/02/21(木) 23:02:25
>>596 ああ、なるほどー。と思って実装してみたら、逆に少し遅くなりました。(データは正しく読めてました)
以下のようなコードを書いてベンチマークしても、やっぱり遅くなってましたorz
public class ReadTest {
public static final int length = 3800 * 2600;
public static int[] data = new int[length];
public static ByteBuffer buffer;
public static void main(String[] args){
try{
buffer = ByteBuffer.allocateDirect(length * 16);
buffer.order(ByteOrder.LITTLE_ENDIAN);
for(int i = 0; i < 20; i++){ read1(); read2(); read2(); read1(); System.out.print(".");}
long t = System.currentTimeMillis();
for(int i = 0; i < 10; i++){ read1(); }
System.out.println("\r\n" + (System.currentTimeMillis() - t) + " ms");
t = System.currentTimeMillis();
for(int i = 0; i < 10; i++){ read2(); }
System.out.println((System.currentTimeMillis() - t) + " ms");
} catch (Exception e){}
}
public static void read1() throws Exception{
FileInputStream fis = new FileInputStream(new File("hoge"));
FileChannel srcChannel = fis.getChannel();
for(int i = 0; i < 4; i++) fis.read(); // ヘッダ
buffer.rewind();
srcChannel.read(buffer); srcChannel.close(); fis.close(); // 読み込み
buffer.clear();
for(int i = 0; i < length; i++){ data[i++] = buffer.getShort() & 0xffff;}
}
/* read2 は読み込み部分が古いほう(省略) */
うーん、不思議ですねえ。 getShort() は遅いんでしょうか。。。
でかい画像を大量に処理していて、読み込みが25%くらい閉めているので、短くしたい・・
604 :
594 :2008/02/21(木) 23:04:31
最終行の data[i++] は data[i] のミスです
>>600 やられにくいって意味でとらえてください
>>601 そうですか、使いやすくて良い言語だけど自分が作ったソフトが逆コンパイル
されるのは困るな
企業で開発するときは何か対策しているのでしょうか?
なんで困るんだ?
607 :
デフォルトの名無しさん :2008/02/21(木) 23:28:14
>>597 ありがとうございます
UTF-8で読み込んでいます
System.out.println("แอมเพอร์แซนด์");
これでエラーになるのはなんででしょうか
แอมเพอร์แซนด に一致する情報は見つかりませんでした。
こんばんは。 CDを管理するプログラムを作っているのですが、mainクラスとCDクラスがあります。 管理する数は、5つでその分のCDインスタンスをつくり、価格と名前のを入力しコレクションで管理すると言うプログラムです。(重複可で名前でソートさせます) このプログラムを作ってみたのですが、Collections.sort(list);としたのですが、下線のびっくりマークのエラーが出てしまいます。 内容は、『型の安全性:型Collectionの総称メソッドsort(List<T>の未検査の呼び出しsort(List)がありました』と表示されてしまいます。 このようなエラー表示にはどのような対処をしたら良いのでしょうか? アドバイスお願いします。
>>609 -source 1.4
をコンパイルオプションに付ける
ああ、IDE使ってるのか JDKレベルを1.4にする
>>609 です。
Eclipse 3.1を使ってます。5.0から1.4にするという感じでよいのでしょうか?
コンパイルオプションの変え方がわからないので調べてみます。
>>612 JDK5以降で言語仕様に入れられたジェネリクスというものに関わるエラー。
「java ジェネリクス」で調べてみて。
eclipseならリファクタリング機能の中に、
ジェネリクスを使用していないソースを使用するように変更してくれる機能もあるけど、
とりあえず、ジェネリクスを理解してからにしたほうがいい。
>>612 です。
アドバイス、ありがとうございます。
ひとまず、1.4に変更したところちゃんと動作しました。ジェネリクスの勉強もしてみます。
java覚えて女性関係のメリットになったことってありますか? 真剣な質問です また、女性関係に強い言語は何でしょうか?
つまんね 他でやれ
Javaの勉強をしている初心者なのですが 今コードを書くためのエディタを探しています。 よいエディタを紹介していただけませんか?
vivi
>>605 Javaと.NETどちらとも、逆コンパイラはある。
どっちも中間言語を使うタイプなので、逆コンパイラを作りやすいらしい。
そしてその対策として、obfuscator(難読化ツール)がどちらにもある。
単に、シンボル名(クラス名、メソッド名、変数名)をランダムな文字列に
置き換えて、逆コンパイラが出力したソースを読みにくくする、
ってだけだけど。
ジェネリクスについての質問が多いのは 初心者には難しいので入門書の段階では取り扱わないからか それとも基本1.4で5.0要素は申し訳程度にしか書いてない本が 未だに主流だからか
直観的でなくて罠が多いからな
>>620 俺のとこでは依頼される仕事も未だに1.4全盛なんだよなー。他の会社の人に聞いてもそうだという。5.0に移行するのはいつになることやら。。
>>622 Javaをネイティブ化したいだけならGCJもあるよ
速くなるとは限らないが
Javaが見た感じ重いのはSwingとかライブラリのせいもあるから…
626 :
デフォルトの名無しさん :2008/02/22(金) 11:50:08
ジェネリクスを使うだけなら難しいか? Foo[] と ArrayList<Foo> が初心者的には理解しやすくなると思うんだけど 単なる入門書の怠慢だと思う
始めるんだけど、どの本がオススメですか?
初心者で失礼します。どう修正していいかわかりません。宜しくお願いします。 import java.util.Scanner; public class tes { public static void main(String[] args) { char stuname; Scanner kb = new Scanner(System.in); stuname = getStuN("Please enter the student name: ", kb); } //get studnt name public static char getStuN(String str, Scanner kb) { System.out.print(str); char sname = kb.nextLine(); System.out.print(sname); return sname; } } --------- tes.java:15: 互換性のない型 検出値 : java.lang.String 期待値 : char char sname = kb.nextLine(); ^
>>630 できました! ありがとうございましたm(_ _)m
633 :
デフォルトの名無しさん :2008/02/22(金) 18:03:04
JAVAからpostgresSQLを操作するプログラムを作成しております。 JAVAからpostgresのでーたをバックアップする方法を知りたいのですが、 JDBCを利用して、postgreSQLのpg_dumpを操作する方法はあるのでしょうか。 また、pg_dump以外にも、JDBCにてデータのバックアップを出来る方法があれば、 ご教授お願いいたします。
>>633 DatabaseMetaData#getTablesで全テーブルを取得して全行クエリしてファイルに書き出すとか・・・
それですべて復元できるかわからないけど
Runtime#execでpg_dump呼び出す方が簡単な気がする
>>634 >DatabaseMetaData#getTablesで全テーブルを取得して全行クエリしてファイルに書き出すとか・・・
それは遅そうだw
>Runtime#execでpg_dump呼び出す方が簡単な気がする
わしもそう思う。
何かの操作が必要だったら、シェルかバッチの中でJavaプログラムで操作したのちに
バックアップを走らせた方が効率が良さそうだが。
636 :
633 :2008/02/22(金) 18:44:15
634,635 どうもありがとうございます。 早速、試してみます。
今どきJDBCなんて使う必要あるの?
教えてください。 環境:Oracle JDBC PreparedStatementとResultSetを使用し、 SELECTを実行しています。 通常問題ないのですが、バインド変数(?)が11個以上あるSQLを実行した場合、 かつ、レコードのヒット件数が11件以上を超えている場合、 11件目のデータ取得時に「配列の範囲」を超えた、という例外が発生します。 バインド変数はsetStringで1から順に設定し、 設定内容についても問題ないです。 ※デバッガで確認済み SQL自身は問題なく、SQLExceptionが発生しているわけでもありません。 何か回避策はあるのでしょうか?
まずスタックトレースを貼れ。その話し振りだと単なるバグの可能性が素敵連
Cで言うところの構造体の代わりにクラスを使っています。 内部変数はInt型が2つ、Boolean型が1つの小さなクラスです。 クラスの2次元配列として2000x2000のインスタンスを生成するコードを書いたら インスタンスを生成する箇所(以下)で for(int j=0;j<2000;j++){ for(int i=0;i<2000;i++){ box[i][j] = new Box(); } } java.lang.OutOfMemoryError: Java heap space というエラーが出てしまいました。 メモリの使い方が下手なんだと思うのですが、 よい対処法が思いつきません。 何か手はあるでしょうか?
>>641 ありがとうございます。
そういうやり方もありそうですが、
もう少しコードの書き方について考えてみます。
tomcatは内部でjspをコンパイルするためにjdkを使っていると聞いたのですが tomcatをインストールする場面ではjdkではなくjreのパスを指定しますよね その後もtomcatの設定でjdkの場所を教えたつもりは無いのですが jspをちゃんとコンパイルしてくれてるみたいです。 tomcatはどうやってjdkを認識してるんでしょうか?
>>644 JSPのコンパイル用にIBMのJDK積むようになった。
昔はJDKの指定が必須だった。4までだったっけ?
645 :
643 :2008/02/23(土) 00:52:46
>>644 なるほど〜そういうことだったんですね。
モヤモヤしてたのがスッキリしました。
ありがとうございました。
>>640 Int型というのは存在しない
Booleanの代わりにbooleanを使ったらどうか?
>>640 試してみた
Sun JRE 1.6.0_04
Box[2000][2000] の場合 107MB
int[2000][2000][2] + boolean[2000][2000] の場合 110 MB
648 :
デフォルトの名無しさん :2008/02/23(土) 03:59:50
new って複数のスレッドから同時に実行できるんですか?
>>648 意味が分からん
どういう状況を想定しているのか擬似コードでもいいからシンプルな例で示せ
>>647 まあなんですか、[2000][2000][2] ではなく、[2][2000][2000] をお勧めします。
ついでに用途が合えば boolean[][] ではなく、java.util.BitSet を。
>>648 コンストラクタはスレッドセーフかって意味なら答えは一般的にはノー
652 :
648 :2008/02/23(土) 04:16:48
作ったプログラムのどうも動作が遅くて、スレッドダンプをみてみたらほとんどのスレッドが コンストラクタ java.lang.AbstractStringBuilder.AbstractStringBuilder(int capacity)内の value = new char[capacity]; ↑のところでブロックしてたので、非同期でnewは呼べないのかなと思ったんですが ひょっとするとcapacityが大きいときだけ同期呼び出しだったりします?
653 :
648 :2008/02/23(土) 04:18:31
>>651 つまり非同期には呼ばれないってことですね。
654 :
デフォルトの名無しさん :2008/02/23(土) 04:40:17
hou
>>652 ヒープに配列を生成する過程でロックされてそうだ。
仮に非同期に実行できたとしても体感時間は変わらないと思う。
仮にヒープの拡張に時間が掛かってるなら、
最初からヒープを必要な分大きくしておけば少しは早くなる。
あとは初期にやたら時間が掛かるなら、確保するサイズを小さくして、
最大確保を遅延させるのはどうか。
確保するたびに前のゴミが出るのと時間が掛かるけど。
>>652 確保するサイズが大きいとスレッドごとのプールから取れなくなるから同期が必要になる
というかそんな大きなStringBuilderをそんな頻繁に確保するってことがまずい気がする
GC起きまくってないか?一度 -verbose:gc で見てみ
確保したのを使いまわすと改善するんじゃないかな
657 :
お :2008/02/23(土) 11:14:43
j2dk1.4.2を使っているのですが、 javacが使えず、環境変数の設定をすると、一度できたんですが、 2回目からできなくなりました。 しかも変数の設定を変えていたので元のがどんなのだったかがわかりません…。 環境変数の、Pathを教えて下さい。
659 :
お :2008/02/23(土) 11:29:59
読んでもよくわかりません。どなたかー
>>655 >>656 なるほど!スレッドごとのプールから取れなくなるからってことですか。
このStringBuffer自体はデバッグのための文字列だったのでここの部分を取り払ったら
ロック争奪がなくなってスムーズに動きました。
ありがとうございました!
>>647 >>650 いろいろありがとうございます
Intのうち一つはflagで3種類の値しかとらないのでboolean2つで頑張って
もう一つのIntをshort型にするとだいぶ減りそうな気がしました。
後で実装してみようと思います
boolean2つのところはBitSet?を使えばいいのですかね。。
後でjavadoc読んでみます。
下記の構造でメインクラスtestから、VelocityのgetTemplateをコールしたところ、エラーが出ました。 test.jar +-dir1 +-test.class +-templ.properties これで、 > java -jar test.jar と実行すると ResourceManager : unable to find resource 'templ.properties' in any resource loader. というエラーが出ています。 test.jarのおかれているディレクトリにtempl.propertiesがあるか?を探しているようで、 test.jarの中を探していないみたいです。 Main-Class:はdir1.testと指定してあるのでmainはコールできてます。 なにか指定し忘れてることあるんでしょうか。。。お願いします。
BufferedImageのディープコピーの仕方を教えてください
もう1回BufferedImageを作れ
Javaの初心者にExceptionのことを教えたいのですが、 J2SEのクラスの、Exceptionをthrowするメソッドで、 一番基本的で分かりやすいものって何だと思いますか? コンストラクタじゃない普通のメソッドでお願いします。
ぬるぽ
NumberFormatException
いや、Exception自体じゃなく、 Exceptionをスローするメソッドです。 例えば、FileOutputStream#write(byte[] b)とか。
>>666 // Exception 自体は throw も catch もするな。を教える
実行時例外なら、Integer.parseInt(String) で NumberFormat
普通のヤツは意図的に起こすだけなら ClassNotFound とか IO とか
NumberFormat は良い例ではないのよね。
実行時例外の割りに、catchされるように組み込まれてるし。
まあ、別に無理に教える必要は無いんじゃないかな
それよりも知らないメソッドは API doc で調べるように仕込むべし。
ありがとうございます。 実行時例外じゃなくて、 IOExceptionとか、メソッド呼び出すと絶対try catchしないといけないヤツです。
new FileInputStream ファイルがなければFileNotFoundExceptionを投げる
って、コンストラクタはだめなのか じゃあ Socket#connect 接続できなければ IOException
コンストラクタでないわかりやすいもの・・・ ImageIO#read(File) とか?
Stream系のIOExceptionじゃね? try-catch-finally と合わせて覚えるのがセオリーかと
みなさんありがとうございます。 finnalyも合わせて、Stream系で説明してみようと思います。
IOException もいいが ParserConfigurationException も捨てがたい
学校でちょっとプログラムに興味あって色々自分で勉強してみたんですがJavaって簡単過ぎてつまらないんですがこんなので仕事になるんでうか? HTMLも簡単だったし仕事では何やってるんですか?
オナヌー
>>678 ひとつだけいえることはつまらないと思う人は
これを仕事にしてはいけませんよ。
簡単か難しいかと、仕事になるかならないかは、関係ないからな なにせ「単純労働」っていう言葉もあるくらいだ
言語は簡単でいいんだよ
27歳になってJAVAで開発チームに入る事になりました。 今までの業務開発経験は、COBOL3年あとはVBAぐらいですかね・・。 4年程前にSUNJAVA1.4の資格は取得したんで基礎的な事は大丈夫と思います。 実際に業務で役に立つ為に、他にどんな勉強しておけばいいですかね? とりあえずTOMCATとMYSQL入れて、なんか作ってみようかなと思ってますが、 業務レベルでは全く無意味なんでしょうね・・
tomcatとmysqlが何で無意味なの?普通に業務レベルで使うのに。 とりあえずeclipseで簡単なwebアプリでも作ってみたら?
685 :
683 :2008/02/24(日) 01:06:18
やっぱ業務でも使うんですね。 いや、簡単な事やっても業務レベルでは通じないかなぁと。 でも基本的な事分かってると大分入りやすいですよね。 適当にDB構築してWEBアプリ作ってみます。
適当にDB構築できちゃうレベルなら心配無用だと思うけど…
687 :
デフォルトの名無しさん :2008/02/24(日) 08:34:52
class calcException extends Exception { } public class sample53 { public static void main(String[] args) { try { calc(2,2); }catch (calcException e) { System.out.println("calcExceptionが"+"throwされました"); } } static void calc (int i,int j) throws calcException { if(i == j) { calcException ce = new calcException(); throw ce; } System.out.println(i*j); } } これなんですけど、 if(i == j) { calcException ce = new calcException(); throw ce; この部分でどういう処理を行っているのですか?
普通に例外なげてるんじゃね
689 :
デフォルトの名無しさん :2008/02/24(日) 09:23:16
throw ceってなんですか? もしiとJの値が同じなら、オブジェクトを作成して、その後はなんですか?
だから例外投げてるんだよ
691 :
デフォルトの名無しさん :2008/02/24(日) 10:10:44
たびたび申し訳ないが、 static void calc (int i,int j) throws calcException この部分はこの式は例外を投げる式ですよってこと?
このメソッドはcalcExceptionを投げ得ますよってこと。
693 :
お :2008/02/24(日) 10:27:48
>>660 [追加します]とありますが全部変えてしまいました。全部どう記述するのか聞きたいです。
695 :
デフォルトの名無しさん :2008/02/24(日) 11:13:00
696 :
お :2008/02/24(日) 11:30:48
wbemの場所ってわからないことないですか?
697 :
お :2008/02/24(日) 11:36:33
設定方法わかりませーん
698 :
デフォルトの名無しさん :2008/02/24(日) 11:57:29
@F8押す→3秒待機→F8押す Bこの処理を500回ループした後 AF7押す→1秒待機→F8押す→1秒待機 C処理Aを30回繰り返し@に戻る こういうプログラムはjavaだったら可能でしょうか? ゲームに使うのでVBみたいにF8押したことにしますってのではなくて 実際に押すことが重要なんです
>>698 >>96 VB が何をやってるのか知らんが、
人がキーを押したときと同じような結果をシミュレートすることは可能。
// 自動演奏みたいにキーボードが動く……誰かそういうヤツを作ってください。
700 :
デフォルトの名無しさん :2008/02/24(日) 12:16:39
VBではSENDKEYなるメソッドがあり それを使うとたとえば F8押した時、1+1の処理をするというプロシージャがあった場合 SENDKEYによって1+1を呼び出すことはできますが 実際にF8を押すという動作がウィンドウズ内で行われている というわけではないようです (押した時のようにキーをへこませるといわけではありません。念のため) ようするに、キーを押した後の処理ではなく、キーそのものを押したことを キーを押さずにウィンドウズに認識させたい
701 :
お :2008/02/24(日) 12:22:46
設定方法わかりませーん
>>700 なるほど。イベントのトリガーとして登録させてるようなものですかね。
ということで、96 を実行することで少しは感動してもらえそうな予感。
703 :
デフォルトの名無しさん :2008/02/24(日) 12:31:18
どうやらjavaなら可能なようですね 勉強します
704 :
11 :2008/02/24(日) 12:31:27
画面A,B,Cとあり画面CのB画面終了ボタンを押すとB画面のみ終了させたいと考えてますが さっぱりわかりません。どなたかご教授願います。 /*ソースここから*/ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Gamen extends JFrame implements ActionListener{ private JButton b1 = new JButton("B画面表示"); private JButton b2 = new JButton("終了"); private JButton b3 = new JButton("C画面表示"); private JButton b4 = new JButton("B画面終了"); public void GamenA() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(b1); getContentPane().add(b2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("A画面"); setSize(200, 100); setVisible(true); b1.addActionListener(this); b2.addActionListener(this);} public void GamenB() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(b3); getContentPane().add(b2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("B画面"); setSize(200, 100); setVisible(true); b3.addActionListener(this); b2.addActionListener(this);} //続きます
705 :
704 :2008/02/24(日) 12:33:21
すみません
>>704 は11さんとは無関係です。 続き
public void GamenC() {
getContentPane().setLayout(new FlowLayout());
getContentPane().add(b4);
getContentPane().add(b2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("C画面");
setSize(200, 100);
setVisible(true);
b4.addActionListener(this);
b2.addActionListener(this);}
public void actionPerformed(ActionEvent e){
if(e.getSource() == b1){
Gamen bb = new Gamen();
bb.GamenB();
}else if(e.getSource() == b2){
System.exit(0);
}else if(e.getSource() == b3){
Gamen cc = new Gamen();
cc.GamenC();
}else if(e.getSource() == b4){
//B画面終了ボタンを押してBのみ画面を終了させたい。
}
}
public static void main(String[] args) {
Gamen aa = new Gamen();
aa.GamenA();
}
}
/*ソースここまで*/
よろしくお願いします。
>>698 Javaはある程度のことしかできないし、そういうものであれば既存のソフトで腐るほどありますよ。
自分でやりたいなら何らかのスクリプトを使うことをおすすめしておきます。
一つ一つのフレームは、その他のフレームのインスタンスを持ってないから現状では無理。 閉じさせるフレームのインスタンスを持たせて、それでactionPerformedでdisposeしてやれば実現できるけど・・・継承とかそこらへんの意味を見直した方がいいと思うよ。
708 :
705 :2008/02/24(日) 12:53:30
>>707 様
ありがとうございました。
勉強しなおしてきます。
709 :
638 :2008/02/24(日) 13:30:03
>>639 業務なのでスタックとレースはちょっと貼れません・・・
実際に発生している問題は
パターン1
setStringでパラメータを19個設定
検索ヒット件数が10件以下
→問題なし
パターン2
setStringでパラメータを19個設定
検索ヒット件数が11件以上
→ResultSetでlastや、11件目のnextで例外発生
スタックとレースに配列の範囲外を指定(詳細19)というエラーが出力される。
※パラメータを15や11にした場合も同様に(詳細15)のように出力される。
パターン1と2で使用しているSQLは全く同一。
パターン1と2の違いはパラメータの1つの日付の範囲を数ヶ月広げているだけ。
パラメータを全て直接SQLに埋め込んだ場合、データが件数分正しく取得できます。
パラメータに上限とかあるのでしょうか?
SQLはそれなりに大きいです。100行程度。
710 :
お :2008/02/24(日) 14:16:01
設定方法わかりませーん
>>709 Oracle なら、詳細19とか詳細15とかマニュアル嫁
それの何処に配列が出てくるのか謎
問題ない部分だけの抜粋でもいいからスタックトレース貼ったらどうか。 例外は本当にOJDBCで出てるのか?
713 :
638 :2008/02/24(日) 14:29:54
ResultSetやPreparedStatementをデバッガで除くと、
設定したパラメータが正しい内容で格納されているのは確認しています。
出力される例外はArrayIndexOutOfBoundsExceptionです。
ここでパラメータの数が「詳細 パラメータ数」と表示されます。
>>711 まず、SQLExceptionじゃないです。
上記通り、19とか15はパラメータの総数が出力されます。
謎ですが。
>>712 そもそも業務で外部接続できないので貼れません・・・
例外は、ResultSetのnextが11回目に呼び出されたタイミングで発生します。
ResultSetの処理の中でArrayIndexOutOfBoundsExceptionで死亡します・・・
test
固定長*可変長の配列を作りたいです。 (i方向が固定でj方向が可変、初期は空) import java.util.*; public class Test2{ public static void main(String[] args){ ArrayList<Integer>[] a = new ArrayList<Integer>[10]; for(int i=0; i<a.length; i++){ a[i] = new ArrayList<Integer>(); } a[0].add(3); System.out.println(a[0]); } } こう書きましたがエラーが出ます。 どこがおかしいのでしょうか?
716 :
ちんこ ◆GbXlaaQNk. :2008/02/24(日) 17:05:45
age
固定長のちんこなんて要りません
1〜nの整数の順列をすべて表示するプログラムを書いてみたのですが もっと簡単にやる方法とかここはこうしたらいいとかあったらアドバイスお願いします import java.util.*; class PermutationTest { public static void main(String[] args) { Permutation perm1 = new Permutation(4); perm1.PrintPermutation(); return; } } class Permutation { private int N; private int[] ans; Permutation(int N){ this.N = N; this.ans = new int[N]; } void PrintPermutation() { int[] a = new int[N]; for (int i = 0; i < N; i++) { a[i] = i+1; } this.subPrintPerm(a,0); } 続く
まぁまぁそういわず。 なんでエラーが出るのかさっぱり分からなくてね。
>>718 の続き
private void subPrintPerm(int[] a, int idx) { // 配列a[]から1つ取り出して残りで再帰呼び出し
if (a.length == 1) {
ans[idx] = a[0];
ansを表示;
return;
}
for (int i = 0; i < a.length; i++) {
int[] b = new int[a.length-1];
ans[idx] = a[i];
int j=0;
while (j < b.length) {
if (j < i) {
b[j] = a[j];
} else {
b[j] = a[j+1];
}
j++;
}
this.subPrintPerm(b,idx+1);
}
}
}
>>721 既出でしたね。
でもそのレスを読んでも分かったよな分からんようなです。
具体的にどうすればいいか示してもらえませんか?
今まで書いたソースを消してクソして寝ろ そして二度とブラウザを開かない
>>723 分からないんだろ?そういえばいいのにw
どう考えてもおれのコードと
>>574 のコードは問題点が違います。
おれが書いた
>>715 のコードはどこがミスがあるのか
指摘出来る人はいませんか?
>715 ジェネリックスを使用したList<E>の配列は作れない、言語仕様的に。 したがって、int[][]のように2次元配列にするか、List<List<Integer>>のようにListにListを入れるべし
ArrayList入れたいのかInteger入れたいのかはっきりしろ。
可変長のちんこ入れたいです。
ArrayList<Integer>[] a = new ArrayList[10]; でいいんじゃね?
現在作成中の
ダイクストラ法による最短経路探索プログラムです。
http://www.uploda.org/uporg1268729.zip.html うpしました。
これでListを使えると便利なので使いたいと思ったのですが、
具体的に今findShortestPath @ MainPanel
というのを実装しています。
ここで、toArray周辺でエラーが出て、どういう事だかさっぱり分かりません。
エラーの原因が分かる人は教えてください。
730 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
さっぱり分からない。
カレントディレクトリを移動してからEXEを実行したいのですが、下のように書いてもhoge.exeが実行されません。 どう書けばよろしいでしょうか? Runtime.getRuntime().exce(new String[]{"cmd.exe","/C","cd C:\hoge","hoge.exe"}) hoge.exeが自分のルートにファイルを出力する為、カレントディレクトリを移動しなければならず この処理を含む実行ファイルをhoge.exeのフォルダに置くのは避けたいです。
ProcssBuilder にカレントディレクトリ指定できるものがあったとオモ
JMenuBarの中にメニューを2つ追加し、それぞれのメニューの中に 同じ名前のJMenuItem、同じActionListenerをセットした場合、 それぞれのMenuItemが選択された際の処理を変えることは可能でしょうか ネットや書籍を調べてみたところ、JMenuItemが選択されたイベントが発生した場合、 そのイベントの名前をgetActionCommandで取得し、条件分岐を行っていましたが 同じ名前のItemが存在する場合の条件分岐方法を見付けることができませんでした 諦めてそれぞれのItemに別々のActionListenerクラスをセットするしかないのでしょうか
getSourceとJMenuItemを==で比較するという手もある
同じ名前のJMenuItemってのが設計おかしくねえか? 見た目が同じだとしても場所とか違う識別子にはなるだろ
うまくいかないでは解らん。 例外が発生するのか、処理がそこを通らないのか、ちゃんと情報を出せ。 あと、直リンできねーぞ
>>734 レスありがとうございます。
できればRuntime.getRuntime().execでやりたいと思うのですが、無理でしょうか?
やはりjdk1.5ならProcssBuilderを使った方が良いのかな・・・。
>741 System.out.println( "ユーザー表示ボタンが押されました" ); って行は通っているのでOK? あとメッセージの表示は問題ない? System.out.println( "アドレスを新規登録しました" ); って行は通ってないのか?
743 :
デフォルトの名無しさん :2008/02/24(日) 21:24:27
tomcat5.5 eclipse を使用してwebアプリを作ろうと思っています。 一つのプロジェクトで複数のTomcatを動かそうと思っています。 この場合、ルートディレクトリが複数で ソースの出力先フォルダ一つしか設定できません。 ということは片方のルートディレクトリにしか サーブレットのクラスは置けないため、 片方のtomcatからしかソースを参照できません。 こういった場合どうすればよいでしょうか。
早速見ていただきありがとうございます。
>>742 >System.out.println( "ユーザー表示ボタンが押されました" );
の部分はシステムコンソールに表示されているため
通っているものと思われます。また、メッセージも
""で囲まれている部分はきちんと表示されています。
>System.out.println( "アドレスを新規登録しました" );
この行もシステムコンソールでは表示されているので
通っていると思うのですが・・。
すまんがだれか、
>>743 をエスパーしてくれ。
何となく解る気もするが、
なんで、エクスポートしたwarファイルをもう一つのTomcatに置くのではダメなのかが解らない。
746 :
デフォルトの名無しさん :2008/02/24(日) 21:43:33
>>743 何のためにそれをするのか知らないがeclispeはtomcatのラウンチャーじゃない
tomcatは別途立てて、そこにDeployするべき
あとeclipseの1プロジェクトで複数のWebアプリケーションを動作させようというのも間違い
プロジェクトを分けなさない
>744 "現在の接続ユーザーは " + userlist + "\n" の部分だが、JTextAreaにまったく反映されないのか? 中身だけが空なのか、どっちだ?
JDK 6 Update 4が落とせないんですが何が問題なんでしょうか。 エラーは承認することができないという内容で、いくつかの環境で試しましたが同様です。
>747 userlistの中身がからで 現在の接続ユーザーはnullです という表示になっています。
>>749 Chatroom#userlistに何も代入していない
>750 回答ありがとうございます。 userlist.add(clientAddr); 上記の文でアドレスが代入されるものと思っていたのですが、 この文の書き方では代入されていないということでしょうか?
それはローカル変数のuserlistであってChatroom#userlistではない
>752 ありがとうございます。入ってると思ってたものが 別のものだったのですね。 助かりました、ありがとうございました。
Class Parent { private int val; public getVal() { return val; } public setVal(int val) { this.val = val; } public Parent clone() {...} } みたいに、clone() を実装したクラスParentがあったとして、 これを継承した子クラス Child を作ります。 で、この Child でも clone() を実装したいのですが、 その Child#clone() はどうやって実装するのが普通ですか? public Child clone() { Child c = new Child(); c.setVal ( this.getVal() ); ... return c; } と、親クラスの Parent#clone() の存在を完全に無視してもいいもんですか? これだとどうもスマートじゃないような気がして、protected なコンストラクタを 親クラスに追加する、なんて方法も考えたんですけど、 典型的な手法があるのならばご教示ください。
>>754 class Parent implements Cloneable {
private int val;
public getVal() { return val; }
public setVal(int val) { this.val = val; }
public Parent clone() {
try{
return (Parent)super.clone();
} catch(CloneNotSupportedException e){
throw new RuntimeException(e);
}
}
}
class Child extends Parent {
public Child clone() {
return (Child)super.clone();
}
}
756 :
デフォルトの名無しさん :2008/02/24(日) 23:40:36
Javaの勉強始めました。 アクセス就職子protectedについて理解が足りないので教えてください。 protectedつけることで、 『自分のクラス内のメソッド 又は 継承されたサブクラス内のメソッドからしかアクセスできない』 そのように直感的に感じたのですが、 間違っているようで。 public class Purotekuto { public static void main(String[] args) { Test21 hogehoge = new Test21(); System.out.println( "値を出力:" + hogehoge.protectedInteger ); }} public class Test21 { protected int protectedInteger; Test21() { this.protectedInteger = 0; } public void setValue( int value ) { this.protectedInteger = value; } public int getValue( int value ) { return this.protectedInteger; }} このコードでは、main()から、クラスTest21のメンバ、protectedIntegerにアクセスできずに、 エラーか何かになると思ったのですが、普通に動きました。 自分の考えの何がまずいのでしょうか。。。
>754 super.clone() を使うかどうかは状況次第じゃね? というか、普通はsuper.clone()は使えない方が多いと思う。 帰ってくるのはParentクラスのインスタンスだから、結局は値をコピーしなければならなくなるから。
>>754 何のための継承、何のためのオーバーライド。
何がスマートじゃないんだ。感覚的に言われてもな。
ちなみに、cloneを使うなら、Cloneable を implements すること。
// 詳しくは Clonable, Object.clone 参照。
>>756 同じパッケージからもアクセスできるから。以上。
>756 もう1つ条件があって、「同一パッケージ内からのアクセス」もOK
760 :
756 :2008/02/25(月) 00:01:54
758,759 ありがとうございます。 指摘を受けて調べました。 パッケージ化しないことには、ソースはばらばらのパッケージ的な扱いと、勝手に勘違いしていました。 デフォルトのパッケージ、という扱いになるのですね。 勉強になりました。
と言うかデフォルトパッケージの使用は避けてくれ。
>761 というと、必ず特定のパッケージに入れることを明示することが望ましいということでしょうか。 自分今回痛い目にあったので、761の指示に従って付いてまいりますが。
>>763 デフォルトパッケージ以外のパッケージに属するクラスから
一切呼び出しが出来ない。(JDK 1.4 以降)
プログラミングの一般論としても
何らかの名前空間に所属させるのは
良い習慣だと思う。
>>754 普通はコピーコンストラクタを作る
Cloneable は Java の失敗作とジョシュアっちが言ってました
これからjavaを学ぼうと考えています。 JAVAのSDK沢山種類があるようですが、 どれを使用すれば良いでしょうか?
>>766 多分新しいのを使っとけばいいんじゃないだろうか
使う方のソースはそれで良いけど宣言する方のソースはアノテーション必要でしょ。
↑誤爆
SE(スタンダードエディション)でおk
>>733 \→\\
それと、カレントドライブの変更まではcdで出来ないけど、
その辺は大丈夫かな?
Timestamp型の変数から"yyyy/MM/dd"といった形の文字列で 値を取り出すにはどうしたらよいでしょうか?
String s = new SimpleDateFormat("yyyy/MM/dd").format(timestamp);
>>772 SimpleDateFormat("yyyy/MM/dd")でformatすれば?
質問です。 シングルトンを多数作りたいんですが、 private static Singleton instance = new Singleton(); public Singleton getInstance(){return instance;} private Singleton(){} といったおきまりパターンを各クラスに書かないと行けませんが面倒です AbstractSingletonを継承したらgetInstance()で各シングルトンのインスタンスが取れるようになる みたいな事ができれば便利ですけど、staticフィールドなのでそれもママなりません。 なんか旨い方法はありませんか?
776 :
デフォルトの名無しさん :2008/02/25(月) 09:49:44
ド素人質問ですみません;; テキストフィールドに入力された文字列を ボタンが押されたときに変数com_defに入力する プログラムを作りたいのですが、 下のようにやるとローカル変数 i は内部クラスからアクセスされます。final で宣言される必要があります。 とエラーが出ます。 対処法を教えてください。よろしくお願いします。 text[i] = new JTextField("",2); button1[i] = new JButton("変更"); button1[i].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { int com_def = Integer.parseInt(text[i].getText()); System.out.println(""+com_def); } });
>>773 , 774
ありがとうございます。
できました。
779 :
デフォルトの名無しさん :2008/02/25(月) 16:41:22
String s = "ab" + \r + "cd" + \n + "ef"; 正しく直してください。
String s = "ab\rcd\nef"; 直しました。
String s = "ab\rcd\nef";
782 :
781 :2008/02/25(月) 16:44:30
かぶった...orz
780,781 ありがとうございます。
qa3808666 かぶってる...
それはかぶってるんじゃなくてマルチポストだろう…
tomcatのjsp-examplesにあるFORM認証のサンプルについて質問です。
まず操作を1->5の順で行った結果を書きます。
1.
http://hostname:port/jsp-examples/security/protected/index.jspにアクセスするとFORM認証機能が働きlogin.jspが表示される 。
2.login.jsp -> Username/Passwordを間違えて入力->error.jspが表示される。
3.error.jsp -> "try again"をクリック -> login.jspが表示される。
4.login.jsp -> Username/Passwordを正しく入力 -> login.jspが再表示される。
5.login.jsp -> Username/Passwordを正しく入力 -> HTTPステータス 404 - /jsp-examples/security/protected/j_security_check
4でUsername/Passwordを正しく入力しているので1のindex.jspに飛ぶことを期待したのですが、login.jspが再表示されました。
login.jspの出力内容がブラウザに表示された時に、ソースを表示してみると
□2のlogin.jsp
<form method="POST" action='j_security_check;jsessionid=74394043647C95BAC48CC67ECDFFEFB7' >
□4のlogin.jsp
<form method="POST" action='j_security_check' >
比較してみると、4のソースではセッションIDが付加されていない為に、本来の遷移先のURLを見失ってしまっている、ということでしょうか?
jspソースファイルを見ると、login.jspもerror.jspもresponse.encodeURL()の結果をセットしていました。
login.jspのリクエスト箇所
<form method="POST" action='<%= response.encodeURL("j_security_check") %>' >
error.jspからlogin.jspを表示するリンク箇所
<a href='<%= response.encodeURL("login.jsp") %>'>again</a>.
今のままだとerror.jspからブラウザの戻るボタンで前画面(login.jsp)に戻らないと、認証後に期待したURLへ遷移してくれません。
error.jspにあるアンカータグでlogin.jspに戻った時も同じ動きにさせたいのですが、どのように修正すれば対応できるでしょうか?
787 :
786 :2008/02/25(月) 17:51:39
携帯のブラウザでも見るので「JavaScriptは使わない」という前提でお願いします。
自作のある圧縮アーカイブの解凍ストリームを作ろうと思っています。 その圧縮形式はライブラリを持っており、InflaterInputStreamを利用すると比較的に楽に実現できると考えたのですが、 read()やread(byte[],int,int)など、いずれにせよユーザーが決めるバッファのサイズで解凍を行う必要があるため、今回のような解凍する側で単一バイト読み込み時に出力されるデータを決めるライブラリを持った圧縮形式ではどのように行うべきなのか分かりません。 解凍したデータもバッファリングして、ユーザーのサイズに合わせて出力すれば実現はできると思うのですが、何か他にいい方法はないものかと思い質問しました。 Inflaterのソースも読んでみたのですが、肝心の部分はnativeメソッドになっており結局どのような実装なのか分かりませんでした。良い方法がございましたら教えてください。
>>788 >解凍したデータもバッファリングして、ユーザーのサイズに合わせて出力すれば実現はできると思うのですが
それしかないのでは・・・
1バイトだけ返すread()を実装すればあとはデフォルトの実装があるので、
class MyInputStream extends InputStream {
private byte[] buf;
private int pos, size;
public int read() throws IOException {
if (pos == size) {
// 解凍データをbufに詰めてsizeをセット
pos = 0;
}
return buf[pos++];
}
}
これだけでも一応動くよ
InflaterInputStreamをどう利用しようとしてるのかよくわからんが、あれはzlibストリーム専用
790 :
789 :2008/02/25(月) 19:27:03
×return buf[pos++]; ○return buf[pos++] & 255; でした・・・
>>775 邪道かもしれんが。 なんか旨い方法、ということなら。
Enum の中に書く定数は1つ1つがシングルトンだ。
全定数に共通のメソッドも振る舞いが異なるメソッドも実装できるぞ。
Javaにはプリミティブと参照が混在しています。 Listなどを使う時には参照型しか使えないのですが、 いっそすべてのintをIntegerに書き換えた方がいいでしょうか? プリミティブ型の扱いをみなさんどうしていますか? おれはRubyからJavaに来たので数字が参照型じゃないというのに すごく違和感を感じます。ましてや混在しているというのは非常事態です。 今すごく悩んでいます。 みなさんがどうしているかを知りたいです。
>>789 ネットに繋がらなくて返事が遅くなってしまいました。
聞いていた立場で申し訳ないです。
Inflaterを利用しようと思ったのは、形式に共通点が多く、いくつかをオーバーライドすればできそうな気がしたためです。
確かに本来の用途から外れますので使用すべきではありませんね。
やはりバッファかますことにします。
親切にどうもありがとうございました。
>>792 せっかくプリミティブ型があるのにわざわざオブジェクトにする必要はないと思います。
コストの問題ももちろんですが、何より扱いにくいです。
>>792 Integer って、オブジェクトだとは言っても、中のデータを書き換えられないから不便だよ。
List などには int を入れても auto boxing されるんだから、int のままでいいんじゃないかなあ。
みなさんがどうしているか、に関しては、「気にしていない」だと思う。
>>792 そういう言語だから受け入れるしかない
Rubyは理想を重視した分遅くなってるし
C#はプリミティブ型の扱いを変えて両立させてるけどその分複雑になってたりする
797 :
デフォルトの名無しさん :2008/02/25(月) 21:42:46
Strint[] a = {"A","B"}; aの要素数を1にするtruncateみたいなものはありませんか?
配列じゃなくてリストじゃ駄目なん?
799 :
デフォルトの名無しさん :2008/02/25(月) 22:01:35
>>798 Strint[] a; という配列でやりたいです。
Strint[] a = {"A","B"};
ここで処理して"A"が不要だと分かって、
a = {"B"};
とすればよいのでしょうか?
以前のaはa = {"B"};する直前にガベコされるのでしょうか?
それとも内部でtruncateみたいなことされて、aのアドレスは変わらないのでしょうか?
>>795 配列のautoBoxingがないです。
例えば
void methodA(int a)
にInteger型を放り込んだらこれはBoxingされますが、
void methodB(int[] a)
にInteger[]型を放り込むのはエラーになります。
配列からListを作る時にも参照型が強制されるので不利かと思いました。
(例えばArrayList<int>はエラーになる)
>>796 JRubyもダメでしょうか?(速度に関して)
>>799 a = {"B"};
でよい。{"A","B"}はGCまかせ。
ちなみにGCは、不要になったら即実行される訳じゃないよ。
>>801 ありがとうございます。ガベコに任せます。
>>801 それ、初期代入でしかできないんじゃね?
804 :
デフォルトの名無しさん :2008/02/25(月) 22:12:12
>>803 そうでした。
Strint[] a; という配列でやりたいです。
Strint[] a = {"A","B"};
ここで処理して"A"が不要だと分かって、
Strint[] aTemp = {"B"};
のように、もう1つ変数が必要ですか?
aTempの要素数はどうするの? ArrayListを作って必要な要素だけ追加していって後で配列に変換したほうが早い 配列でやるにしてもどうせ同じようなことを自分でやることになる
String[] a = {"A", "B"}; a = new String[1]; a[0] = "B"; でよくね?
>>805 んだなぁ。
ArrayList<String> a = new ArrayList<String>();
a.add("A"); a.add("B");
a.remove(0);
とかでいいと思った。
>>806 そうできるんですね。ありがとうございます。
>>807 STLってまだよく分からないんです。でもありがとうございました。
STLw
それはおいといて,
>>806 でいいんだったら
String[] a = { "B" };
と全く変わらないよ
STLはC++のライブラリのことじゃねーの?w ちなみに配列への変換は String[] array = a.toArray(new String[a.size()]); でいいと思う
>>807 配列モドキとコレクション
List<String> list = Arrays.asList("A", "B");
System.out.println(list);
list = ArrayList<String>(list); // 編集可能化
list.remove(0);
System.out.println(list);
>>808 おまいは勘違いしてる。Javaの配列はサイズを変更(Cで言うところのrealloc)出来ない。
配列限定で長さを変えるには、新しい別の配列を作ってコピーするしかない。
今まで挙がってた例は全て新しい別の配列を作っているだけ。
長さが変わる場合、通常はArrayList等のList系のコレクションを使い、
どうしても配列が必要な場面でだけtoArray()で変換する。
>>800 配列は既にオブジェクト(変数には参照が収められる)だから、auto Boxing はいらないし、
List にも add できる。
int[] を要求している所に Integer[] を放り込むとエラーになるのは型が違うから。
放り込めることを期待するのは
int に対応するのが Integer、int[] に対応するのが Integer[] という感覚があるからだろうが、
この4つの中で、int だけがプリミティブ、Integer だけが値変更が不便なので、
Integer は int をオブジェクトにするためだけにある特別な存在で、
対称性はあまり無い、と考えた方がいい。
>812 変更不可なgetterで結構toArray使わんか?
一件教えてください。 main()の中で記述していた処理を、 ほかのファイルの関数に移動したいのですが、どのようにすればよいかわからず、教えてほしいです。 (サブルーチンで処理をするような考え方で。) c言語で言えば、 main(){ 一連の処理のまとまり1 一連の処理のまとまり2 } となっていたものを main(){ func1(渡す必要のある変数) 一連の処理のまとまり2 } func1(引数){ 一連の処理のまとまり1の代替 必要があればreturn文 } といった感じ(型とか細かいことは別として。)に分割したいのですが。 今の自分の知識では、クラスを作って、メソッドを作って、 メソッドをインスタンス化して、 仮にインスタンスが設定された変数の名前がaaaとしたら、 aaa.メソッド(引数) とするくらいしか、頭が回りません。 メソッドを利用したいだけで、インスタンス化が必要なのか疑問で、やりかたがあるような気がしまして。 よろしくお願いします。
>>815 別クラスにする必要がないのなら、別クラスにしなくていいんじゃない?
mainのほかにクラスメソッド書けばよい。
他からも使いたいけど、インスタンスを作る意味がないのなら、ユーティリティクラスという手もある。
java.lang.Mathみたいなクラス。メソッドは全て、クラスメソッドとして定義する。
>>815 >メソッドを利用したいだけで、インスタンス化が必要なのか
オブジェクト指向の世界では必要だという前提なんだよ
原則としてすべてのメソッドはどっかのクラスに属していて、インスタンスを介して使用する事が基本
逆に言えばクラスに属するけど、インスタンスを介さないmainメソッドの方が特殊
慣れるまで、メリットを感じるまでは解らんと思うが、最初はそういう世界と思うしかない
>>815 メソッドはいくら分割してもメソッドだ。
その例だとオブジェクトになるのは (渡す必要のある変数) ってやつだけだな。
main() で
渡す必要のある変数の型 obj = new 渡す必要のある変数の型();
して、
obj.func1()
>>809 Strint[] a = {"A","B"};
ここで処理して"A"が不要だと分かって、
Strint[] a = {"B"};
↑aが2重定義になるので
>>806 の方法にしました。
>>815 // メインクラス(Main.java)
public class Main {
public static void main(String[] args){
Sample.func();
}
}
// サブルーチンクラス(Sample.java)
public class Sample {
public static void func(){
// ↑staticでメソッドを宣言すれば<クラス名>.<メソッド名>でアクセスできる。
System.out.println("Hello, world!");
}
}
821 :
815 :2008/02/25(月) 23:49:35
815です。 レスありがとうございます、816,817。 >クラスメソッド(816) クラスメソッドの概念を知りませんでした。ありがとうございます。 >オブジェクト指向の世界では必要だという前提なんだよ(817) その考えを理解できるように努力していきます。 指摘ありがとうございます。
822 :
815 :2008/02/25(月) 23:51:52
>820 レスポンス記述している最中に更新されたようで、失礼しました。 816のおっしゃる、クラスメソッドの具体例ですね。 わかりやすい説明ありがとうございます。
>>815 >ほかのファイルの関数に移動したい
>サブルーチンで処理をするような考え方で
>メソッドを利用したいだけで
インスタンス化したくないなら当然インスタンス化は不要だ。
>>815 他の方が指摘してらっしゃるように、
メソッドは、必ずしもオブジェクトに関連付ける必要はありません。
蛇足。Javaでは「他のファイルに記述する」という概念はありません。
あくまでも、クラスを分けるかどうか、です。
それゆえか、クラス内クラスである内部クラスが4種類あります。
JRubyやってみようと思う。
826 :
815 :2008/02/26(火) 00:32:49
815です。 821内の『>818』は『>820』の間違いですね。失礼しました。 >818 今コーディングして確認しました。 クラスメソッドを直接呼び出すか、 通常に、通常のメソッドをインスタンス化して呼び出すかですね。 >823 >インスタンス化したくないなら当然インスタンス化は不要だ。 いま確認とりたいと思いコーディングしてみたのですが、 ほかの方が示された用にstaticにするほかに方法あるのでしょうか。 staticなメソッドにするか、インスタンス化するか以外で試せませんでした。 staticにすることをおっしゃっているのでしょうか。(私の821,822のように時間差?) >824 内部クラス。理解できるよう精進します。Tipありがとうございます。 自分の質問に対して、 816の考え方、817の考え方、の二種類の意見を持つ方に分かれるように感じました。 オブジェクト化するべきとの考えと、ユーティリティメソッドでいいのではという考えと、です。 このどちらを選ぶかは、個人やGrの考え方次第ということなのでしょうか? それとも、オブジェクト指向的には後者の方が、望ましいが、面倒な手続きは好まれないので、前者が使われるということなのでしょうか。
>>826 おおざっぱには、
・データが主体ならオブジェクトにする。
・ロジックが主体ならクラスメソッドにする。
くらいで良いのではないかと思ってる。(無論例外は山ほどある)
こんばんわ。 eclipse使いはじめたのですが、eclipseに指摘されるエラーの意味がわからないので教えてください。 たとえば、まさに820のコードを、 eclipseでひとつのファイルに記述すると、 クラスSampleを別のファイルに書けといわれます。 Javaのルールなのでしょうか。 どういった原因なのか教えてください。 eclipse特有で指摘されるものなのでしょうか?
>>826 何を作っているのかによる。
なんらかの概念(伝票・取引みたいな業務概念や、ファイル・ウィンドウのようなシステム概念)の、
特定のひとつに対する操作であれば、インスタンスメソッドとすることが望ましい。
逆に、概念に属する全ての対象に対する操作や、そもそもその対象を作り出す操作などはクラスメソッドになる。
ただし、実際にはクラスという概念とは関連づかない操作もあり、
Javaの場合は全てのメソッドがクラスに定義されなければならないため、便宜的にクラスメソッドとする。
>>828 Javaのルール。
publicのクラスはファイル名=クラス名としなければならない。
なので、自動的にひとつのファイルにはpublicクラスは一つまでしか定義できない。
>>828 830 の通り、Javaの仕様です。
public を外すか、クラス内クラスにするか、
一応、一つのファイルに複数のクラスを記述する方法はあります。
828です。 830氏、831氏、すばやい回答ありがとうございます。 勉強になりました。 publicがキーワードでしたか。
アクセス修飾子について説明もらえませんか。 アクセス修飾子には、public, protected, privateがあり、 アクセス制御の範囲としては、上記3つのほかに、修飾なしを含めた4つがあるようです。 で、最後の修飾なしなのですが、 実際に仕事でのプログラミングや、アプリケーションの作成で、使用されるのでしょうか。 範囲が修飾ありの3つと異なるのですが、何も記述しないというのが、どうにも好きになれないみたいな。 基本的に、何らかの修飾をしましょうということは無いですか?
>>833 たしかに気持ち悪いが、そう決まってる以上、そういうもんだと思うしかない。
使う場面はときどきあるよ。
トップレベルクラスは、publicにしたくなければ、他に選択肢もないし・・・
>>833 クラスは良くパッケージデフォルトにするなぁ。
パッケージをコンポーネントと見立てて、publicがインタフェースでパッケージデフォルトが実装の詳細。
メソッドやフィールドではあまり使ったことないや。
はじめて手に入れたIDEがeclipseで今までCとWinSDKをエディタで何とかしようと苦労してたのが嘘みたいに GUIなアプリケーションがさくさく書けてJavaマンセーな状態なのですが、 そろそろ他の言語ってかC++で同等の事ができるようになりたいと思い始めてます。 そんなぼくにお勧めのC++用のIDEを教えてくれませんか? eclipseみたいにCtrl+spaceなどでガンガン補完できるようなやつで、 リファクタリングが強力なやつがよいです。 (若干スレ違い?)
>>833 派生先からだけ見えて欲しい時は多数あるけど
パッケージ内からだけ見えて欲しい時がないので
デフォルトスコープを使う機会がない。
継承・実装の階層とパッケージ階層とは全く別個のものなのに
1系統の修飾子で片付けようとしたのに無理がある。
パッケージ階層は無視するか2系統用意して組み合わせ可能にしたら良かったのに。
C#(.NET?) だと名前空間は無視するかわりに、
アセンブリ境界に対して internal で制限するかどうかを選べる。
>>833 そこそこ可視性があるが、言語的に最後の砦であるパッケージの境界でカプセル化してセーフ
というのがパッケージプライベートなので、とりあえず書いてみる的に使うのは、ちょうどよいのかと。
そして、とりあえず書いてみるレベルだったら、
何も修飾子を書かなくてもええじゃないか、のような乗りかと。
なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
840 :
833 :2008/02/26(火) 03:45:25
833です。 返信にただいた内容を元に、学習します。 >839 >なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。 この点について、初心者向けの説明をいただけませんか。 時間かけると理解が進む資料の場所もみつかるのでしょうが。
>>819 a = new String[]{"B"};
>言語的に最後の砦であるパッケージの境界でカプセル化 JDK7になったらスーパーパッケージが出来るんだけどねぇ。 JDK7は本当に完成するんだろうか。
>>841 ありがとうございます。それにしました。
844 :
デフォルトの名無しさん :2008/02/26(火) 17:19:58
出力を行うときに何でoutputstreamwriterを使わなければいけないのですか? テキストでこの章に入るまではこれを使わなくても出力できていたわけ ですから。
好きなものを使えばいいんじゃない?
846 :
デフォルトの名無しさん :2008/02/26(火) 17:25:51
ストリームの意味が分からん
>>846 ベルトコンベアみたいなものを思い浮かべろ
そこに物(データ)を置くと、それはどこかに流れていく
それが出力ストリームのイメージ (streamは流れという意味)
どこに流れていくかは、それがどんなストリームかによる
例えば FileOutputStream だったら、ファイルに書き込まれる
System.out だったら、標準出力に行く
ソケットだったらネットワーク上に送信されていく
出力先が何であるにせよ、そこにデータを書き込むというのは同じ
そういった、何かしらのデータの書き込み口というものを抽象化したのが、出力ストリーム
>>844 別にOutputStreamWriterを使わなければならないことはない
出力を行う方法は他にもいくつかあるが、
そのテキストでは単にそのうちのひとつを紹介してるだけだろう
848 :
デフォルトの名無しさん :2008/02/26(火) 18:42:43
849 :
デフォルトの名無しさん :2008/02/26(火) 18:51:52
一通りテキスト終わったら、トレーニング用のテキスト売ってるんだけど それ買ってやったほうがいいかな? てか、なんかJAVAの勉強しても何か実感わかないな〜 やっぱ実際にもの作らんとそういうのは分からないものなのか?
>>849 どんなテキストか知らないけど
ウィンドウ開いたりボタン押したり絵を出したりといったGUIをやると
実感をわかせるのに効果的だと思う
851 :
デフォルトの名無しさん :2008/02/26(火) 19:07:46
ほうほう
>>849 何か自分で作ってみたいものはないの?
目標を決めるといいかもよ
853 :
デフォルトの名無しさん :2008/02/26(火) 20:41:10
今高校3年生だから、専門学校へ行ったときの予習をしてるんだ。 javaでどんなの作れる?とりあえず簡単なものを作ってみたい。
どんなものでも
そんなことよりもう一年勉強した方が
856 :
ibj :2008/02/26(火) 20:55:19
以下のソースコードで alice1 == alice2:true alice1 == alice3:false Chapter5.Employee[name = null, salary = 75000.0, hireDay = Tue Dec 15 00:00:00 JST 1987] Exception in thread "main" java.lang.NullPointerException at Chapter5.Employee.equals(Employee.java:48) at Chapter5.EqualsTest.main(EqualsTest.java:17) と ぬるぽが出てしまいます。 2時間ほど考えたのですが原因がわかりません・・・。super(name)の部分で どうにかなっていると思うのですがロジック的に正しいと思うのですが・・・。 教えていただけたら幸いです。
857 :
ibj :2008/02/26(火) 20:56:07
package Chapter5; public class EqualsTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15); Employee alice2 = alice1; Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15); Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1); System.out.println("alice1 == alice2:" + (alice1 == alice2)); System.out.println("alice1 == alice3:" + (alice1 == alice3)); System.out.println("alice1.equals(alice3):" + alice1.equals(alice3)); System.out.println("alice1.equals(bob):" + alice1.equals(bob)); Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 25); Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 25); boss.setBonus(5000); System.out.println("boss.toString():" + boss.toString()); System.out.println("carl.equals(boss):" + carl.equals(boss)); } }
858 :
ibj :2008/02/26(火) 20:56:36
package Chapter5; abstract class Person{ private String name; public Person(String name){ this.name = name; } public abstract String getDescription(); public String getName(){ return this.name; } }
専門なんて行っても勉強してる暇ないぞ。 情報系の大学いった方がまし
860 :
ibj :2008/02/26(火) 21:00:13
あう・・改行多すぎて書き込めない
>>856 Employee にも何故か name があって、equals で、
other.name.equals(name)で比較してるんじゃないかと。
力添えください。
ttp://www.nextindex.net/java/thread/sleep.html に記述のあるソースの中で、
main()がthrows InterruptExceptionとしてある理由がわからないのですが、
どういう意味なのでしょうか。
教えてください。
今回実行してみた感じ、定義をしなくとも実行には問題がありませんでした。
どの部分が、InterruptExceptionを投げるといっているのでしょうか?
少なくともtry-catchの外しか考えられないのですが、どこかわかりませんでした。
そのページの赤文字で書かれてるThread.sleep(1000);の所が投げてる。 javadocに書いてあるから読むと良いよ。
文字列のサイズの取得で、 String s="あ"; 2を取得する方法を教えてください。
s.getBytes().length
3になりました
862です。 レスありがとうございます、853。 自分もThread.sleep(...); がInterruptedExceptionを投げる可能性があることはなんとなく覚えたのですが、 今回の場合は、try{}catch(InterruptedEception e){}、の記述によって、 メソッドがthrowsを設定する必要は内容に感じたのです。 うーん…。
s.length() + 1
"qa3813364".length();
>>840 >>なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
>この点について、初心者向けの説明をいただけませんか。
なんてことはない、メソッドをオーバライドすると、親クラスがそのメソッドを呼び出している場合
その挙動にも影響を与えるため、どのような影響があるか(どのように呼び出されているか)を
知る必要があるという意味で、実装が漏れてるという見方ができる。
継承よりも委譲の方が強固だが、継承のほうがお手軽なので
最初は継承を使って、事が複雑になってきたら、委譲にリファクタリングするのがアジャイル的
委譲めんどくせえ
>>867 InterruptedException を飲み込んでいいのは、
実行中のタスクのキャンセレーションポリシーと
実行しているスレッドのインタラクションポリシーが明記してあり
(あるいはそのスレッドのライフサイクルの制御権があり)、
ちょうど両者とも、InterruptedException を飲み込んでOKな場合だけ。
インタラプトを遅延させて処理を継続したい場合は
Thread.currentThread().interupt()を
処理が継続できない・放棄する場合は
InterruptedException を再投げするのが定石
>>867 そうだね必要ないな
たぶんどこかからコピペしてきた消し忘れかなんかだろう
ちなみに、InterruptedExceptionを揉み消すのは良くない習慣だ
875 :
873 :2008/02/27(水) 03:13:13
間違った。 2つのポリシーが上手い具合にOKなときにやっていいのは、インタラプトの発行だった。 タスクが InterruptedExceptionを飲み込んでいいのは、 そのタスクが IntteruptedException を飲み込んでOKなポリシーを持つスレッドからしか 呼び出されないことが保証されている場合だけだな、たぶん main() は、どこからともなくやって来たスレッドで実行されるから、 基本的に飲み込んではいけないはず
876 :
873 :2008/02/27(水) 03:50:52
間違った。 「インタラプトすると不正な挙動をします」というポリシーを明記したタスクとして InterruptExceptionを飲み込むならば、単に、 「インタラプトしてはいけないタスク」 +「インタラプトするとエラーメッセージを吐いて終了するっぽいメインスレッド」 =「このスレッド/タスクにインタラプトしてはいけない」 となるだけだった。さあ、どんどん飲み込みましょうねぇ
Beanのbooleanプロパティのgetter/setterメソッドの命名について質問です。 たとえばbeautifulというプロパティとしたら規則に従いますと 単純にisBeautiful(),setBeautiful(boolean)となります。 しかし、別の例で「上書き確認を表示する」など動詞的なbooleanプロパティ、confirmOverwriteを考える場合 isConfirmOverwrite(),setConfirmOverwrite(boolean)と、とても気持ちが悪いです。 このような場合は変数名を考え直す必要があるのでしょうか? それともこういうもの、ということで割り切ったほうがいいのでしょうか?
最近はokwaveとか教えてgooとかと マルチするのが流行りなのか
-ableをつける isConfirmOverwritable() setConfirmOverwritable(boolean)
その場合 confirm に able を付けるべきだと思うんだ
なるほどー!かなりすっきりしました。 ありがとうございます!!
JasperReportsで帳票毎に四角形の色を毎回変えたいんだけど どうしたらいいですか? iReoprtで rectangle、backcolorを変更するというのはわかるんですが、 毎回違うとどうしたらいいのでしょうか?
毎回ってのが意味解らん。 毎ページなのか、毎項なのか、毎行なのか、毎カラムなのか。 まずは日本語でおk
そもそもJava以前に、自分が抱えている問題を把握できていないケースが多い気がする。 だから日本語がおかしいし、説明されても理解できない。
886 :
デフォルトの名無しさん :2008/02/27(水) 12:41:34
右シフトでどっちが高速なのか試してください。 >> >>>
887 :
883 :2008/02/27(水) 13:01:04
枚ページです。 コンパイルしちゃった後でも変更できるんですか?
sunはInterruptedExceptionは握り潰すな再スローしろってスタンスだっけ?
890 :
デフォルトの名無しさん :2008/02/27(水) 19:00:22
java sound を使うとパソコンから盗聴が可能ですか
Java の理論と実践: アトミックで行く
http://www.ibm.com/developerworks/jp/java/library/j-jtp11234/ このページにある、リスト3: SimulatedCAS クラスの compareAndSwap について質問です。
SimulatedCAS のコードのすぐ下にある説明書きに、
「CASベースの並行アルゴリズムは、スレッドがロックを待つ必要が全くないので、lock-freeと呼ばれます」
という記述があります。
しかし SimulatedCAS の compareAndSwap メソッドは synchronized メソッドに
なっています。Simulated って書いてあるから実際使うときは違うやつ使うのか
なと思いきや、 リスト4 のコードで思いっきり使ってあります。
compare-and-swap アルゴリズムを真似たプログラムは、 synchronized であっても
ロックされないように最適化されるということでしょうか?
893 :
デフォルトの名無しさん :2008/02/27(水) 22:05:06
レンタルサーバー借りて 毎日一回株価を取得してDBに放り込むプログラムを作ろうと思ってるんだけど JAVAで時間がきたらサーバー上で実行するってことかのう? どんな仕組みでできる? それだけわかればDBにも移せるしダウンロードもできそうなだんだが
普通 cron 使う。
実行先のJREバージョンに応じて違う処理をさせたいと考えています。 バージョンに応じて違うクラスファイルを読み込むようにするには どうしたらよいでしょうか? JARアーカイブとMANIFESTファイルを利用しており、クラスライブラリが たくさんあるのでバージョンごとに違うJARを作成するのは避けたいのですが・・・
Class.forName(javaVersionName+ClassName).newInstance();
897 :
867 :2008/02/28(木) 00:01:48
いくつかのレスポンスありがとうございます。 申し訳ないんですが、ぜんぜんわからないです。 1時間くらいgoogleしてみたのですが、 そこから派生するキーワードや、 似たような単語が、同様の意味を成しているのかもわかりませんでした。 せっかく手を差し伸べていただいたところ申し訳ありません。 飲み込む、もみ消す、握りつぶす、 非チェック例外、チェック例外、チェック済み例外、チェックされる例外… 飲み込むというのは、InterruptedExceptionを投げずに処理してしまうということなのでしょうか…
オブジェクト指向初心者です。 調べるの面倒です。教えてください。 このスレッドを読んでいて、初めて 委譲 を知ったのですが、 クラスの外部から、インスタンスのフィールドにアクセスできる仕様というのは、 オブジェクト指向的に、思い切り間違えなのでしょうか。 委譲 の概念が普通に使われるためには、 フィールドへのアクセスは、 クラスに所属するメソッド経由で、アクセスされる仕様である場合でないと、 アクセス方法に統一性がもたせられませんよね。 そもそも、このような質問をする原因が、 なぜフィールドの値をpublicにするなど、 所属クラス内のメソッド以外からの、フィールド変数(?)へのアクセスが許可される必要があるのか が、わからないためです。 質問の仕方が、気に入らなければ、無視してください。 たぶん調べてもまともな回答にたどり着くに、長い時間がかかりそうだと思い、怠けています。
答えるの面倒です。教えません。
>>895 interface AnythingExecutor{
public void doAnything();
}
public class AnythingExecutor14 implements AnythingExecutor{
public void doAnything(){
// JRE 1.4 用の処理
}
}
public class AnythingExecutorFactory{
public static AnythingExecutor create(){
// JRE のバージョンを取得する
if( 1.4 だった){
return new AnythingExecutor14 ();
}
else if( 1.5 だった){
return new AnythingExecutor15 ();
}
...
}
}
// 実際の処理
AnythingExecutor executor = AnythingExecutorFactory.create();
executor.doAnything();
>>898 それは Java に対する質問ではない。
適当なスレを探すよろし。
>>898 問題ないんじゃないか。setter/getter があるってことは、すなわち
public フィールドとほとんど等値なんだし。
ただ、フィールドへのアクセスと同時に何かしたい、外部からは
read のみに変えたい、みたいなことってことが結構ある。
そこで、フィールドは private にして隠す。アクセスは public な
getter/setter からのみ。というよくある構成に統一することで、
機能追加に対応しやすくなるからこうしましょう、という寸法。
中には「フィールドへのアクセスもオブジェクトに対する"操作"で
あるから、メソッドであるべき」なんていう人もいると思う。
まぁその辺をどう割り切るかは個人個人によるのでは。
あと委譲の話と何が関係あるのかが分からなかった。
>>902 > 問題ないんじゃないか。setter/getter があるってことは、すなわち
> public フィールドとほとんど等値なんだし。
1つ大きな違いがあるぞ。setter/getterの場合、本来は違うものを同じものに見せ掛けるのが簡単にできる。
後付けで振舞いを変えるとか、透過的に処理を割り込ませたりするとか、実体をリモートに持たせるとか。
setter/getterメソッドをわざわざ追加する意味がさっぱりわかなかったので
publicフィールドにガンガンアクセスするコードを書いてるのですが、ひょっとして一般的じゃないんですか?
>>903 さんがどういう処理を指してるのかいまいちつかめません。。
>>896 ,900
うわー、ありがとうございます!
早速試してみます。
>>904 意味が分からなければ今のスタイルを続けていけばいい。
そのうち面倒ごとが起こったときにアクセッサの意義が分かるよ。
>>892 値を一つ変えるのに、払うコストをどれだけ小さく出来るか、という話。
この例はシミュレートだけど、ハードウェアでサポートしている CPU もあるよ、と言うこと。
「スレッドがロックを待つ必要が全くない」というのは、
リスト2で行われてるような処理をする必要がない、ということ。
リスト4で注目するべき点は、increment メソッド内の get と CAS の間で、
継続したロックが保持されていないこと。
そして、increment 自体が呼ばれてから値を戻すまでに
value の get 値が 1 "以上"変わること。
test
はじめまして、質問させていただきます。 DJUnitを使って単体テストを行っているのですが、 テスト結果の確認方法として、 ○○クラスの△△メソッドが何回呼ばれたか? を確認したいのですが、方法がわかりません。 assertCalled(String, String); を使えば、メソッドが呼ばれたかどうかは確認できますが、 何回呼ばれたかは確認できません。 なにか良い方法はないでしょうか?
未だに使っている所あるとは驚き
>>892 それらは 「振る舞いを示すコード」 というタイトルや Simulated というクラス名からわかるように、
単に動作を説明するための例にすぎない。 真似ても別に最適化されない。
実際にアトミック操作したい場合は java.util.concurrent.atomic.AtomicInteger を使う。
リスト5では AtomicInteger 使ってるだろ。
だって柏原だって経済学部じゃん
914 :
Hoge :2008/02/28(木) 13:47:56
>>910 すいません。自己解決しました。
調査不足でした。
getCallCount(String, String)
という便利なメソッドがありました。
ありがとうございました。
FileInputStream fis = new FileInputStream(in); // in : 入力ファイル fis.read(); .... fis.getChannel().position(0); fis.read(); ... fis.close(); 今までFileChannelを知らず、一方通行なInputStreamでランダムにアクセスできるのは気持ちが悪いのですが、こんな感じでポインター移動するのって安全ですか?
そのストリームがファイルだと分かってるから良いんじゃねーの。
そうですよね。おーかなり自由度が増しますね。 ありがとうございました。
swingについて、教えてください。 PaneとPanelの違いがよくわからないのですが、 JComponentを継承しているコンテナに関して、 付加機能が一番小さいものがJPanelで、 JPanel以上の何らかの機能が付け加わったものがPaneなのでしょうか? コンテナの中でPanelだけ、PaneでなくてPanelと呼ばれる理由は何なのでしょうか? あと、もうひとつ。 Containerクラスのオブジェクト(というかJFrame.setContentPane())をJPanelにキャストして、 コンテナとしている参考コードがあったのですが、 サブクラスの変数にキャストさせ(て代入する)理由がわかりませんでした。 なぜなのでしょうか?
919 :
918 :2008/02/28(木) 22:13:40
918です。 918で記述ミスしました。 >JFrame.setContentPane() JFrame.getContentPane() でした。 (JFrame#getContentPane() と記述するとどういう意味なのでしょうか…。) よろしく御願い致します。
>>918 さぁ?
名前なんて付ける人の趣味みたいなもんだし、深く考えても仕方ないような
ちなみに、JComponentを継承してるコンテナ、というが
JComponentはContainerのサブクラスだから、JComponent自体がコンテナだよ
まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・
ContainerになくてJPanelにあるメソッドを何か使いたかったんじゃないかね
コード見てわからなければ書いた人に聞くしかない
JFrame#getContentPane()はJFrameクラスのgetContentPane()メソッドのこと
JFrame.getContentPane()と書くと、staticメソッドを呼んだ戻り値について言ってるようにも見えるので、区別のために
921 :
918 :2008/02/28(木) 22:38:34
>まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・ !!!え? そうか、継承しているから継承もとの機能はあるのか…。 無効になっていて然り、とか、どこかで思っていたのか、気がつきませんでした。 ContainerのオブジェクトをContainerのサブクラスにすると、サブクラスのメソッドが使えるということで? これは、例外が発生しそうで危ない予感もするのですが、 そういうコードを意識して使うような設計もあるのですか? >JFrame#getContentPane() ありがとうございます。自力だとどれだけ時間かかったかわかりません。 これをgoogleにはどうすればいいんだろう…。記号が…。スレ違いですね、失礼。
>>921 >ContainerのオブジェクトをContainerのサブクラスにすると、サブクラスのメソッドが使えるということで?
いや、まさか。
JFrame#getContentPane()が返すContainerが実際にはJPanelだとわかっている場合だけ出来る。
実際にJPanelを返すからといっても、ドキュメントにそんなことは書かれていないので、良い習慣とは言えない。
>920 >まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・ 感動した。 感動しました。 変な方言を覚える前に、920の指示の元Javaを学びたい! 自分に本か、Web資料の推薦を!
graphic JAVA Mastering the JFC これ読めばSwingの仕組みは大抵わかるよ。 AWTから読むと上下*2の四冊だけどかなり勉強になる。
>>921 > 例外が発生しそうで危ない予感
どうしてもやりたければ、instanceof でJPanel だと確認してからキャストを行う。
というより、キャストの前には必ず instanceof で対象を確認すること。
int x = 0x12345678; System.out.printf("%x%n", x & 0xFF); これが 78 と出ればビッグエンディアン、12 と出ればリトルエンディアン。
>>927 そのコードを実行しても、実行したプラットフォームのみでしか
エンディアンは確定しないのではないですか?
>>926 java.io.DataInput#readInt() とか java.io.DataOutput#writeInt(int) みたいに、
標準APIの一部のクラスがビッグエンディアン使ってて、
さらに、1.3までは標準APIにリトルエンディアンで入出力できるクラスが無かったから。
>>928 というか、
>>927 のコードを(System.out.printfをprintfに置き換えたものを)
C言語でやっても、エンディアンなんかわからないけどね。
はいはい! 先生方に質問よろしいでしょうか! Javaアプレットを使ってブラウザ画面の自動撮影を行いたいんですが、どういう組み方をすれば良いんでしょうか! 訪問者が来る度にスクリーンをキャプチャしてサーバーに保存、 自分の環境では確認できない動的なサイトの動作チェックに使いたいと思います!
質問です。
http://www.techscore.com/tech/J2SE/Thread/5-2.html 上記のソースにて、queue.size() == 1の時は、put()からのqueue.addFirst(obj)呼び出しと、
get()からのqueue.removeLast()呼び出しが同時に呼び出される可能性があり、
LinkedListはスレッドセーフではないから問題あり、と思うのですが認識あってますか?
notifyAll()の使い方の解説なので、ソースにケチをつけてる訳ではないです。
>>933 synchronized付いてるから同時には呼び出されない
>>932 ええ、そんな!
何とかなりませんか! 先生!
例えば! Robotを使いスクリーン画像を取得! そのデータをURLConnectionでCGIに送り、 CGIでログを保存するみたいな形でできそうな気がするんです! 問題はRobotの自動実行が可能かどうかで! もし不可能なら利用者にボタンを押させる方法でも構いません! やりたいのは動的なサイトの確認であって、不正行為ではないんです! だから利用者の確認をしっかり取らなければならないというのであれば従います! 先生お願いします! 僕に僅かでも良いので知恵をお貸し下さい!
例えば! Robotなんてアプレットで許したらマウスも自動で動かせる! そしてマウスで勝手に送信ボタンを押させ、 CGIで不正取得なんかもできそうな気がするんです! 問題はその動作が利用者がやったのかRobotがやったのかで! もし不可能なら不正取得かサイトの確認か判断が付きません! やりたいのが動的なサイトの確認であって、不正行為ではないと証明できないんです! だからアプレットではそんなことは許されていなくて、それにみんな従います! 先生お願いします! 僅かでもいいので理解してください!
javaで画面のキャプチャなんて取れるの?
いつぞやの謎スクリプトを髣髴とさせるな。
// CGI を設置できるのだから、問題のSSを送ってもらえば終了。
>>938 java.awt.Robot.createScreenCapture(Rectangle) で出来ますよ。
>>937 ええ! ということは先生!
アプレットではRobotの使用ができないということなんでしょうか!
>>942 署名付ければ出来なくは無い
でもそんなアプレット誰も実行してくれないだろう
スクリーンショット自動送信なんて、機密情報もれまくり
お前が今見てるその秘密の画像も勝手に送信されてるよ
>>943 そうなんですか!
何から何までありがとうございます!
945 :
デフォルトの名無しさん :2008/02/29(金) 20:28:21
技術的に出来ないのと倫理的に出来ないのは分けて書こうぜ 紛らわしい
>>941 で目的達成できてるなら、質問者には技術的にできるかできないかなんてどーでも良くなってるんじゃ?
Script API で実行するスクリプトだけセキュリティ制限かけられない? 今のままだとファイル消したりネットワークアクセスしたりやりたい放題なんだけど。
標準APIじゃ無理。
949 :
デフォルトの名無しさん :2008/03/01(土) 03:28:21
コメントをUTF-8で書いてるんだけど、Javadocにすると文字化けする。 何とかできないでしょうか?
>>949 javadoc コマンドの -encoding か -charset
これぐらいはマニュアル見て発見しよーぜ。
>>949 javadoc -encoding UTF-8
>>949 javadocだけじゃなくてコンパイルするときにも警告が出ない?
システムのデフォルトの文字エンコード以外を使うときはencodingオプションを
953 :
デフォルトの名無しさん :2008/03/01(土) 07:52:08
本当に基本的な質問で申し訳ありません。 フォントを変更したときに setFontでPLAINに変更してもデフォルトのボールドのかかった フォントが印刷に反映されません。 どこかで読んだと思い過去スレで探したのですが見つかりません。 教えていただければ幸いです。
954 :
デフォルトの名無しさん :2008/03/01(土) 09:02:08
public class sample69 { public static void main(String[] args) { p_calc.Calc calc =new p_calc.Calc(); System.out.println(calc.sum(1,2)); } } コンパイルすると、
955 :
デフォルトの名無しさん :2008/03/01(土) 09:02:59
c:\source>javac sample69.java .\p_calc.java:3: ')' がありません。 int sum(int i; int j){ ^ .\p_calc.java:3: ';' がありません。 int sum(int i; int j){ ^ .\p_calc.java:8: クラス sample68 は public であり、ファイル sample68.java で宣 しなければなりません。 public class sample68 { ^ sample69.java:3: p_calc にアクセスできません。 クラスファイル .\p_calc.java は不正です。 ファイルにクラス p_calc が含まれていません。 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。 p_calc.Calc calc =new p_calc.Calc(); ^ エラー 4 個 これが出ます。原因はなんでしょうか?
>>955 1. 2 と同じ原因。i の後のセミコロン。
3. ファイル名と public なクラス名が違う。
4. p_calc クラスがコンパイル出来ず、実行ファイルが見つからない。
957 :
デフォルトの名無しさん :2008/03/01(土) 09:46:26
sample69をコンパイルしようとしているのに、sample68のことが出るって変じゃあないですか?
>>957 とくに変じゃないよ。
sample69 で使われている p_calc.Calc を見つけるために p_calc.java
もコンパイルしているんでしょう。
959 :
デフォルトの名無しさん :2008/03/01(土) 10:51:05
今日の日付を Date date = new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); String today = sdf1.format(date); で取得して、日付2008/3/10と比較させ今の日時より前か後かという判定を 行いたいのですが、具体的にどうすればよいのでしょう?
>>959 Calendar#afterとCalendar#beforeを読むべし
実際はGregorianCalendarになるけどな
音声認識に興味があるんだけど、Java Speech APIで実用に耐えられそうですか? それともC++あたりに鞍替えした方がいいですか?
_
964 :
959 :2008/03/01(土) 11:27:16
調べて書いてみたのですが、今日の時刻はこんな感じでよいのでしょうか? SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); Date now = new Date(); //現在時刻を取得 String today = dateformat.format(now); //変数todayに今日の時刻をyyyy/MM/dd型でいれる
面倒くさいから、y*10000+m*100+d同士で比較しちゃう。
Strutsアプリケーションを作成しているのですが セッションIDをSHA-1でハッシュ化するにはどうしたらよいでしょうか?
967 :
959 :2008/03/01(土) 12:20:16
ここまでできました //今日の日付を取得 Date now = new Date(); //今日の日付 SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); //型の指定 //日付の比較 if (now.before(dateformat.parse("2005/1/1"))) { //今日が2005/1/1より前のときの処理 }else{ //今日が2005/1/1より後のときの処理 } ただ、これだと1番最後の行でエラーがでてしまいます・・ エラーは 「処理されない例外の型 ParseException」です
968 :
959 :2008/03/01(土) 12:21:38
エラーは一番最後じゃなくて if (now.before(dateformat.parse("2005/1/1"))) { のところでした
970 :
959 :2008/03/01(土) 12:52:53
いろいろ調べてるんですがよくわからないことばかりです 日付の比較のところがよくないとは思うのですが;; // 今日の日付を取得 Date now = new Date(); //今日の日付 SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); //型の指定 String today = dateformat.format(now); //変数todayに今の時刻がはいる 解約予定日を取得 SimpleDateFormat kaiyaku = new SimpleDateFormat("yyyy/MM/dd"); String kaiyakuyoteibi = kaiyaku.format(2005/10/15); // 日付の比較 if ( ) { //System.out.println("今日は2002/06/10よりも前の日です。"); }else{ }
時刻も含めて比較したいなら、Date#compareToでできる。 日付で切り捨てたいなら、Calendarに変換してsetで時刻を0にする。 ユーティリティメソッド作ってそこで比較すべし。 あちこちで比較してたら、バグの温床。 ついでに言えば、「今日の日付を取得する」もユーティリティメソッドにして、 システムプロパティなどで、「今日の日付」を設定できるようにしておくと、 わざわざシステム日付を変更しなくとも、日付が変わったときのテストができる。
>>947 権限の低いクラスローダでロードしたクラスを挟んでスクリプトを呼ぶといいんじゃないかな、と推測だけで言ってみる
スレ違いかも知れませんが… Commons/Net 1.4.0 のFTPClientを使っていて 昨日から原因不明のエラーが多発してました ようやく判明した原因は、FTPClient#listFiles()が返すFTPFile[]の要素が なんと2/29のタイムスタンプのファイルについてはnullになってしまう事でした! とりあえずサーバの関連ファイルをtouchして急場をしのぎましたが この件について善後策を相談するのに最適のスレなどがあれば教えて下さい
>>973 ドキュメントにバグの報告先とかメンテナの連絡先が書いてあるはずだから、
最小の再現コード付けてレポートする。
975 :
デフォルトの名無しさん :2008/03/01(土) 14:50:50
勉強のためにファイル転送のプログラムを作っているのですが、 いまいち上手くいきません。流れとしては、 @(送り手) FileChannel(sourceChannel)でファイルを読み込む A(送り手) SocketChannel(destinationChannel)で相手に送る B(受け手) SocketChannel(sourceChannel)で受け取る C(受け手) FileChannel(destinationChannel)でファイルに書き込む 送り手 while(destinationChannel.isConnected()){ buffer.clear(); if(sourceChannel.read(buffer) < 0) break; buffer.flip(); destinationChannel.write(buffer); } 受け手 while(sourceChannel.isConnected()){ buffer.clear(); if(sourceChannel.read(buffer) < 0) break; buffer.flip(); destinationChannel.write(buffer); } bufferはByteBuffer型になっています。 これを実行すると、送り手はエラーもなく正常に終了しているのですが、受け手で 「java.io.IOException: 既存の接続はリモート ホストに強制的に切断されました。」というエラーが出てきます。 エラーが出た場所 => if(sourceChannel.read(buffer) < 0){ 長文な上にわかりにくい文章かもしれませんが、 なぜこうなるのか教えてもらえないでしょうか?
>>975 データの受信自体は問題ないのですか?
単にデータを送るだけだと、送り手側でソケットを閉じると、
受け手側でエラーが出るはずですが…
何らかのプロトコルで「送受信完了」をやり取りする形にすれば
問題のある状態なのかどうか判断できると思います
勉強のためならまずCでやったほうがいいよ Javaでやっても意味ないよ
質問させてください String str = "12345"; str += "abcde"; これで連結しようとするとrangeが足りないと出ます すでにあるStringクラスのオブジェクトに文字列を連結するための メジャーな方法などがあれば教えてください
979 :
デフォルトの名無しさん :2008/03/01(土) 15:56:12
>>976 データの受信自体が出来ないみたいです。
送り手側は一通りプログラムが実行されて終了するのですが、
受け手側は if(sourceChannel.read(buffer) < 0) の部分で処理が止まっているみたいです。
受け手は、送り手が書き込むのを待っている状態になっているんでしょうか?
>>977 時間に余裕が出来ればCも勉強しようと思っています。
今は就職活動中であまり時間が無くて、息抜きでやっている状態なので...
助言ありがとうございます。
981 :
978 :2008/03/01(土) 16:02:28
自己解決しました スレ汚しごめんなさい
ServletContextを得るためのgetServletContext()というメソッドがありますが、 APIを見てみるとServletContextはインタフェースなのでオブジェクト化は出来ませんよね。 getServletContext()は、実際にはServletContextではなく、ServletContextを実装するサブクラスを作ってるんでしょうか?
ServletContext context = getServletContext(); System.out.println(context.getClass().getName());
次スレたててみる
PHPを学習した後だとJavaの習得は容易ですか?
いいえ
PHPの知識は役立たないの?
javaの勉強はじめました。 ネットワークとかGUIとか使って何か作りたいのですが、 何も思いつかないので、 パケットモニタ(?)(今どんなメッセージで通信されているか)みたいなのを作りたいのですが、 ネットワークに関しては、どの変の勉強すれば早そうでしょうか。 この辺のクラスは古いから使わないほうがいいとか、 この辺使えばすぐじゃないかとか教えていただけると助かるのですが、 助言もらえませんか。 GUIに関しては、本とWebを参考にして手をつけていたら何とかなりそうな気がしているのですが、 ネットワークは難しすぎて…。
Java→PHPなら簡単
>>991 何をしたいのか本人すら分かってないのに他の人に聞いても分かるはずないよ
ネットワークって具体的に何?サーブレットでWebアプリ作るとかじゃ駄目なの?
パケットモニタはドライバ組まないと無理だ。 通信なら Socket 使えばいい。
>>934 >synchronized付いてるから同時には呼び出されない
え?メソッドレベルの排他というのは、一つのメソッドに複数のスレッドが同時に入れないだけで、
アクセスするメソッドが別なら排他されないのでは?やば、今までずっと間違えてきたかも。。。
なんかいろいろ勘違いしてるなw
>>934 いやいや、やっぱり同時アクセス可能ですよ。でないとnotifyAll()でwait()を解除してあげられないです。
インスタンスメソッドの synchronized 修飾子は synchronized(this){ } でメソッド内全てを囲ったのと等しい。 クラスメソッドの synchronized 修飾子は synchronized(Queue.class){ } と等しい。
1000 なら Java 死滅確定
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。