用JavaCompiler以编程方式编译java?

发布于 2024-12-08 12:06:46 字数 974 浏览 2 评论 0原文

我从另一个 Stack Overflow 线程中获取了这段 Java 代码

import java.io.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class Main {
  public static void main(String[] args) throws IOException{
    String source = " public class Test { public static void main(String args[]) {     System.out.println(\"hello\"); } }";

    // Save source in .java file.
    File root = new File("C:\\java\\");
    root.mkdir();
    File sourceFile = new File(root, "\\Test.java");
    Writer writer = new FileWriter(sourceFile);
    writer.write(source);
    writer.close();

    // Compile source file.
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, sourceFile.getPath());
  }
}

,但我不断收到这样的 NullPointerException

Exception in thread "main" java.lang.NullPointerException
    at com.zove.compiler.Main.main(Main.java:24)

确实编译,但在运行时抛出异常。 我做错了什么?

I got this Java code from another Stack Overflow thread

import java.io.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class Main {
  public static void main(String[] args) throws IOException{
    String source = " public class Test { public static void main(String args[]) {     System.out.println(\"hello\"); } }";

    // Save source in .java file.
    File root = new File("C:\\java\\");
    root.mkdir();
    File sourceFile = new File(root, "\\Test.java");
    Writer writer = new FileWriter(sourceFile);
    writer.write(source);
    writer.close();

    // Compile source file.
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, sourceFile.getPath());
  }
}

But I keep getting a NullPointerException like this

Exception in thread "main" java.lang.NullPointerException
    at com.zove.compiler.Main.main(Main.java:24)

It does compile but it throws the exception at runtime.
What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

So要识趣 2024-12-15 12:06:46

当我使用 JDK 执行你的代码时,它对我来说工作得很好。如果我使用 JRE 执行它,我会像您一样在 compiler.run(...) 上得到一个 NullPointerException 。

因此我假设您只需切换 Java 运行时即可执行代码。

Your code works fine for me when I execute it using the JDK. If I execute it using the JRE I get a NullPointerException on compiler.run(...) like you.

Therefore I assume that you only have to switch the Java runtime for executing your code.

梦与时光遇 2024-12-15 12:06:46

嗯,你不能使用 JRE 编译 java 程序。

所以你的路径中必须有JDK,这样编译才可能。

在您的情况下,如果您在命令行中运行,甚至无需运行您的程序:
javac 你会得到

“javac”未被识别为内部或外部命令

这就是您收到空指针异常的原因。

Well you can't compile java programs using the JRE.

So you have to have the JDK in your path so that the compilation be possible.

In your case without even running your program if you run in command line:
javac you would get

'javac' is not recognized as an internal or external command

This is why you get the null pointer exception.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文