Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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
为什么';这不是编译吗?(JavaCompiler工作正常,但表示需要请求注释处理)_Java_Compilation_Javacompiler - Fatal编程技术网

为什么';这不是编译吗?(JavaCompiler工作正常,但表示需要请求注释处理)

为什么';这不是编译吗?(JavaCompiler工作正常,但表示需要请求注释处理),java,compilation,javacompiler,Java,Compilation,Javacompiler,这就是错误 错误:只有在显式请求注释处理时才接受类名“Hello.java”。错误1 这是Java编译器代码 public static void main(String[] args) { PrintWriter writer = new PrintWriter( System.out); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileM

这就是错误

错误:只有在显式请求注释处理时才接受类名“Hello.java”。错误1

这是Java编译器代码

public static void main(String[] args) {
    PrintWriter writer = new PrintWriter( System.out);
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileManager = compiler.getStandardFileManager( null, null, null);
    ArrayList<String> classes = new ArrayList<>();
    classes.add( "Hello.java");

    JavaCompiler.CompilationTask task = compiler.getTask( writer, fileManager, null, null, classes, null);
    task.call();
}

我知道这个问题被问了将近一百万次,但是所有的答案都是这样的:“你忘了在你的类名末尾添加.java”,但是我做到了,正如你所看到的。为什么这样不行?使用JavaCompiler时会有所不同吗?构造函数中的参数是否错误?谢谢您的帮助。

您误用了编译器对象:

  • Classes参数用于传递注释
  • CompliationUnits参数是您应该使用的参数
  • 您应该这样称呼它(注意:您必须提供文件的有效路径):

    PrintWriter=新的PrintWriter(System.out);
    JavaCompiler=ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null);
    
    IterableIs这个“Hello”类在编译期间应该打印什么,是否可以打印到控制台,或者它只能编译?
    public class Hello {
        public static void main(String[] args) {
            System.out.println( "Hi");
        }
    }
    
    PrintWriter writer = new PrintWriter(System.out);
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
    
    Iterable<? extends JavaFileObject> units =
        fileManager.getJavaFileObjectsFromFiles(
            Arrays.asList(new File("Hello.java"))); // put absolute path here
    
    JavaCompiler.CompilationTask task = compiler.getTask(
        writer, fileManager, null, null, null, units); // provide units, not classes
    task.call();
    
    fileManager.close();