好吧,我知道这是一个非常普遍,非常简单的问题,但我的情况却很不寻常。 (我无法在互联网上的其他地方找到解决方案的情况。)因此,我有一些源代码,我通过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");
}
}
即使该代码也不会执行。我仍然得到同样的错误。在此先感谢您的帮助。 :)
*编辑: 我详细介绍的步骤如下:
我从名为code的String中开始使用上面提到的代码。然后我创建一个File对象(在本例中为Compiled.java。)
我使用了我测试的自定义方法并确保它可以编译文件(并且可选地从中获取一个Class对象,但是,由于特定原因,我不能这样做为此。)进入.class文件。 (使用JavaCompiler
API。)
然后我使用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()
位的代码,请转到here。
答案 0 :(得分:3)
您没有将正确的参数传递给Runtime.exec()
。
您传递已编译的类文件的实际位置。但是,您应该传递一个类名,如果您的类在一个包中,您还需要将包层次结构的根作为-classpath
参数传递。
JDK文档中描述了这一点:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html