【初心者】Java質問・相談スレッド53【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
以下のエラーが表示されて、途方にくれているあなたは、下のページへ。
「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path%2Cclasspath
前スレッド
【初心者】Java質問・相談スレ52【大歓迎】
http://pc5.2ch.net/test/read.cgi/tech/1093267533/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNGコンパイラってなんでつか?
0156デフォルトの名無しさん
NGNGどういう意味か分からんが、
Javaって言語仕様レベルで定数式の扱い規定されてなかったっけ?
0157デフォルトの名無しさん
NGNG麻宮騎亜のマンガ
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG各ページの相対XY座標を取得する方法を教えてください。
1ページ目がフルサイズCGで、2ページ目以降が部分CG
だと、その部分CGのXY位置をどこにすればいいのか
分からないのです。
0160デフォルトの名無しさん
NGNG麻宮騎亜のマンガ
0161デフォルトの名無しさん
NGNGJ2SE 5.0(旧1.5)以降であれば printf 使えるので
byte[] array = "2ちゃんねる".getBytes("EUC-JP");
for (int i = 0; i < array.length; i++) {
System.out.printf("%02X", array[i] & 0xFF);
}
System.out.println();
0163デフォルトの名無しさん
NGNG定数式の扱いは規定されてて、
浮動小数点数型の演算は strictfp 宣言無しで FP厳密でなければならないとか
文字列の定数式は intern() して一意なインスタンスを共有するとか書いてあるけど
コンパイル時に定数式を計算して値に置き換えろ、って規定は無かったと思われ。
勘違いだったらスマソ
でもまぁ、普通のコンパイラは定数式を値に置き換えると思うけど。
0164デフォルトの名無しさん
NGNG今Javapで逆汗してみたら値に置き換えていないね。
驚きました。
0165デフォルトの名無しさん
NGNGC:\temp\test>copy Test.java con
public class Test {
public static void main( String[] args ){
int x = 0;
x = 5+7+9+10;
System.out.println(x);
}
}
1 個のファイルをコピーしました。
C:\temp\test>javac Test.java
したのを javap したら以下のようになった。
0166デフォルトの名無しさん
NGNGそりゃだって変数だもん。
値に置き換えてるようだったら窓から投げ捨てる。
final修飾子が付いてりゃ値に置き換えてくれると思うがね。
0167デフォルトの名無しさん
NGNGCompiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: bipush 31
4: istore_1
5: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
8: iload_1
9: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
12: return
}
ちゃんと値に置き換えてるように見えるけど。
0168デフォルトの名無しさん
NGNGCompiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: bipush 31
4: istore_1
5: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
8: iload_1
9: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
12: return
}
ちゃんと値に置き換えてるように見えるけど。
0169166
NGNG0170デフォルトの名無しさん
NGNGfinal修飾子つけたんですか?
ゲラゲラ
0171デフォルトの名無しさん
NGNGx = 0; は消えてないみたいだけど、
x = 5+7+9+10; は x = 31; 相当になってるみたいね。
0172デフォルトの名無しさん
NGNG( _,, -''" ', __.__ ____
ハ ( l ',____,、 (:::} l l l ,} / \
ハ ( .', ト───‐' l::l ̄ ̄l l │
ハ ( .', | l::|二二l | ハ こ .|
( /ィ h , '´ ̄ ̄ ̄`ヽ | ハ や │
⌒⌒⌒ヽ(⌒ヽ/ ', l.l ,' r──―‐tl. | ハ つ │
 ̄ ', fllJ. { r' ー-、ノ ,r‐l | ! め │
ヾ ル'ノ |ll ,-l l ´~~ ‐ l~`ト,. l |
〉vw'レハノ l.lll ヽl l ', ,_ ! ,'ノ ヽ ____/
l_,,, =====、_ !'lll .ハ. l r'"__゙,,`l| )ノ
_,,ノ※※※※※`ー,,, / lヽノ ´'ー'´ハ
-‐'"´ ヽ※※※※※_,, -''"`''ー-、 _,へ,_', ヽ,,二,,/ .l
 ̄ ̄ ̄ ̄ ̄ `''ー-、 l ト、へ
0173デフォルトの名無しさん
NGNGfinal つけたら 2行目の代入文でコンパイル時エラー出ると思うけど。
ソースは >>165 にあるから、自分で試してみれば?
0174デフォルトの名無しさん
NGNG○ final つけたら 2つ目の代入文でコンパイル時エラー出ると思うけど。
0175デフォルトの名無しさん
NGNG扱う旨、規格に明記されている。でも整数リテラル等に関して記述がない
からこのあたりを行うかどうかはコンパイラの実装依存ってことでOK?
0176デフォルトの名無しさん
NGNG文字列も intern しろとは書いてあるが、
実行時に連結してはいけないとか、
コンパイル時に連結しなければならないと書いてないんだけどね。
整数リテラルに関して記述が無いってのが >>163 や >>175 の見落としだって可能性もあるし。
0177デフォルトの名無しさん
NGNGcaseラベルとかでの定数式の扱いから、
定数式はコンパイル時に確定しないといけないんだと思ってた。
# いや、確定はするんだけど、ごめん、うまくいえないな…
0178デフォルトの名無しさん
NGNG>>176の可能性もまぁあることはあるわな。
0179デフォルトの名無しさん
NGNGStrings computed by constant expressions (§15.28) are
computed at compile time and then treated as if they were literals.
0180デフォルトの名無しさん
NGNGGraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
int rr = dm.getRefreshRate();
if (rr == DisplayMode.REFRESH_RATE_UNKNOWN) rr = 60;
new java.util.Timer().scheduleAtFixedRate(new TimerTask(){
public void run(){
repaint();
}
}, 0, 4000 / rr);
だとうまくいかないっす。
どうすりゃいいんすか?
0181デフォルトの名無しさん
NGNGそれって仕様なのか例なのか、わからんトコロに書いてあるので微妙。
例えば同じところで System.out.print((hello == ("Hel"+lo)) + " "); が false になってるけど、
"Hel" + lo(値は"lo") が最適化の結果 true になってはいけないとは思えないし。
0182デフォルトの名無しさん
NGNGそれどこが垂直同期とってるんだ?
時間管理してるだけじゃないのか?
垂直同期取るためにはフルスクリーンにしてflipするべし
それ以外は垂直同期取れないのでタイマ管理が必要になる
ついでにリフレッシュレートは確実にいじれないので
フルスクリーンモードだからといってそのまま使わずに
垂直同期周波数をチェックして時間管理を入れるべし
垂直同期+時間管理だとティアリングは発生しないものの、
(おもに2Dゲームでは)がたつきが気になると思う
どうせウインドウモードではティアリング発生するのだから
たとえば60Hz以外と判断したときは垂直同期取らないとか
オプションで自由にいじらせるとかそういった考慮が必要
0183デフォルトの名無しさん
NGNG今回の例は冒頭に
This example illustrates six points:
とあるように、ある規則をを例示するための
例であることが明示されているから、ただの
一実装例だと判断するのは間違いでしょ。
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#101083
あと、あの言語仕様を通して読むと、ある例が出され、その範囲をはみ出す例外が
存在するときは必ず明記されているから、それがないときはまあmustと
考えていいとおもう。一部のRFCみたいにmust/should/mayの使い分けが
強制されてないから文脈で判断するしかない曖昧さは残るけどね。
0184デフォルトの名無しさん
NGNGしかし、その部分以外には
> 実行時に連結してはいけないとか、
> コンパイル時に連結しなければならない
と読める部分が無いのは相当弱いと思われ。
例証でしか書かれていない部分まで「言語仕様」として読んでよいものか微妙。
0185デフォルトの名無しさん
NGNG|例えば同じところで System.out.print((hello == ("Hel"+lo)) + " "); が false になってるけど、
|"Hel" + lo(値は"lo") が最適化の結果 true になってはいけないとは思えないし。
おいおい... さすがにJavaの規格としてこの手の非互換性を許す
ようなことはないだろ...
言葉遊びや文章の揚げ足取りもいいけど、
なんのための文章がかかれているかってことはよみとってやれよ
0186デフォルトの名無しさん
NGNGいや、その部分はさらに微妙なんだが。
System.out.print((hello == ("Hel"+lo)) + " "); が false になる部分の説明は
> Strings computed at run time are newly created and therefore distinct.
としか書いてなくて、"Hel" + lo は実行時に計算しなければならないとは一切書いてないし
他の部分にも そんな記述は無いはず。
0187185
NGNGだからね、俺がいいたいのは、どこにかいてある・書いてない
じゃなくて、その6項目がなければ181が自分でいうようにコンパイラの動作に
非互換性が生じるのよ。
で、この手の基本的なレベルで非互換性が
出るようなことはありえないだろ?だからそこは例じゃなくて仕様
が書いてあると読み取ってあげるのが普通じゃないの?
0188デフォルトの名無しさん
NGNG非互換といえば、1.3 までの javac が言語仕様に従わずに
import SimpleName; を容認してたのが
1.4 から容認しなくなったのでも非互換が生じたけど。
言語仕様というのは完全で漏れが無い事を目指して作るものだから、
書いてない事は仕様でないと考えるべきだと思われ。
もっとも、実装するときは仕様に書いてある例と同じ出力にするだろうけど。
0189デフォルトの名無しさん
NGNGコンパイラの最適化でこの例の結果が変わるとは思えない。
むしろコンパイラの仕様がこの例の通りにならなかったら単にバグでしょ
0190デフォルトの名無しさん
NGNG欠陥が有るとしたら仕様書のほうにあるんじゃないのか?
0191デフォルトの名無しさん
NGNG0192185
NGNG|import SimpleName; を容認してたのが
|1.4 から容認しなくなったのでも非互換が生じたけど。
これは実装レベルでの話で別の話。いま話しているのは
規格レベルで非互換性を許すかどうか。
|言語仕様というのは完全で漏れが無い事を目指して作るものだから、
|書いてない事は仕様でないと考えるべきだと思われ。
だから、書いてあるじゃん。あれを仕様だととらずに
ただの例だと読み取るのはそうとうアレ。
This examplesの指す範囲はあくまでもその上のコードと出力結果だろう。
例を先に出す構成は悪文だとは思うがね。
0193デフォルトの名無しさん
NGNGこれって見ての通り、リテラル+リテラルじゃなくて、
リテラル+変数だからfalseで当たり前の例なんだよね。
0194デフォルトの名無しさん
NGNG仕様をよく読むとそれには二通りの解釈が成り立つ。
0195デフォルトの名無しさん
NGNG> 規格レベルで非互換性を許すかどうか。
いわゆる「解釈の違い」って奴ですよ。規格自体は変わらない。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGそれは、規格に漏れがあるということであり、
㋖∠の欠陥じゃないか?
0198デフォルトの名無しさん
NGNGガッ
0199デフォルトの名無しさん
NGNGペッ
0200デフォルトの名無しさん
NGNG協力してくださった皆さんどうもありがとうございます。
0201デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGコンパイル時にx=31になるでFA?
0204デフォルトの名無しさん
NGNGさびしい土曜日ですね。
0205デフォルトの名無しさん
NGNG構成の話をすれば、
JLS は明示的で抽象的な仕様が書いてあって、
それから暗黙に導かれるルールが例とかで補足されるのは結構あるけど、
あの二つは先行する明示的な仕様から導くのは無理だし。
0206デフォルトの名無しさん
NGNGそれは言語仕様的にはコンパイラはx=31にしても良いし、しなくても良いでFA。
今やってるのは文字列連結の定数式だけだから。
0207デフォルトの名無しさん
NGNG仕事ですが何か
0208デフォルトの名無しさん
NGNGあの例をすなおに解釈すると、
hello
Other.hello
"Hel"+"lo"の演算結果というかコンパイラの最適化結果
は、同じインスタンスを指していて
"Hel"+loの演算結果
だけは、別インスタンスということになる。
で、真の値intern値は5つとも共通と、、、。
0209デフォルトの名無しさん
NGNG釣りが?
さらに寂しいね。
0210デフォルトの名無しさん
NGNG無職がうらやましいよ
0211デフォルトの名無しさん
NGNG2chで釣りするのが仕事なら、無職でもいいや。
0213デフォルトの名無しさん
NGNG日本の代表的なニート
ttp://www.gazo-box.com/wara/img-box/img20040724044408.jpg
0214デフォルトの名無しさん
NGNGそれが FA だとすると
1 + 2 だと必ずしもコンパイル時に計算しなくてもいいけど
1 + 2 + "" だと絶対にコンパイル時に計算しなきゃいけないんだよね。
なんか統一感ないね。
0215デフォルトの名無しさん
NGNGお前の頭の悪さは格別だな。
0216デフォルトの名無しさん
NGNG何か統一感ないね
というか言語仕様でコンパイラ最適化を思わせる例がでていて
ほかのリテラルに適用されないってどうよ?
0217デフォルトの名無しさん
NGNGってあるじゃないですか。んで、それはバイト列としてバイトコードをわたせば
クラスとかができるらしいんですね。
で、VMが現在実行中、もしくは、これはから実行されていくバイトコードを
得る事ができたら、ネットワークに投げたりして、完璧な遠隔実行とか可能
だと思うんです(性能は別として)。そんな事できるんでしょか?そういった機能
をVMにインプリメントするとか。
defineclassはクラスを作るから、そんなんじゃなくて、実行するためバイトコードを
バシバシ渡せるメソッドとかがあれば最高。
私の妄想でしょうか?
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGできますでしょうか?
できるとすればどのようにすればいいでしょうか?
ブラウザが閉じられたりタイムアウトしたときにログにメッセージを表示したり
したいと思ってます。
0220デフォルトの名無しさん
NGNGリスナー登録
ブラウザを閉じるタイミングだとJavaScript併用かな
タイムアウトはOK
0221デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1094954163/
0222デフォルトの名無しさん
NGNGエラーページを作るってのはどうよ?
<%@ %> 内で指定するディれくてぃぶでそういうのが遭ったと思うが
0223デフォルトの名無しさん
NGNGログインしていないときは、
そのページでログインしているかどうかをif文で判定して、
java.util.Loggerなどでログを残しつつ
例外も投げ、
エラーページにforwardするってのもありだと思うが。
0224デフォルトの名無しさん
NGNGなんか的外れ・・・
0225デフォルトの名無しさん
NGNGttp://page9.auctions.yahoo.co.jp/jp/auction/k6437674
0226デフォルトの名無しさん
NGNGセッション情報をファイルに書き込むようにしたら、リスナーが呼ばれなくなったことがあってウツ。
Tomcat4.0のころだったと思うが。
今はどうなのかな。
0227デフォルトの名無しさん
NGNG死体・・・クリック注意。
0228デフォルトの名無しさん
NGNG発砲スチロールあんどラテックス製か
よくできてるな
0229デフォルトの名無しさん
NGNG本物はリアリティー優先で怖さは優先されてないからな。
0230デフォルトの名無しさん
NGNGURLClassLoader
0231デフォルトの名無しさん
NGNG>>218
ありがとうございます。
えーと、こういった感じ(クラスとかそういう単位じゃなく)、実行中の生バイトーコードを
VMから得るメソッド、与えて実行させるメソッドってのがないかな?って思ってる
んです。知ってる方いないでしょうか?
サードパティーとかどっかの自作クラスとかでもかまいません。
おねがいします。
0232デフォルトの名無しさん
NGNG○バイトコード
0233デフォルトの名無しさん
NGNGそのファイルをクラス階層に置くべきか否かで指針となるものってありますか?
0234デフォルトの名無しさん
NGNG環境に依存する情報は、クラス階層におくべきではない。
0235デフォルトの名無しさん
NGNGメソッドー ○
0236デフォルトの名無しさん
NGNGリソースにするのなら、クラスパスが通るところに置くべきだし。
0237デフォルトの名無しさん
NGNG○バイトコドー
0238デフォルトの名無しさん
NGNGDBの接続情報なんかをリソースにするのはいかんだろ。
クラスパスが通るところというのは、環境依存しない情報しかおくべきではないだろう。
たとえば、メッセージリソースとかな。
0239デフォルトの名無しさん
NGNG>実行中の生バイトーコードをVMから得るメソッド
Debugger Interfaceとか。
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jpda/jvmdi-spec.html#GetBytecodes
>与えて実行させるメソッド
メソッドだけではバイトコードとしては存在できないので
適当なクラスを作ってそれのメソッドとする。
動的にクラスを作るライブラリとしてはBCELとかjavassistとか。
0240デフォルトの名無しさん
NGNGじゃあ、クラスパス通らないところにおいて、絶対パスでファイル読み込みか?
そのほうが良くないだろ。
メッセージリソースも、ロケールという環境に依存するわけだが。
クラスパスが通るところ、つまりリソースにしないとして、設定ファイルはどこに置くんだ?
レジストリ?大げさだな。
0241デフォルトの名無しさん
NGNG> 実行中の生バイトーコードをVMから得るメソッド、
Class#getResourceAsStream()
>与えて実行させるメソッドってのがないかな?って思ってる
Classオブジェクトが得られれば後はどうにでもできる。
動的に「バイトコードを作る」のなら>>239
リフレクションについてもっと調べてから出直してこい。
君に、ある程度の知識と説明能力が無けりゃ何がやりたいのかこっちがが理解できん。
0242デフォルトの名無しさん
NGNGメッセージリソースはクラス階層に置き、
環境依存パラメータは絶対パスでファイル読みということだ。
どっちもリソースにしてしまうと、複数環境へ配布するときに煩雑になるぞ。
0243デフォルトの名無しさん
NGNG1行おき、やめれ。
0244デフォルトの名無しさん
NGNGクラス階層って何だ?
たとえばclassesディレクトリ直下とかいう意味?
0245デフォルトの名無しさん
NGNGじゃあその絶対パスはソース直書きか?
さらに複数環境に対応できんな。
複数環境に配布するからこそ、クラスパスだと思うのだが。
0246デフォルトの名無しさん
NGNGおまえはクラスパスとリソースについて、勉強しなおす必要があるな。
0247デフォルトの名無しさん
NGNGたとえば servlet.getServletContext().getRealPath("hoge") みたいに
0248デフォルトの名無しさん
NGNGWebではないアプリケーションはどうするんだ?
そんなんWebの場合はコンテナの設定ファイルが使えるから、設定ファイルの話ははっきりいって関係なかろう。
Tomcatであればデータベースの設定なんかcontext.xmlにJNDIリソース登録するわけだし。
0249デフォルトの名無しさん
NGNG環境依存パラメータを記述したファイルを-Dオプションで絶対パス指定するのかも知れない。
0250デフォルトの名無しさん
NGNG実行時パラメータで渡すのが吉。
複数環境ということは、当然DBの接続情報も変わるわけだが、
クラス階層にあるリソースファイルを環境単位に用意するのは、
気持ち悪いでしょ?
>>247
サーブレットなら、それでもいいね。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGやはり、実行時パラメータで渡すだろう。
そのためのバッチファイル&シェルを用意すると。
■ このスレッドは過去ログ倉庫に格納されています