4

ここここここ、そしてここを見てきました。

有益ではありますが、私の問題の根本を発見するのに十分ではありませんでした. 私のコードは JAR ファイル内に含まれておらず、顧客は JAR ファイルとして出荷しないように要求しています。

私はEclipseでアプリケーションを構築しましたが、そこから正常に動作します。mainテスト目的で、Java ファイルの 1 つのメソッドを変更するスクリプトをセットアップしました。アプリケーションを変更した後、Python からの呼び出しを使用してアプリケーションを実行したいと考えています。ただし、コマンドラインからプログラムを呼び出そうとするとjavajava -cp .次のエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: DemoAPIFunctionality
Caused by: java.lang.ClassNotFoundException: DemoAPIFunctionality
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: DemoAPIFunctionality.  Program will exit.

私のプロジェクトは、ルート ディレクトリにない複数の JAR と、ルート ディレクトリにない DLL ファイルに依存しています。それらの 1 つの場所に関連していることを願っていますが、確信が持てず、ほとんど前進していません。ここにあるDemoAPIFunctionality.java

public class DemoAPIFunctionality
{
  public final static void main(String[] args)
  {
    DemoAPIFunctionality demo = new DemoAPIFunctionality();

それが私を助けるのに役立つなら、私は喜んでそれ以上の情報をリストします. (いいえ、私はスポーツ エージェントではありません。) 少なくともコマンド ラインから動作させるにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

4
  1. クラスをデフォルト パッケージ (つまり、パッケージなし) に含めることはお勧めしません
  2. java -cp .プロジェクトのルート ディレクトリから呼び出す必要があります。つまり、.classファイルが存在するディレクトリ、またはパッケージを作成する場合は、com(orgなど) サブディレクトリが存在するディレクトリです。
  3. 完全修飾名でクラスを参照する必要があります-つまりcom.package.ClassName
  4. IDE を使用することをお勧めします。教育目的には、BlueJ と JCreator があります。Eclipse と NetBeans はより強力で複雑です。
于 2010-01-22T22:20:52.383 に答える
3

簡単な回避策、ヒント、およびショートカット。java classnamePython 内から呼び出す場合はパスを使用しないでください。例えば。commands.getstatusoutput("java -cp $CLASSPATH clusterize")

于 2011-02-16T11:17:18.653 に答える
3

編集を適用した後、Pythonスクリプトが実際にJavaソースファイルをコンパイルすることについては言及していませんでした。

Eclipse はそれを自動的にコンパイルします (ビルトイン ビルダー) が、もちろん、javacクラスを実行する前に IDE の外部で呼び出す必要があります。javaソースファイルでは機能しません。

編集

Java での実際の経験はわかりませんが、通常はコマンド ラインでこのように動作します。

com.example.Helloメインメソッドと次のようなファイル構造を持つJavaクラスがあると仮定します

/dev/bin/com/example/Hello.class

それからあなたcd/dev/binするjava com.example.Hello。パッケージ名 ( com.example) は常にフォルダー構造 ( com/example) にマップされることに注意してください。Hello.class上記のコマンドを実行しても、Java がフォルダー内に見つからない場合./com/exampleNoClassDefFoundError.

于 2010-01-22T22:46:38.977 に答える