【初心者】Java質問・相談スレッド103【大歓迎】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/06/27(水) 07:23:27JavaScript, 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質問・相談スレッド102【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1180419689/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
次スレは>>980あたりで。
0871デフォルトの名無しさん
2007/07/23(月) 12:57:16RhinoはJavaによるJavascriptの実装だから、実装内容に関わるような話ならこのスレかもしれないが、
単なるスクリプトプログラミングについてここで聞くのはスレ違い。
ある言語について質問する時に、その言語の処理系が何で実装されているかに関わらず、
普通はその言語のスレで質問するだろ?
0872デフォルトの名無しさん
2007/07/23(月) 12:57:53argsは定義されていないようです。
print(args); //=> ReferenceError: "args" is not defined.
Rhinoは1.6R5です。
0873デフォルトの名無しさん
2007/07/23(月) 13:01:36JavaScript一般の話ではなく、あくまでRhino固有の話なので、JavaScript関連のスレではなくここで質問しました。
Rhino専用のスレはないし、RhinoはJava6から標準装備ですし、ここが一番適切ではないでしょうか。
0874デフォルトの名無しさん
2007/07/23(月) 13:39:30JavaScriptのスレでこんなもんわかるやついるわけないだろ。Javaスレ行けっていわれるのがオチ。
0875デフォルトの名無しさん
2007/07/23(月) 13:53:57じゃあお前が答えてやれよ
俺はRhinoは嫌いだ
>>869
arguments
0876デフォルトの名無しさん
2007/07/23(月) 14:07:55jrunscript で実行してるなら arguments で取れるはず。
そうでない場合は、自前でScriptEngineにセットしないとダメなんじゃね?
scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE).put("arguments", args);
0877デフォルトの名無しさん
2007/07/23(月) 14:26:41argumentsでとってこれました。ありがとうございました。
ちなみにこういった情報はどこで見つけるものなんでしょうか。
0878デフォルトの名無しさん
2007/07/23(月) 14:30:03http://java.sun.com/javase/ja/6/docs/ja/technotes/tools/share/jrunscript.html
0879デフォルトの名無しさん
2007/07/23(月) 15:59:42呼んだ?
おまえら少しはEcma Scriptスレに顔出して上げてください。
ネタがないんで普段は実装と仕様の差異の話で盛り上がっとりますよ。
SpiderMonkyが人気ないからRhinoで持ちきりなんだが・・・。
java6のRhino劣化品。いらない子。
>>878
それmozillaのdocの劣化コピペだからmozillaの開発者向けサイトかRhinoのdocに全部書いてある。
0880デフォルトの名無しさん
2007/07/23(月) 16:28:58一応別のツールだから劣化コピペとは言い切れないんじゃね?
Rhino のツールでは -l でスクリプト言語指定したりできないっしょ。
0881デフォルトの名無しさん
2007/07/23(月) 18:51:12さらにコンパイラ省かれてるから一切最適化されてない純粋なインタープリタで動いてる。
Rhinoのドキュメントに組み込みガイドがあって
そこにスループット優先でビルドする手順が書かれてるんだけどそれと同じ事してる。+JavaAdaptorが劣化。
jrunscriptはそのRhinoのScripting APIに従った純粋なラッパー。
Rhinoの殆どの実装クラスがjavax.script.*じゃなくてcom.sun.*にあるから自分でJSオブジェクト実装とかクラスシャッターでセキュリティ制限とかできない問題もある。
ecmaスレで詳しい話題が出てるよ。
0882デフォルトの名無しさん
2007/07/23(月) 20:26:28javax.script は Rhino とは別物だよ。
で、jrunscript と org.mozilla.javascript.tools.shell も別物。
だから jrunscript の、より詳しいドキュメントとして mozilla のドキュメント読めというのはダメ。
0883デフォルトの名無しさん
2007/07/23(月) 23:29:23Rhino1.6R5と言っただけ。Rhinoがjavaの実装で6から標準装備だからこっち来たと。
>>876が勝手にjrunscriptと言い出しただけだろ。だからecmaスレ行けって。
0884デフォルトの名無しさん
2007/07/23(月) 23:37:36俺は >>879 にレスつけただけなんだが。なんで >>869 の話が出てくるんだ?
0885デフォルトの名無しさん
2007/07/24(火) 01:27:160886デフォルトの名無しさん
2007/07/24(火) 01:39:570887デフォルトの名無しさん
2007/07/24(火) 02:51:470888デフォルトの名無しさん
2007/07/24(火) 02:53:20これって可能なんでしょうか。コードは以下のような感じ。
class Hoge {
static {
try {
Class.forName("org.postgresql.Driver");
0889デフォルトの名無しさん
2007/07/24(火) 03:00:58class Hoge {
static {
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
throw new InternalError(e.getMessage());
}
public static Connection open() {
Connection conn = DriverManager.getConnection("foo", "bar", "baz);
return conn;
}
// 以下略
}
コンパイルエラーは以下。
[javac] シンボル: 変数 DriverManager
[javac] 場所 : Hoge の クラス
[javac] Connection conn = DriverManager.getConnection("foo", "bar", "baz");
[javac] ^
[javac] エラー 1 個
0890デフォルトの名無しさん
2007/07/24(火) 03:06:500891デフォルトの名無しさん
2007/07/24(火) 03:07:07クラスパスが通ってないのかなと思って servlet-api.jar にも classpath を通してみて
HttpServlet を継承しただけのコードを書いてみたけど、こちらは問題なかった。
ビルドに用いている ant の build.xml のクラスパスの部分は以下。lib/ 内には
postgresql.jar が配置されている。
<target name="compile">
<mkdir dir="${bin.dir}" />
<javac srcdir="${src.dir}" destdir="${bin.dir}">
<classpath>
<!-- <fileset dir="lib">
<include name="*.jar" />
</fileset>-->
<pathelement location="lib/postgresql.jar" />
<pathelement location="/usr/share/tomcat5.5/common/lib/servlet-api.jar" />
</classpath>
</javac>
</target>
0892デフォルトの名無しさん
2007/07/24(火) 03:13:33取り急ぎ書いたんで抜けた。すまん。他にも "baz" の終わりの " が抜けたりしてる。
手元のコードはちゃんとしてるから大丈夫。
0893デフォルトの名無しさん
2007/07/24(火) 03:17:47DriverManagerに対して
「シンボルを見つけられません。」
というメッセージです。
0894888
2007/07/24(火) 03:20:11DriverManagerってずっと postgresql.jar の中にあるクラスと思ってたら java.sql.DriverManager
だったのな。。。
0895デフォルトの名無しさん
2007/07/24(火) 03:21:33import java.sql.DriverManager;してる?
0896デフォルトの名無しさん
2007/07/24(火) 03:23:38まあシンボルが見つからないエラーは完全名を指定できていないミスが多いからね
0897デフォルトの名無しさん
2007/07/24(火) 03:23:59Eclipseの補完機能に頼りすぎておんなじ名前のメソッド入った
パッケージがこんがらがるとこういうことになる。
0898デフォルトの名無しさん
2007/07/24(火) 04:14:49クラス名が被るのは限定名でアクセスしてあとから「インポートの編集」すると混乱が減るよ。
0899デフォルトの名無しさん
2007/07/24(火) 06:42:38コンパイル遅くなるから?
実行時にも遅くなる?
import *;
ができないからどっちもどっち?
0900デフォルトの名無しさん
2007/07/24(火) 07:30:150901デフォルトの名無しさん
2007/07/24(火) 07:44:01importは「このクラスはこいつらに依存してますぜ」というある意味クラスの設計情報みたい
なもの。仕様変更やデバッグするときに鬼のようにimport hoge.*;とか書かれまくっていきな
りプログラム中でクラスが使用されているとどのクラス追いかけたらいいのかわからなくなる。
でっかいシステムなら尚のこと。
俺の場合作る手間より直す手間を減らすため、かなぁ。
0902デフォルトの名無しさん
2007/07/24(火) 10:00:230903デフォルトの名無しさん
2007/07/24(火) 10:03:03使うオブジェクト全部をimportで指定するのは面度だが、
これもIDEのサポートでさほど手間でもない。
どっちでもいい気がするが、プロジェクトのやり方に合わせるのが基地。
0904デフォルトの名無しさん
2007/07/24(火) 10:16:440905デフォルトの名無しさん
2007/07/24(火) 10:31:570906デフォルトの名無しさん
2007/07/24(火) 10:37:36>>900
0907デフォルトの名無しさん
2007/07/24(火) 10:51:500908デフォルトの名無しさん
2007/07/24(火) 10:54:420909デフォルトの名無しさん
2007/07/24(火) 11:04:52やっとわかった
ごめんね
0910デフォルトの名無しさん
2007/07/24(火) 16:56:27まあ、無駄なアクセスがあればの話だけど。
0911デフォルトの名無しさん
2007/07/24(火) 17:00:450912デフォルトの名無しさん
2007/07/24(火) 17:02:190913デフォルトの名無しさん
2007/07/24(火) 18:12:23hoge.Hegeクラスを参照しているソースファイル中で、
import hoge.*;
とやった場合と、
import hoge.Hege;
とやった場合でコンパイル後のclassファイル中のHegeクラスの名前の指定の相違点を確認。
0914デフォルトの名無しさん
2007/07/24(火) 19:33:39import b.*;
とかなってるときに、
パッケージ b 内にしかなかったクラスの名前と同じクラスをパッケージ a に追加すると、
追加したところとは異なるところからコンパイルエラーが発生してびびる
もっとも、たまたまシグネチャが合ってエラーが発生しなかったらと思うともっと心配かも
0915デフォルトの名無しさん
2007/07/24(火) 19:38:57要らないリンクに時間が掛かります(コンパイルに)
0916デフォルトの名無しさん
2007/07/24(火) 19:56:130917デフォルトの名無しさん
2007/07/24(火) 20:11:12コンパイラの名前解決時に影響するだけ
コンパイル後はまったく一緒、クラスファイルにはフルネームで格納される
0918デフォルトの名無しさん
2007/07/24(火) 20:15:09無駄なリンクなんて発生しねえしサイズも大きくならねえよ
importは単にこのクラスもしくはパッケージからクラス定義を拾ってこいっていうコンパイラへの指令
コンパイラの実装次第でワイルドカードを使った時のクラス検索の効率に差が出るかもしれんが
0919デフォルトの名無しさん
2007/07/24(火) 23:06:32どこの都市伝説だよw
0920デフォルトの名無しさん
2007/07/24(火) 23:43:08永遠に compile oh what a night in jamaica!
0921デフォルトの名無しさん
2007/07/24(火) 23:43:170922デフォルトの名無しさん
2007/07/25(水) 00:11:46クラスパス上にあるなら import *; でも探すことはできるはず。
importってコンパイルを手助けしてあげるためにあるのか?
>>901の意味合いももちろんわかるけど。
0923デフォルトの名無しさん
2007/07/25(水) 00:15:11これってバージョンがあがってリンク先が増えたからだと思ってた。
富○通正社員の俺
協力会社の新人に笑われたorz
0924デフォルトの名無しさん
2007/07/25(水) 00:18:120925デフォルトの名無しさん
2007/07/25(水) 03:05:55923は最悪
0926デフォルトの名無しさん
2007/07/25(水) 03:39:370927デフォルトの名無しさん
2007/07/25(水) 08:37:36アール日野?
0928デフォルトの名無しさん
2007/07/25(水) 08:39:340929デフォルトの名無しさん
2007/07/25(水) 09:27:12落ち目だからな・・・。
0930デフォルトの名無しさん
2007/07/25(水) 12:52:400931デフォルトの名無しさん
2007/07/25(水) 12:56:24それは関西と大阪は何が違うかという質問に近い。
0932デフォルトの名無しさん
2007/07/25(水) 13:03:05関西と関西弁の違い、と思う
0933デフォルトの名無しさん
2007/07/25(水) 13:25:59企業と企業広報の違いでも有るかな
0934デフォルトの名無しさん
2007/07/25(水) 20:57:24動画はともかく、ねとらじとかをJavaから利用できないかな?
0935デフォルトの名無しさん
2007/07/25(水) 21:05:110936デフォルトの名無しさん
2007/07/25(水) 21:06:21ファミコンとディスクシステムのような関係
0937デフォルトの名無しさん
2007/07/25(水) 21:36:59さがせばストリーミングライブラリがいくらでもある。
J2EEの名称はもう使われてないな。
0938デフォルトの名無しさん
2007/07/26(木) 00:41:29Mainのプログラムから描画の処理のところだけ切り出して
別のクラスにかきだしたいのですがいくらやってもうまくいきません
どうすればいいですか?
どなたか教えて下さい
0939デフォルトの名無しさん
2007/07/26(木) 00:45:520940デフォルトの名無しさん
2007/07/26(木) 00:49:37どうすればいいかは、
あなたが考えれば一番うまくいくでしょう。
0941デフォルトの名無しさん
2007/07/26(木) 00:57:000942デフォルトの名無しさん
2007/07/26(木) 01:23:16GUIにタイミング任せるか、プログラムで自分でやるかの話だろ?
アプレットはエントリポイントが違うってんなら分かるが。
>>938
せめてソースくらい上げましょうぜ旦那?
0943デフォルトの名無しさん
2007/07/26(木) 01:28:40描画処理?
とりあえずソースだな。
0944デフォルトの名無しさん
2007/07/26(木) 01:35:17http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36623&forum=12&7
http://itpro.nikkeibp.co.jp/article/COLUMN/20061208/256374/?ST=develop
を見て、sun.management.Agent内でその処理を行っているのはわかったのですが
このソースのどこで立ち上げてるかさぱり分かりません。
誰がわかる人がいたら解説お願いします。
0945デフォルトの名無しさん
2007/07/26(木) 10:21:31class Outer {
void Hoge() {
Inner inner = new Inner();
inner.Foo();
}
class Inner {
void Foo() {
// ここで Outer の this がほしい。
}
}
}
コンストラクタで明示的に外側のクラスの this を渡すしかない?
0946デフォルトの名無しさん
2007/07/26(木) 10:35:56Outer.this
0947デフォルトの名無しさん
2007/07/26(木) 14:24:440948デフォルトの名無しさん
2007/07/26(木) 15:25:23それを継承したクラスの方からアクセスするにはどうしたらよいですか?
0949デフォルトの名無しさん
2007/07/26(木) 15:41:37java.lang.reflect.Field
0950デフォルトの名無しさん
2007/07/26(木) 15:42:49private で宣言されたメンバは継承されない
getter 用意してアクセスしろ
0951デフォルトの名無しさん
2007/07/26(木) 16:02:25ありがとうございます
1.4でも使えますか?
0952デフォルトの名無しさん
2007/07/26(木) 16:08:390953デフォルトの名無しさん
2007/07/26(木) 16:22:11http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.2
> Members of a class that are declared private are not inherited by subclasses of that class.
> Only members of a class that are declared protected or public are inherited by subclasses
> declared in a package other than the one in which the class is declared.
継承されてたら言語仕様に反する。
0954デフォルトの名無しさん
2007/07/26(木) 16:33:061.4でも使えるけど、セキュリティマネージャが許可しない場合は使えない。
例えばアプレットとかだと、Field#setAccessible() が許可されないはず。
0955デフォルトの名無しさん
2007/07/26(木) 18:01:230956デフォルトの名無しさん
2007/07/26(木) 18:12:42>>955
ゲイツ君がpure javaさんを嫌いで古臭いjavaさんの実行モデルを元に「・・・頼むよ君」と呼んできたのがC#くん。
0957デフォルトの名無しさん
2007/07/26(木) 18:33:30もう一度質問します。アプレットのメインクラスの中にある
描画処理・・・・たとえば↓
public void paint(Graphics g){
//描画処理
}
を別のクラスに作って描画処理を丸々引き渡したいのですが
別のクラスから描画処理をやろうとするとウィンドウに描画処理が反映されません。
メインクラスからだと反映されるのですが・・・。
描画処理をほかのクラスに引き渡すにはどうしたらいいですか?
たびたび質問してしまって申し訳ありません。
0958デフォルトの名無しさん
2007/07/26(木) 18:49:04使ってるつもりなのに描画されないなら、多分つもりなだけで実際には使われて無いんだろう。
問題のコードをどっかにうpした方が回答がつきやすいと思うよ。
0959デフォルトの名無しさん
2007/07/26(木) 19:08:290960デフォルトの名無しさん
2007/07/26(木) 19:11:500961デフォルトの名無しさん
2007/07/26(木) 19:16:38ソース
0962デフォルトの名無しさん
2007/07/26(木) 19:31:25わかりました。long使ってみます
ありがとうございました
0963デフォルトの名無しさん
2007/07/26(木) 19:41:33long b = Integer.parseInt(line);
このようにlineを取り込むとlongでも小数点以下がなくなってしまいます
longで取り込むにはどうしたらいいのでしょうか
0964デフォルトの名無しさん
2007/07/26(木) 19:48:59doubleは小数を保持する型
ってかlongに変えたんならInteger.parseInt()使うなよ
long用にはLong.parseLong()がある
doubleを使う場合はDouble.parseDouble()とかもある
これらを実行してどうなるか試してごらん
0965デフォルトの名無しさん
2007/07/26(木) 20:05:07いろいろ種類があるんですね
おかげさまで何とか動くようになりました!ありがとうございました
0966デフォルトの名無しさん
2007/07/26(木) 20:10:25できました
ちょっとしたミスでした
どもです^^;
0967デフォルトの名無しさん
2007/07/26(木) 20:42:31親クラスの非staticなメンバに直接アクセスするような
インナークラスだとstaticクラスじゃ無理。
たとえば、Iterableを実装するようなクラスがそれにあたる。
>>945のケースだとOuterのthisを要求しているからstaticじゃ面倒だね。
そうじゃない場合、ただの別クラスがたまたまインナークラスになっている場合、
staticにしないとnewするのにいちいち、
new Outer().new Inner();
とかいうわからないコードを書かないといけないハメになる。
まあ、内部に非staticクラスしのばせるのもいいけど、
メソッド内にクラス定義書くのも乙だと思うけどな。かなり嫌われるけど。
0968デフォルトの名無しさん
2007/07/26(木) 21:00:58対象にするって感じでいい?
本当はprivateな関数のテストもしたいし、privateな変数にアクセスして
チェックもしたいんだけど。
それともprivateを使わないで全部protectedにしてるとか?
0969デフォルトの名無しさん
2007/07/26(木) 21:16:31JUnitは単なるツール
どんなテストを行うかは別の問題
0970デフォルトの名無しさん
2007/07/26(木) 21:17:16(1)リスク駆動で。気になったところからチェックする。
単純な getter や setter などトリビアルなものに対するテストを考えるくらいなら、
もっとやるべきことがあるはずだ、たぶん
(2)protected にするくらいなら、パッケージプライベートで
(3)どうせなら、テストファーストがお勧め
テストを書こうとするだけで、モジュールの独立性や使い勝手などが
設計にフィードバックされる
レス数が950を超えています。1000を超えると書き込みができなくなります。