- - PR -
「Could not find the main class」の回避方法
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-22 08:13
EclipseでSWTアプリケーションを開発しております。
ある程度形になってきたので、そろそろ配布をしようと思い、エクスポートでJARファイルを作成しました。 ところが、そのJARファイルは、どうやっても動いてくれません。 「Could not find the main class」と毎回出てしまいます。 JARファイルやマニフェストに問題があるのかと思い、 テキストエディタでコンソール上に、文字が出るだけのプログラムを作成し、実行しました。(コマンドプロンプトでテキストファイルをjavac→javaで実行) それでも同じエラーが出てしまいます。 javaを勉強し始めて半年強、しかも独学なので、恐らくJAVAの初歩的な設定等がおかしいのではないかと思います。 書籍では、このエラー部分に触れてはいなかったので、どうすれば良いのか全く分からなくなりました。何を調べると解決に向かうのかも不明な状態です。 漠然とした質問で大変恐縮ですが、どなたか助けて頂けませんでしょうか。 よろしくお願い致します。 ちなみにプラットフォームは OS:windows XP java:1.5.0_04と1.4.2_07(両方ともダメでした) java関連のソフトウェア:Eclipse,Oracle Jdeveloper10g,Oracle10g Client 環境変数は JAVA_HOME C:\jdk1.5.0_04 PATH(関係のありそうな所だけピックアップしました) C:\jdk1.5.0_04\bin;C:\Oracle\product\10.1.0\Client_1\bin; C:\Oracle\product\10.1.0\Client_1\jre\1.4.2\bin\client; C:\Oracle\product\10.1.0\Client_1\jre\1.4.2\bin; | ||||||||
|
投稿日時: 2005-09-22 09:19
「コマンドプロンプトでテキストファイルをjavac→javaで実行」でも同じエラーがでるとのことですが、HelloWorld 程度も実行できないのでしょうか?
>java -cp jarファイル名 メインクラス で実行できて、 >java -jar jarファイル名 で実行できないということでしたら MANIFEST.MF に Main-Class が適切に記述されていないのだと思います。 http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html | ||||||||
|
投稿日時: 2005-09-22 09:39
インギさん、ご返答ありがとうございます。
HelloWorldも実行できない状態なのです。 例えば、ソースは、 package exec; public class Exec { public static void main(String[] args) { System.out.println("Hello World"); } } です。 JARファイル名 exec.jar MANIFEST.MFには Main-Class: exec.Execと記述されています。 java exec で実行すると、 Exception in thread "main" java.lang.NoClassDefFoundError: exec javaw exec で実行すると Could not find the main class. Program will exit と出ます。 これは、JARファイルではなく、テキストエディタで作って、javacでコンパイルしたclassファイルを実行する時も全く同じ現象が出ます。 | ||||||||
|
投稿日時: 2005-09-22 09:49
しんさん、こんにちは。
ではなくて、
ではどうでしょうか? | ||||||||
|
投稿日時: 2005-09-22 10:01
>java exec で実行すると、
>Exception in thread "main" java.lang.NoClassDefFoundError: exec ですよね。同じエラーではないですよね。 これは >java exec.Exec とすべきではないでしょうか。 うまくいったら、当初説明したとおり >java -cp jarファイル名 メインクラス と >java -jar jarファイル名 で切り分けをしてみましょう。 | ||||||||
|
投稿日時: 2005-09-22 10:03
!!!!Hello Worldできました。
Kissingerさん、ありがとうございます!! ところで、原因とかお伺いしても宜しいでしょうか。もしくは何か参照するものを教えて頂ければ、大変助かります。 あと、SWTアプリケーションを同じ形で実行すると、 Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widge ts/Composite と出てしまいます。 javaw -jarで行うと、最初と同じエラーになってしまいます。 似たような原因なのでしょうか。 | ||||||||
|
投稿日時: 2005-09-22 10:09
インギさん、すみません行き違いになってしまいました。
java exec.Exec と java -cp exec Exec を実行しましたが、 Exception in thread "main" java.lang.NoClassDefFoundError: exec と出てしまいます。 ・・・すみません。差が良く分かっていないです。 | ||||||||
|
投稿日時: 2005-09-22 10:21
しんさん、
クラスを何処から読んでくるか、クラスローダ/Java VMの 立場になって考えると理解できるようになると思います。 java exec.Exec では、カレントディレクトリや環境変数で 指定されているクラスパスから、exec.Execを読み込もうと します。クラスパスに Jarが指定されて居ない限りロード 出来ないでしょう。 java -cp exec Exec では、execディレクトリをクラスパス として、無名パッケージのExecクラスを読み込もうとしま す。多分、execディレクトリ直下の Exec.classを探して しまうでしょう。 あと、java -jar exec.jar で swtの NoClassDefFoundError になる件も、クラスパス上に swtのライブラリが見付からない からです。 ライブラリのパスを -cp で指定するか、Manifestヘッダで Class-Path: で指定する必要があります。 Oracle関連のクラスも同様に使用できるようにしなければ なりません。 |
1|2|3
次のページへ»