1

好吧,我知道这是一个非常常见、非常简单的问题,但我的问题却很不寻常。(我无法在互联网上的其他地方找到解决方案的情况。)所以,我有一些源代码,我正在通过JavaCompiler. 然后我尝试使用 Runtime 执行编译后的代码。(也就是说,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. 我从名为 code 的 String 中的上述代码开始。然后我创建一个 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 回答