JavaCompiler没有正确编译文件

我正在尝试习惯JavaCompiler并尝试用它编译程序,我可以成功编译包含单个文件的程序,但是当我试图用多个文件编译项目时。 我在编译实现其他类的文件时遇到错误,并且类在哪里使用实现类中的方法。

这是我用来编译java代码的代码

private final String directoryForBin = "C:/TempBINfolder/bin"; public List doCompilation(String sourceCode, String locationOfFile) { List compile = new ArrayList(); SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject(locationOfFile, sourceCode); JavaFileObject javaFileObjects[] = new JavaFileObject[]{fileObject}; JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null); Iterable compilationUnits = Arrays.asList(javaFileObjects); // creates a Temp BIN foler on the C: drive to add .class files for compiling new File(directoryForBin).mkdirs(); String[] compileOptions = new String[]{"-d", directoryForBin, "-classpath", System.getProperty("java.class.path")}; Iterable compilationOptions = Arrays.asList(compileOptions); DiagnosticCollector diagnostics = new DiagnosticCollector(); CompilationTask compilerTask = compiler.getTask(null, stdFileManager, diagnostics, compilationOptions, null, compilationUnits); boolean status = compilerTask.call(); if (!status) {//If compilation error occurs // Iterate through each compilation problem and print it for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { compile.add(diagnostic.getKind().toString()+" on line "+ diagnostic.getLineNumber() +"\nIn file: \n"+ diagnostic.toString()+"\n\n"); } } try { stdFileManager.close();//Close the file manager } catch (IOException e) { e.printStackTrace(); } return compile; } 

这是我尝试编译的类之一的示例

  public class IntegerComparator implements Comparator { public IntegerComparator(){} public int compare(Integer a, Integer b) { int aValue = a.intValue(); int bValue = b.intValue(); return (aValue - bValue); } } 

有没有人知道这里出了什么问题以及为什么我的代码没有找到实现的类,即使它与实现它的类在同一个文件夹中?

是因为包不在程序的顶部吗?

编辑:这是上述示例的输出错误

 ERROR on line 8 In file: /projects/Compiler/Studentfilestotest/LAB3/aroc1/a3/IntegerComparator.java:8: error: cannot find symbol implements Comparator ^ symbol: class Comparator 

这就是System.getProperty("java.class.path")返回的内容

 C:\projects\Compiler\Compiler\Jar Files\jsyntaxpane-0.9.5-b29.jar; C:\projects\Compiler\Compiler\Jar Files\jtar-1.1.jar; C:\projects\Compiler\Compiler\Jar Files\sqlitejdbc-v056.jar; C:\Program Files\NetBeans 7.1.2\java\modules\ext\beansbinding-1.2.1.jar; C:\Program Files\NetBeans 7.1.2\java\modules\ext\AbsoluteLayout.jar; C:\projects\Compiler\Compiler\Jar Files\junit-4.11-SNAPSHOT-20120416-1530.jar; C:\projects\Compiler\Compiler\Jar Files\commons-io-2.4-bin.zip; C:\projects\Compiler\Compiler\Jar Files\commons-io-2.4\commons-io-2.4.jar; C:\projects\Compiler\Compiler\Jar Files\poi-3.8\poi-3.8-20120326.jar; C:\projects\Compiler\Compiler\Jar Files\javamail-1.4.5\mail.jar; C:\projects\Compiler\Compiler\build\classes 

最有可能的是,这与编译器无关。 我的猜测是,这是因为源文件中的错误。 你还记得导入适当的类和接口吗?

您的IntegerComparator.java文件需要包含导入:

 import java.util.Comparator; // <--- Import! public class IntegerComparator implements Comparator{ public IntegerComparator(){} public int compare(Integer a, Integer b){ int aValue = a.intValue(); int bValue = b.intValue(); return (aValue - bValue); } } 

忘记导入适当的类通常会导致“找不到符号”错误消息。