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

【初心者】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/
0232デフォルトの名無しさんNGNG
×バイトーコード
○バイトコード
0233デフォルトの名無しさんNGNG
DBの接続情報などを外部ファイル化するとして、
そのファイルをクラス階層に置くべきか否かで指針となるものってありますか?
0234デフォルトの名無しさんNGNG
>>233
環境に依存する情報は、クラス階層におくべきではない。
0235デフォルトの名無しさんNGNG
メソッド ×
メソッドー ○
0236デフォルトの名無しさんNGNG
クラス階層っていうのがなんのことかわからんが。
リソースにするのなら、クラスパスが通るところに置くべきだし。
0237デフォルトの名無しさんNGNG
×バイトコード
○バイトコドー
0238デフォルトの名無しさんNGNG
>>236
DBの接続情報なんかをリソースにするのはいかんだろ。
クラスパスが通るところというのは、環境依存しない情報しかおくべきではないだろう。
たとえば、メッセージリソースとかな。
0239デフォルトの名無しさんNGNG
>>231
>実行中の生バイトーコードをVMから得るメソッド
Debugger Interfaceとか。
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jpda/jvmdi-spec.html#GetBytecodes

>与えて実行させるメソッド
メソッドだけではバイトコードとしては存在できないので
適当なクラスを作ってそれのメソッドとする。
動的にクラスを作るライブラリとしてはBCELとかjavassistとか。
0240デフォルトの名無しさんNGNG
>>238
じゃあ、クラスパス通らないところにおいて、絶対パスでファイル読み込みか?
そのほうが良くないだろ。
メッセージリソースも、ロケールという環境に依存するわけだが。

クラスパスが通るところ、つまりリソースにしないとして、設定ファイルはどこに置くんだ?
レジストリ?大げさだな。
0241デフォルトの名無しさんNGNG
>>231
> 実行中の生バイトーコードをVMから得るメソッド、

Class#getResourceAsStream()

>与えて実行させるメソッドってのがないかな?って思ってる

Classオブジェクトが得られれば後はどうにでもできる。

動的に「バイトコードを作る」のなら>>239

リフレクションについてもっと調べてから出直してこい。

君に、ある程度の知識と説明能力が無けりゃ何がやりたいのかこっちがが理解できん。
0242デフォルトの名無しさんNGNG
>>240
メッセージリソースはクラス階層に置き、
環境依存パラメータは絶対パスでファイル読みということだ。
どっちもリソースにしてしまうと、複数環境へ配布するときに煩雑になるぞ。
0243デフォルトの名無しさんNGNG
>>241
1行おき、やめれ。
0244デフォルトの名無しさんNGNG
>>242
クラス階層って何だ?
たとえばclassesディレクトリ直下とかいう意味?
0245デフォルトの名無しさんNGNG
>>242
じゃあその絶対パスはソース直書きか?
さらに複数環境に対応できんな。
複数環境に配布するからこそ、クラスパスだと思うのだが。
0246デフォルトの名無しさんNGNG
>>242
おまえはクラスパスとリソースについて、勉強しなおす必要があるな。
0247デフォルトの名無しさんNGNG
相対パスで書けるじゃん
たとえば servlet.getServletContext().getRealPath("hoge") みたいに
0248デフォルトの名無しさんNGNG
>>247
Webではないアプリケーションはどうするんだ?

そんなんWebの場合はコンテナの設定ファイルが使えるから、設定ファイルの話ははっきりいって関係なかろう。
Tomcatであればデータベースの設定なんかcontext.xmlにJNDIリソース登録するわけだし。
0249デフォルトの名無しさんNGNG
>>242を好意的に解釈すると
環境依存パラメータを記述したファイルを-Dオプションで絶対パス指定するのかも知れない。
0250デフォルトの名無しさんNGNG
>>245
実行時パラメータで渡すのが吉。
複数環境ということは、当然DBの接続情報も変わるわけだが、
クラス階層にあるリソースファイルを環境単位に用意するのは、
気持ち悪いでしょ?

