2012-04-23 114 views
1

如果我正確地閱讀了JavaFX部署指南,我應該能夠部署未簽名的應用程序,只要「該應用程序需要[沒有]提升的權限......」。我在我的應用程序已經減少到下面的代碼位:通過JNLP啓動程序會產生安全異常

package fxadhoc; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

public class FXAdHoc 
    extends Application 
{ 

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

    @Override 
    public void start(Stage stage) throws Exception 
    { 
     Pane root = new Pane(); 
     root.getChildren().add(new Label("Testing")); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

當我雙擊jar文件(通過NetBeans中創建)什麼也不會發生。當我嘗試通過HTML或JNLP文件(也由NetBeans中創建)推出我得到一個安全異常:

Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "javafx.debug" "read") 

完整的堆棧跟蹤如下。

我正在運行Windows 7並應用了所有最新更新。我已經下載了最新版本的NetBeans(7.1.1),它配備了最新版本的JavaFX。我已經下載了JavaFX示例,並且它們運行良好。 (如果您好奇,我嘗試自簽名應用程序並得到異常「ava.lang.RuntimeException:java.lang.UnsatisfiedLinkError:無法加載庫:C:\ Users \ jack \ Documents \ NetBeansProjects \ FXAdHoc \ DIST \ BIN \ mat.dll「)。當我在Linux上構建時(同樣使用NetBeans 7.1.1),我會遇到同樣的異常。

有誰能告訴我我錯過了什麼嗎?謝謝...

爲異常的完整堆棧跟蹤:

java.lang.RuntimeException: Application launch error 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:104) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ExceptionInInitializerError 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:140) 
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:27) 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:97) 
    ... 1 more 
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "javafx.debug" "read") 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPropertyAccess(Unknown Source) 
    at java.lang.System.getProperty(Unknown Source) 
    at com.sun.javafx.runtime.SystemProperties.getProperty(SystemProperties.java:178) 
    at com.sun.javafx.runtime.SystemProperties$1.run(SystemProperties.java:67) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.runtime.SystemProperties.<clinit>(SystemProperties.java:62) 
    ... 4 more 
+0

嘗試後[JavaFX的開發者預覽版(http://www.oracle.com/technetwork/java/javafx/downloads/devpreview-1429449.html)和提版本和構建你試過數。嘗試以jnlp的身份運行[Getting Started NetBeans Project](http://docs.oracle.com/javafx/2.0/get_started/ColorfulCircles.zip)並查看是否有效。 – jewelsea 2012-04-23 21:45:59

回答

1

顯然,我有三個不同的問題;如果我有任何錯誤,請糾正我。

  1. 應該有可能部署未簽名的JAR文件,但你不能。我相信這是一個已知的問題。
  2. 下載並安裝JavaFX運行時不會自動使其從路徑中可用。 (我不知道爲什麼我無法運行自己的代碼時可以運行示例,但我必須弄清楚。)將"...\JavaFX 2.o runtime\bin"放入我的路徑中可以治癒我的「找不到mat.dll」問題。假設將包含libmat.so的目錄放入我的Linux系統的路徑中,也可以解決這個問題。
  3. 由於我嘗試了不同的方法來解決這個問題,我偶爾也會遇到「無符號資源」異常,即使我的jar文件已經簽名。我相信這是一個已知的Java問題,至少要回到1.4。解決方案是禁用緩存臨時文件(Windows control panel/java/general/settings)。請注意,我讀的一些言論說,啓用緩存是什麼修復問題。
+0

1.要作爲網絡啓動應用程序運行,您必須簽名。您可以使用Netbean 7.1或使用javafx運行時庫中提供的ant-javafx-tool手動構建它。 – Thinhbk 2012-05-15 01:29:58