1

わかりました。これは非常に一般的で非常に単純な質問ですが、私の場合はかなり珍しい状況が発生します。(インターネット上の他の場所で解決策を見つけることができなかった状況。)それで、私はプログラムでコンパイルしているいくつかのソースコードを持っていますJavaCompiler。次に、コンパイルされたコードをランタイムで実行しようとします。(つまり、Runtime.getRuntime().exec(String[])。)ただし、上記のコードを実行しようとすると、次のようになりCould not find or load main class.ます。問題のソースコードは次の基本モデルに従います。

package compiledCode;
public class Compiled
{
    public Compiled(){}
    public static void main(String[] args)
    {
        System.out.println("Hello!! ;D");
    }
}

そのコードでさえ実行されません。それでも同じエラーが発生します。よろしくお願いします。:)

*編集:私が詳細に行う手順は次のとおりです。

  1. 私はコードと呼ばれる文字列で上記のコードから始めます。次に、Fileオブジェクト(この場合はCompiled.java)を作成します。

  2. 私はテストしたカスタムメソッドを使用して、ファイルをコンパイルするために機能することを確認しました(オプションで、そこからClassオブジェクトを取得しますが、特定の理由により、この方法では実行できません)。 .classファイル。(JavaCompilerAPIを使用します。)

  3. 次に、それRuntime.getRuntime.exec(new String[]{"java",[location of .class file]});を実行するために使用します。

この時点でエラーが発生します。

要求に応じて、私が使用している正確なコードはこれです。

ClassFileHelper.toClass(src, "C:/Users/Steven/Desktop/ /Eclipse/Workspace/RoccedGame/ServiceCoder", "ServiceCoder");
System.out.println("java "+src.getAbsolutePath().substring(0,src.getAbsolutePath().lastIndexOf(".java"))+".class");
final Process p = Runtime.getRuntime().exec(new String[]{"java",src.getAbsolutePath().substring(0,src.getAbsolutePath().lastIndexOf(".java"))+".class"});

3行目の文字列操作は少し面倒ですが、動作することを確認するためにトリプルチェックを行いました。のコードを確認したい場合。toClass()ビット、ここに行きます

4

1 に答える 1

3

に正しいパラメータを渡していないRuntime.exec()

コンパイルされたクラスファイルの実際の場所を渡します。ただし、クラス名を渡す必要があります。クラスがパッケージ内にある場合は、パッケージ階層のルートも-classpathパラメーターとして渡す必要があります。

これについては、JDKのドキュメントで説明されています:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html

于 2012-12-27T19:26:35.553 に答える