java - 使用编译器 API 编译 Java 代码时出现问题

标签 java swing security java-web-start accesscontrolexception

我正在构建一个 swing 应用程序,它将使用 java webstart 进行分发。 它是一种 Java 编辑器,我的应用程序的用户将能够在其中编译 Java 源代码。

问题是 -

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

它在开发环境中运行良好。但是当我使用 webstart 部署我的应用程序时,在客户端,它返回 null。这是因为我的应用程序在 JRE 而不是 JDK 上运行。 [System.getProperty("java.home") 指向 JRE]

为了解决这个问题,我遵循了以下 SO 线程中提到的建议。

我将 java.home 属性指向 JDK 的安装目录。

System.setProperty("java.home","C:\\DevEnv\\java");

现在ToolProvider.getSystemJavaCompiler();返回有效的编译器对象,但在用它编译java代码时出现以下异常。实际上是在调用编译器对象的getStandardFileManager方法时。

代码

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    System.out.println("Compiler - " + compiler);

    if(compiler!=null){
        MyDiagnosticListener c = new MyDiagnosticListener(logWindow);
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(c, Locale.ENGLISH, null);

        Iterable<String> options = Arrays.asList("-d", CLASS_OUTPUT_DIR);
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
                            c, options, null, files);
        Boolean result = task.call();
}

异常 -

enter image description here

请帮我解决这个问题。

添加 JNLP

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+" codebase="http://<dynamic-ip>:8080/" href="ProjT.jnlp">
    <information>
        <title>Tectra</title>
        <vendor>Manas Kumar Mukherjee</vendor>
        <homepage href="http://<dynamic-ip>:8080/" />
        <description>Testing Testing</description>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.6+" />
        <jar href="Tools.jar" />
...
        <jar href="log4j-1.2.16.jar" />
    </resources>
    <application-desc main-class="com.ui.DevMain" />
</jnlp>

谢谢

最佳答案

错误应该有助于准确描述问题所在。

“AccessControlContext.checkPermission”失败并显示“AccessControlException:访问被拒绝”。

当该应用程序的 JVM 启动时,检查正在使用哪个用户运行进程。确保启动 JVM 的用户是 super 用户管理员,拥有完整目录树等的所有权限,然后看看是否可以修复该问题。然后缩小访问权限,直到再次中断,您将拥有正确的权限级别。

关于java - 使用编译器 API 编译 Java 代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859438/

相关文章:

java - webapp1的Html5视频使用webapp2的源,如何避免将webapp2暴露给外部网络的浏览器

Java JDBC SQL 异常

java - Maven依赖树和pom依赖

java - 在运行时更改 JTable 引用 - 未出现在 GUI 中

java - JTable 中的多列排序

php - MySQL/PHP - 转义字符可能会降低我的数据库速度(或使其意外执行)

java - 使用所有元素对二维数组进行排序

java - 从 JOptionPane 创建对话框并处理 OK_CANCEL_OPTION

android - 隐含 Intent 的精确传递

java - 多次限制使用公共(public)服务