繁体   English   中英

无法在Netbeans IDE打包的浏览器中运行简单的JavaFX

[英]Can't run a simple JavaFX in a Browser packaged by Netbeans IDE

我创建了标准的NetBeans JavaFX应用程序,并尝试在浏览器中运行它,但是我没有运气。 我没有运气就遵循了所有指示。 我没有做任何特殊的标准JavaFX,而是使用NetBeans IDE构建它。

这是我收到的错误消息:

CacheEntry[file:/Users/mo/NetBeansProjects/WebAppTest/dist/WebAppTest.jar]: updateAvailable=false,lastModified=Fri Mar 04 07:03:31 EST 2016,length=19089
    java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.dir" "read")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
        at java.security.AccessController.checkPermission(AccessController.java:884)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at sun.plugin2.applet.FXAppletSecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294)
        at java.lang.System.getProperty(System.java:717)
        at java.io.UnixFileSystem.resolve(UnixFileSystem.java:133)
        at java.io.File.getAbsolutePath(File.java:556)
        at webapptest.WebAppTest.start(WebAppTest.java:24)
        at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:134)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.dir" "read")
        at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:150)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.dir" "read")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
        at java.security.AccessController.checkPermission(AccessController.java:884)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at sun.plugin2.applet.FXAppletSecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294)
        at java.lang.System.getProperty(System.java:717)
        at java.io.UnixFileSystem.resolve(UnixFileSystem.java:133)
        at java.io.File.getAbsolutePath(File.java:556)
        at webapptest.WebAppTest.start(WebAppTest.java:24)
        at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:134)
        ... 4 more

JavaFX应用程序:

FXML文件

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="webapptest.FXMLDocumentController">
    <children>
        <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
        <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" />
    </children>
</AnchorPane>

控制器:

public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

主要方法

public class WebAppTest extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        File f = new File("FXMLDocument.fxml");
        String filePath = f.getAbsolutePath();
        Parent root = FXMLLoader.load(getClass().getResource(filePath));
        System.out.println(filePath);

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

由于证书签名问题:我手动信任dist \\目录:

关于FXML文件,如果我没有做getAbsolutePath(); 然后使用下面的代码获取资源。 我收到不同的错误消息:

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

如果我不使用getAbsolutePath(),则会出现以下错误:

updateAvailable=true,lastModified=Fri Mar 04 09:12:56 EST 2016,length=19089
java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at webapptest.WebAppTest.start(WebAppTest.java:26)
    at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:134)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.NullPointerException: Location is required.
    at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:150)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at webapptest.WebAppTest.start(WebAppTest.java:26)
    at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:134)
    ... 4 more

Here is the content of the Jar file: 

在此处输入图片说明

自您更新答案以来,现在可以清楚地知道您实际要做什么。 与其将类路径资源(通过getClass().getResource()检索到的)转换为文件,不如直接使用该资源:

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

您根本不想处理File类,因为资源来自JAR文件内部。 放弃所有这些代码。

另外,请确保将FXMLDocument.fxml放置在webapptest包中。 如果将其放置在类路径的根目录,请改用.getResource("/FXMLDocument.fxml")

包括注释中提到的内容:您可能需要清理并重建项目,以使资源正确显示。

问题是您被拒绝了文件系统的权限。

为了使您的小程序能够接收文件系统权限,必须使用代码证书(这需要花钱)对它进行签名,或者您需要在Java小程序策略文件中添加安全例外。

另请参阅:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM