5

私は6つのクラスから実行可能なjarファイルを作成しました。

Main:mainメソッドが含まれ、マニフェストで指定されています(新しい行を含めました)

Main$1とMain$2:メインクラスにある2つの匿名の内部クラス。(Main $ 2がmainメソッドにありますが、それは実際には重要ではないと思います。)

Form $ 1:フォームの匿名内部クラス

WrapLayout

jarファイルを作成するときにこれらの内部クラスを指定しますが、その内部を見ると(Macを使用しています)、内部クラスはjarにありません。したがって、実行すると、次のようになります。

 Exception in thread "main" java.lang.NoClassDefFoundError: Main$2
    at Main.main(Main.java:64)
 Caused by: java.lang.ClassNotFoundException: Main$2
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more

何が悪いのかわかりません。誰か助けてもらえますか?

編集:私はそれを理解しました!結局のところ、コマンドがドル記号を認識するためには、ドル記号の前にエスケープ文字(\)が必要です。

4

2 に答える 2

7

あなたはすでにあなたの特定の答えを見つけました、しかしここにもっと一般的なものがあります。

プログラムを変更すると、自動的に生成された名前(たとえば、Main$2)を持つクラスのセットが変更されます。また、クラスを名前付きパッケージに移動する場合、jarファイルは並列ディレクトリ構造である必要があります。これが発生するたびに、makefileまたはビルドスクリプトを更新する必要はありません。代わりに、javac -dを使用して、コンパイルされたクラスファイルの宛先ディレクトリを指定してから、この階層全体をjarアップする必要があります。

于 2012-08-19T02:11:07.000 に答える