Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 代码在命令行上工作,但在eclipse中不工作(从字符串编译类…)_Java_Eclipse_Compiler Construction - Fatal编程技术网

Java 代码在命令行上工作,但在eclipse中不工作(从字符串编译类…)

Java 代码在命令行上工作,但在eclipse中不工作(从字符串编译类…),java,eclipse,compiler-construction,Java,Eclipse,Compiler Construction,我有一段代码,它从一个字符串编译一个类,然后运行它。它可以在命令行中正常工作,但在eclipse中无法正常工作 import java.lang.reflect.Method; import java.util.Arrays; import javax.tools.DiagnosticCollector; import javax.tools.JavaCompiler; import javax.tools.JavaCompiler.CompilationTask; import javax.t

我有一段代码,它从一个字符串编译一个类,然后运行它。它可以在命令行中正常工作,但在eclipse中无法正常工作

import java.lang.reflect.Method;
import java.util.Arrays;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject;
import javax.tools.ToolProvider;

public class Another2 {

    public static void main(String args[]) throws Exception {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
        String temp = "public class ByeWorld {\n" + "  public static void main(String args[]) {"
                + " System.out.println(\"First of our Compiled Class\");}}";
        JavaFileObject file = new JavaSourceFromString("ByeWorld", temp);
        Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(file);
        CompilationTask task = compiler.getTask(null, null, diagnostics, null, null, compilationUnits);
        task.call();
        ClassLoader classLoader = Another2.class.getClassLoader();
        Class<?> myclass = classLoader.loadClass("ByeWorld");
        Method mymethod = myclass.getDeclaredMethod("main", new Class[] { String[].class });
        mymethod.invoke(null, new Object[] { null });
    }
}
但在eclipse中,我得到:

Exception in thread "main" java.lang.ClassNotFoundException: ByeWorld
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at Another2.main(Another2.java:21)

有什么事吗?它是永久性的吗?我的解决方法是什么

我敢打赌文件所在的目录和加载类的目录是不同的。所以本质上这是一个工作目录/类路径问题。请记住,Eclipse正试图使事情变得更简单,它不希望在当前工作目录中查找.class文件


尝试对文件应该放在哪里和从哪里加载进行硬编码,看看这是否会改变情况。我怀疑它会,但不能确定。

当我在Java构建路径中将根项目文件夹添加为“外部类文件夹”时,该程序在Eclipse中为我工作

例如,假设我的项目位于“C:\EclipseWS\MyProject”。
转到项目属性,然后是Java构建路径,然后转到库选项卡,并单击“添加外部类文件夹”按钮。导航到“C:\EclipseWS\MyProject”,然后单击“确定”

我之前遇到过这个问题。我修复的方法只是在Eclipse中创建一个项目。然后在eclipse中创建了名称完全相同的所有类和包。然后将代码从旧文件复制并粘贴到新的eclipse类。

hmmm。。。好的,它正在/中创建类,但是eclipse找不到它(所有其他类都在/bin中),试图将根添加到类路径时,eclipse向我抱怨。。。可能有一个明显的解决方案…结果证明重写类加载器是有帮助的-但是你应该知道,eclipse把它放在了某个地方,然后找不到正确的地方。。。
Exception in thread "main" java.lang.ClassNotFoundException: ByeWorld
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at Another2.main(Another2.java:21)