3

私が書いてjarファイルに変えたプログラムがあります。jar ファイルは、私のコンピューターで問題なく動作します。プログラムを実行するサーバーでプログラムを実行しようとすると、jar ファイルが機能しません。このエラーが発生します。

    Exception in thread "main" java.lang.NoClassDefFoundError: Publish
Caused by: java.lang.ClassNotFoundException: Publish
        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:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Publish. Program will exit.

この問題は、Java のバージョンが異なるか、環境が異なることが原因であると思います。ここでの問題はライブラリではなく、このプログラムが実行されている環境だと思います。jar ファイルは、自分のコンピューターで完全に機能します。

私の Java バージョン Java バージョン "1.6.0_22" Java(TM) SE ランタイム環境 (ビルド 1.6.0_22-b04) Java HotSpot(TM) クライアント VM (ビルド 17.1-b03、混合モード、共有)

サーバー Java バージョン Java バージョン "1.6.0_24" Java(TM) SE ランタイム環境 (ビルド 1.6.0_24-b07) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 19.1-b02、混合モード)

また、このエラーが発生します。これは、サーバーに 64 ビットがあり、これが問題を引き起こしている可能性があるのに、32 ビットの Java を使用している可能性があることを示唆しています。

VM の初期化中にエラーが発生しました オブジェクト ヒープに十分なスペースを予約できませんでした

このプロセスの実行にメモリを割り当てるだけで、このエラーを簡単に回避できました。

この問題を解決する方法について誰か考えがありますか?

注:マニフェストファイルも見ましたが、問題ないようです

4

2 に答える 2

2

Publishパッケージなしで使用しています。これは、Java がデフォルト パッケージでこのクラスを想定していることを意味します。

たとえば、次のように完全修飾名を使用する必要があります。foo.bar.Publish

ドキュメントから:

デフォルトでは、最初の非オプション引数は呼び出されるクラスの名前です。完全修飾クラス名を使用する必要があります。-jar オプションが指定されている場合、最初の非オプション引数は、アプリケーションのクラス ファイルとリソース ファイルを含む JAR アーカイブの名前であり、起動クラスは Main-Class マニフェスト ヘッダーによって示されます。

于 2012-07-25T18:38:46.813 に答える
1

完全なパッケージ名を含める必要があります。このエラーは、32/64 ビット OS のエラーではなく、Java 環境の違いでもありません。

于 2012-07-25T18:40:01.697 に答える