>>247
サーブレットなら、それでもいいね。
0251デフォルトの名無しさんNGNG
たとえばeclipseはどうやって解決してるのか?って話だろ。
0252デフォルトの名無しさんNGNG
配布先がWindows系とUnix系両方だったとすると、
やはり、実行時パラメータで渡すだろう。
そのためのバッチファイル&シェルを用意すると。
0253デフォルトの名無しさんNGNG
>>250
> クラス階層にあるリソースファイルを環境単位に用意するのは、 気持ち悪いでしょ?

なんで?
ファイルを作ることには変わりないし。
クラスパスにリソース置けばすむのに、実行時パラメータ使うのもアホらしいだろ。

っていうか、クラス階層ってなによ。クラスパスが通ったところ以外の意味があるのか?
0254デフォルトの名無しさんNGNG
>>246
文脈が読み取れないらしいな。
0255デフォルトの名無しさんNGNG
>>252
実行可能JARと同じディレクトリに置くようにしとけば十分だろが。
0256デフォルトの名無しさんNGNG
>>254
いや、クラスパスやリソースについてわかってなさそうだぞ。
0257デフォルトの名無しさんNGNG
一応確認しておくけど、ここでの設定ファイルっていうのは、環境依存パラメータのことだよね?
起動してからは書き換えられないファイル。
0258デフォルトの名無しさんNGNG
>>253
ラクかどうかの問題を言っているのではない。
クラスの外にリソースとして分けて記述したところで、
それは形式が変わっただけで、本質的には変わったわけではない。
そう感じるのだ。

「クラスパスが通ったところ」をなんというんだ?
0259デフォルトの名無しさんNGNG
>>257
そう。
0260デフォルトの名無しさんNGNG
>>247
というか、Webの場合に環境依存パラメータを、そうやってコンテキストルート以下のファイルに置くのもやっかいだ。
Webの場合の環境依存パラメータはcontext.xmlに書け。
0261デフォルトの名無しさんNGNG
>>255
それは、無名パッケージで置くということだが、
クラスと同じ場所にあるという点で、何も変わらないのだが。。
0262デフォルトの名無しさんNGNG
>>259
それであれば、クラスパスの通ったところにプロパティファイルを置くようにするのがまっとう。
なんでわざわざクラスパスが通らないところにファイル置いて、実行時パラメータでパス指定する必要があるんだか。
それにそれが本質的に変わるとは思わないんだが。

実際の用語としては「クラスパスが通ったところ」をクラスパスというのだけどね。
0263デフォルトの名無しさんNGNG
>>261
なんならディレクトリ作ればいいだろ。
何を変える必要があるんだ?
0264デフォルトの名無しさんNGNG
>>260
webなら、コンテナがあるので、そっちに任せるというのには、賛成。
では、通常のJavaアプリではどうする?
0265デフォルトの名無しさんNGNG
>>261
実行ファイルであるappli.jarと環境設定ファイルであるconfig.propertiesを同じディレクトリに置くことにどんな不都合があるのか説明きぼんぬ。
そこがわからないためにここまでの食い違いが生じてる。
config.propertiesをどこかヨソに置いて、ソース埋め込みにしろVMパラメータにしろ、絶対パスで指定することの利点と比較してね。
0266デフォルトの名無しさんNGNG
>>262
クラスパス上にあるモノは「いったん書いたらどこでも動く」べきでは?
というのが発端。

なので、環境依存情報は、クラスパス外にあるべきでは?と思ったわけだ。
0267デフォルトの名無しさんNGNG
>>264
実行jarと同じディレクトリにファイル置く。
もちろん実行jarを置いたディレクトリにクラスパスが通るように、マニフェストを記述。
0268デフォルトの名無しさんNGNG
>>266
いい着眼点だ。
最近の若い奴らは、メッセージも環境情報も同じファイルにかきやがる。
0269デフォルトの名無しさんNGNG
>>266
> クラスパス上にあるモノは「いったん書いたらどこでも動く」べきでは?

