1

私は薬学の学生であり、コーディングを学んでいるので、この質問に対する答えが私を逃した場合は申し訳ありません.

NetBeans と Eclipse で Java ソース コードをいくつか書きました。コードは両方の IDE で正常に動作しますが、すべての .java ファイルを UNIX 環境に移動すると、コードのコンパイルに成功しましたが、コマンド ラインには、同じ jar にあるクラスが見つからないことが示されます。でコンパイルしました。コンパイル時に警告が表示されましたが、これはコードの実行には影響しないと思いました。私は検索して検索しましたが、答えが見つからないようです。これが私のコマンドラインコードです(私のプログラムの名前などがあります):

[jknights@u2:~]$ cd chorus_jk

[jknights@u2:~/chorus_jk]$ ls
Chorus_JK.java       EntropyNormal_JK.java   Main_JK.java
colt.jar             EstimateParzen_JK.java  RA_reformatted_forCHORUS_JK.txt
Combination_JK.java  LIST_JK.java

[jknights@u2:~/chorus_jk]$ javac -cp colt.jar ./*.java -Xlint:unchecked
.
.  (I edited out the 100 warnings as they refer to unchecked items)
.

100 warnings

[jknights@u2:~/chorus_jk]$ jar cfe ChorusJK_RA.jar Main_JK ./*.class

[jknights@u2:~/chorus_jk]$ java -jar ChorusJK_RA.jar
89
317504
Exception in thread "main" java.lang.NoClassDefFoundError: cern/colt/matrix/DoubleMatrix2D
    at Chorus_JK.init(Chorus_JK.java:24)
    at Main_JK.main(Main_JK.java:23)
Caused by: java.lang.ClassNotFoundException: cern.colt.matrix.DoubleMatrix2D
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 2 more

「89」と「317504」は、読み込まれたファイルの要約出力であるため、コンパイルが成功したように見えます。ただし、プログラムが計算部分に到達すると、スレッド "main" java.lang.NoClassDefFoundError: cern/colt/matrix/DoubleMatrix2D エラーで例外が発生します。助けてくれてありがとう!

4

3 に答える 3

2

DoubleMatrix2D はおそらくその jar にあるため、アプリケーションの実行中に colt.jar をクラスパスに追加する必要があります。試す

 java -cp colt.jar -jar ChorusJK_RA.jar

デフォルトでjarをクラスパスに追加するため、IDEで機能します。

于 2012-07-25T13:37:34.880 に答える
1

「cern.colt.matrix.DoubleMatrix2D」クラスは colt.jar パッケージにありますか? たぶん、2番目の呼び出しのクラスパスにも追加する必要があります:

java -cp colt.jar -jar ChorusJK_RA.jar
于 2012-07-25T13:37:43.117 に答える
0

コマンド ラインからコードを実行することの難しさは、IDE の価値を示しています。あなたのワークフローを正しく理解していれば、IDE を備えた 1 つのマシンでコードを開発し、GUI 環境を使用せずに別のコンピューターで実行する必要があったため、コマンド ラインで立ち往生していたことになります。これは、特に Web アプリケーションの開発ではよくあることです。

Netbeans は dist フォルダー (ディストリビューション) を作成し、ライブラリを lib フォルダーにコピーするようにプロジェクトを構成できます (これがデフォルトの動作だと思います)。jar ファイル内に含まれるマニフェスト ファイルには、次のような行が含まれている必要があります。 Class-Path: lib/colt.jar

jar ファイルの内容は、zip ツールまたは IDE 内で調べることができます。ファイル ビューからの netbeans では、dist フォルダーを展開してから、jar を展開してその内容を調べることができます。

コードをグラフィカル環境からコマンド ラインに移行する前に、IDE を使用せずにプログラムを実行してみてください。/dist フォルダー内の jar ファイルをダブルクリックして実行できるはずです。その場合、/dist フォルダー全体を別のオペレーティング システムの別のコンピューターに移動でき、コマンド ライン引数に -cp colt.jar を追加しなくても実行できます。

別のオペレーティング システムで実行するために、コードを再コンパイルする必要はありません。/dist フォルダを移動するだけで、「一度書けば、どこでも実行できる」という喜びを体験できるはずです。

于 2012-07-25T14:14:42.340 に答える