为什么';这不是编译吗?(JavaCompiler工作正常,但表示需要请求注释处理)
这就是错误 错误:只有在显式请求注释处理时才接受类名“Hello.java”。错误1 这是Java编译器代码为什么';这不是编译吗?(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
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时会有所不同吗?构造函数中的参数是否错误?谢谢您的帮助。您误用了编译器对象:
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();