无法找到或加载主类 - 在特殊情况下

时间:2012-12-27 18:34:08

标签: java compilation runtime java-compiler-api

好吧,我知道这是一个非常普遍,非常简单的问题,但我的情况却很不寻常。 (我无法在互联网上的其他地方找到解决方案的情况。)因此,我有一些源代码,我通过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文件。 (使用JavaCompiler API。)

  3. 然后我使用Runtime.getRuntime.exec(new String[]{"java",[location of .class file]});执行它。

  4. 此时我收到了错误。

    我正在使用的确切代码是这个..

    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()位的代码,请转到here

1 个答案:

答案 0 :(得分:3)

您没有将正确的参数传递给Runtime.exec()

您传递已编译的类文件的实际位置。但是,您应该传递一个类名,如果您的类在一个包中,您还需要将包层次结构的根作为-classpath参数传递。

JDK文档中描述了这一点:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html