そんな「べき」はない。
どうしても環境依存するクラスを(そんなんあるなら)、環境ごとのjarにして、環境ごとに配布というのも否定するものではない。
たとえばiアプリのようなリソースの限定された環境。
JNIで環境ごとの差をネイティブライブラリに閉じることができなかった場合など。
0270デフォルトの名無しさんNGNG
>>266
環境依存パスをクラスパスで吸収して、パス文字列の環境依存もリソースローダーで吸収させるのが目的なんだから、環境設定ファイルはリソースにするべき。
そのためのリソース。
0271デフォルトの名無しさんNGNG
>>269
でも、少なくとも、上位アプリケーションのレベルでは、
それを目指すべきだと思うが。
0272デフォルトの名無しさんNGNG
>>271
クラスパスに環境依存情報置くなって?
そんなもの目指さなくていい。
なんのメリットがあるんだ?
0273デフォルトの名無しさんNGNG
>>271
とりあえず>>265に答えてくれ。
0274デフォルトの名無しさんNGNG
>>270
パス文字列の形式は吸収できるが、内容は吸収できない。
内容が語異なる場合の理由になっていませんね。
0275デフォルトの名無しさんNGNG
>>271
もちろん、環境ごとにクラスを置き換えというのは、可能な限り避けるべきだ。
0276デフォルトの名無しさんNGNG
>>274
だから別ファイルにしておけばいいだろ。
0277デフォルトの名無しさんNGNG
>>274
で、>>267のようにした場合にどんな不都合があるんだ?
0278デフォルトの名無しさんNGNG
>>265
不都合とかメリットとかの話をしているわけではないのだが。。
本来の使い方になってるの?ということ。
0279デフォルトの名無しさんNGNG
javaが「頭でっかちの言語」と言われるゆえんですね
あーたのしい。
0280デフォルトの名無しさんNGNG
Choiceのメソッドを使おうとしても、
シンボルを…と出て使えないのはなぜですか。
本のサンプルプログラムまんまなのにどこがおかしいんだか…。
0281デフォルトの名無しさんNGNG
>>280
お前が検索もできない無能だからですよ
0282デフォルトの名無しさんNGNG
>>281
不具合でもあるってことですか、検索できないからだっていうのは。

このスレ、どこが初心者歓迎なんだか。
0283デフォルトの名無しさんNGNG
シンボルを解釈処理できません の検索結果のうち 日本語のページ 約 296 件中 1 - 50 件目 (0.36 秒)

ここはJava初心者スレであって、PC初心者やインターネット初心者はスレ違い・板違いです
0284デフォルトの名無しさんNGNG
>>283
>ここはJava初心者スレであって、PC初心者やインターネット初心者はスレ違い・板違いです
それ次からテンプレに加えようぜ。
0285デフォルトの名無しさんNGNG
意味不明。
もちっとPCやJavaを勉強する前に日本語を勉強したら?(プ
0286デフォルトの名無しさんNGNG
クラスパス上にあるモノは「いったん書いたらどこでも動く」べきでは?

という疑問は、いまだ解消されず。。

クラスパスってコーディング時に静的な情報をおいておくところでなかったけ?
クラス定義とか。メッセージとか。

配布時に動的に変わるものがあっていいの?
ふつう、君たちがダウンロードしてくる、他のプロダクトって、クラスパスの外部に設定だ居るあるでしょ?
それに疑問を持ったことないの?
0287デフォルトの名無しさんNGNG
>>285
意味不明なのは、お前が無能だからですよ
0288デフォルトの名無しさんNGNG
>>286
×クラスパスの外部に設定だ居るあるでしょ?
○クラスパスの外部に設定ファイルあるでしょ?
0289デフォルトの名無しさんNGNG
>>280
この質問から読みとれるのは、お前が釣りだと言うことだけだ。
0290デフォルトの名無しさんNGNG
死ね>>280
死ね>>280
死ね>>280
死ね>>280
死ね>>280
死ね>>280
死ね>>280
0291280NGNG
結局だれもわからないんですね。
はぁ…
やっぱり本にバグがあるとしか思えませんね
0292デフォルトの名無しさんNGNG
>>288
クラスパスの外部に設定ガイル居るでしょ?
0293デフォルトの名無しさんNGNG
>>292
面白いけど居ません。
0294デフォルトの名無しさんNGNG
この世で一番嫌いな数字が280になりました。
0295デフォルトの名無しさんNGNG
おまいら、んあんおためにシステムプロパティがあると思ってんだ?
プロパティで与えた場所から読むようにすれば問題なし。
なんでもそうやってるだろ?
JAVA_HOME
CATALINA_HOME
ANT_HOME
...
Eclipseも暗黙で同じことをやってるよ
0296デフォルトの名無しさんNGNG
>>294
ちょうど今出かけようと財布を見たら、ちょうど280円だったorz
0297デフォルトの名無しさんNGNG
>>296
じゃ、財布に「100万円入っています。開けてはいけません。」
っていう封印シール張っておくことをお薦めする。
0298デフォルトの名無しさんNGNG
>>239
>>241
またまたありがとうございます。

 自分は、処理を分散するために、VMに処理能力共有機能をインプリメント
できないかなって考えていて、そのための実現方法を探していたんです。
 まだまだ、知識もないので無茶かもしれませんが、がんばってみます。


0299デフォルトの名無しさんNGNG
>>295
与え方の議論ではないのだが。。
0300デフォルトの名無しさんNGNG
>>217 >>298
もしネットワークを通じた処理能力分散などに興味があれば
JXTAなどについて調べてみるのも面白いかもね。
0301デフォルトの名無しさんNGNG
すいません
スクロールペインにパネルを組み込んだのですが、
スクロール処理がされません。
スクロールバーは表示されるのですが、・・・

//jpanel
setBackground(Color.CYAN);
setSize(1000,1000);
setLayout(null);

//jpanel main
jpMain = new JPanel();
//jpMain.setLocation(0,0);
jpMain.setSize(1000,1000);
jpMain.setLayout(null);
jpMain.setBackground(Color.YELLOW);

//jscrollpane
jSP = new JScrollPane(jpMain);
jSP.setBounds(5,5,400,300);
jSP.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jSP.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jSP.setViewportView(jpMain);
add(jSP);
0302デフォルトの名無しさんNGNG
>>286
> 配布時に動的に変わるものがあっていいの?

問題なし。

> クラスパスってコーディング時に静的な情報をおいておくところでなかったけ?

違う。
どこからそんな定義が出てくるんだ?

> メッセージとか。

メッセージはロケールによって変わる。
あとからメッセージリソース追加すれば、そのメッセージリソースが使われる。
環境ごとに違う。
0303デフォルトの名無しさんNGNG
ということで、リソースバンドルは環境によって変わるような仕組みになっていて、あとからクラスパスに追加すれば使えるしくみになっているので
「クラスパスってコーディング時に静的な情報をおいておくところ」
という認識が誤りという結論で。
0304デフォルトの名無しさんNGNG
>>288
> クラスパスの外部に設定ファイルあるでしょ?

そんなのどうやって判断するんだ?
0305デフォルトの名無しさんNGNG
>>302
メッセージはロケールによって異なるというのと、
ここでいう環境ごとに違うというのとは違う。
複数ロケールのメッセージを提供する場合、
配布時は静的であって、どのロケールのメッセージが使用されるかは、
実行時に動的に決まる。

ここで問題としたいのは、配布時に動的な情報のこと。
0306デフォルトの名無しさんNGNG
>>304
開発時に使えばわかるでしょ?
0307デフォルトの名無しさんNGNG
普通にユーザのホームディレクトリにユーザ設定保存してますが?
0308デフォルトの名無しさんNGNG
>>305
だから、あとから*_ja.propertiesを追加するのは「配布時は静的」というのと違うと思うんだが。
環境によって異なる情報をクラスパス上のファイルに記述することには全く問題ないが。
ライブラリのバージョンも変わることがあるわけだし、たとえばログみたいにクラスパス上にあるライブラリによって挙動が変わるものもあるわけだし。
0309デフォルトの名無しさんNGNG
>>307
ここではユーザー設定ではなくて、環境依存パラメータの設定の話。
0310デフォルトの名無しさんNGNG
>>306
EclipseなりNetBeansなりが、実行時にどこにクラスパスが通ってるか簡単に把握できるか?
0311デフォルトの名無しさんNGNG
>>306
単純な実行可能JARでも、解凍しないとどこにクラスパスが通るかわからんが。
0312デフォルトの名無しさんNGNG
>>308
それは、配布し直していることと同じでしょうが。
自分で修正して、自分に配布しただけのこと。
0313デフォルトの名無しさんNGNG
>>312
は?
0314デフォルトの名無しさんNGNG
>>310
エクリプスは実行時のその手の情報を表示できるよ
0315デフォルトの名無しさんNGNG
環境依存パラメータって具体的には何?
0316デフォルトの名無しさんNGNG
>>315
たとえばデータベースの接続先。
0317デフォルトの名無しさんNGNG
>>315
たとえば、DBの接続情報、他システム連携情報、ロギング設定など。
0318デフォルトの名無しさんNGNG
それって、システムプロパティで設定した値からの相対で取得するでしょ
クラスパスに入ってる必要全くないと思うけど
0319デフォルトの名無しさんNGNG
>>267のようにプロパティファイルに環境情報書くようにして、実行可能JARのマニフェストでそのファイルにパスが通るようにするのがだめだと言ってるらしい。
それより、クラスパスが通らないところにおいて、リソースの仕組みを使わずにファイルとして読み込むべきだと。
そんなバカな。
0320デフォルトの名無しさんNGNG
>>318
むしろ、わざわざリソースを使わずに取得する必要がまったくない。
0321デフォルトの名無しさんNGNG
大概はそういうのってリソース使ってないと思うけど?
0322デフォルトの名無しさんNGNG
>>319
リソースでないものにリソースの仕組みを使っているというところが気持ち悪い。
使えるからといって使うのが妥当ということにはならない。

だから、誰かが指摘していたが、環境設定情報とメッセージを同一ファイルに安易に
書いてしまう輩が出没したりする。
0323デフォルトの名無しさんNGNG
単純なプログラムで、起動スクリプト使わず実行可能JARの場合、リソースにするのが手軽で目的にかなっていると思うのだが。
0324デフォルトの名無しさんNGNG
>>323
そんなお手軽プログラムなら、リソースだとか環境設定ファイルがどうこうなど考えなくてよい。
きちんと考えるなら、どうあるべきかという話をしている。
0325デフォルトの名無しさんNGNG
Hibernateの設定は、デフォルトだとクラスパスの頭からとってくるね。
0326デフォルトの名無しさんNGNG
質問させてください

Java3Dでアニメーションを作成していて
一定時間毎に座標を指定して移動させたいのです。

Threadをたてたのはいいのですが、
repaint()の代わりになる上書き命令をどのようにすればいいのかがわかりません。

いい方法はないでしょうか?
0327デフォルトの名無しさんNGNG
>>325
お手軽な設定方法がそうだということでは?と解釈しているが。
0328デフォルトの名無しさんNGNG
>>326
Timerつかってみそ。
0329デフォルトの名無しさんNGNG
>>327
だからといって、ここでわめいてるやつがいうように、クラスパスにそういう情報を記述してはいけないのだとしたら、悪いデフォルトだということになるね。
クラスパスに設定情報を記述してはいけない、というのは、どこからくるんだか。
0330デフォルトの名無しさんNGNG
こだわらなければクラスパスでリソースとして設定情報置くのは、とくに問題ないのではないかと。
0331デフォルトの名無しさんNGNG
Java3Dで完結させたければBehavior使うんじゃないの?
■ このスレッドは過去ログ倉庫に格納されています