簡體   English   中英

在我的64位Mac上使用netbeans構建的JavaFX無法在32位Linux上運行

[英]JavaFX built with netbeans on my 64 bit Mac won't run on 32 bit Linux

我有點困惑。 我有一個正在使用的JavaFX程序(業余愛好),它可以在Mac上正常構建和運行。 (我有最新的Oracle Java 7)。 當我在32位Linux系統(也具有最新的Oracle版本)上運行在Mac(最新的NetBeans)中構建的jar文件時,出現以下錯誤:

java.lang.reflect.InvocationTargetException
file:/home/me/aFolder/SomeOne/Saved/Something.jar!/Something/mainWindow.fxml
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2186)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2744)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2723)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2709)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2696)
   at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2685)
   at Something.Something.start(Something.java:33)
   at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
   at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
   at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
   at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176)
   at java.security.AccessController.doPrivileged(Native Method)
   at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
   at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
   at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
   at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82)
   at java.lang.Thread.run(Unknown Source)

我在這里調用Something.java:33

AnchorPane mainWindowPane =     
  (AnchorPane)FXMLLoader.load(UdoMail.class.getResource("mainWindow.fxml"));

因此,我對於從哪里開始感到困惑。 這是在我的Mac上構建的jar文件,已移至32位Linux(運行最新的32位Oracle Java)並運行。

相當奇怪的是,如果我在32位Linux上構建它,然后在Mac上運行Linux構建的jar文件,則在Mac上(有效)會出現相同的錯誤。

如果我在構建時使用同一平台,則一切正常。 (也就是說,如果我接受代碼並將其構建在Linux上,則可以在Linux上完美運行,但不能在Mac上運行。)

由於我似乎無法在Linux上為Mac內置的jar文件運行調試器(反之亦然),因此我對從哪里開始尋找有所迷惑。 我已經確保使用File.separator並查找其他特定於OS的東西,但是我想找出FXMLLoader.java中的這些行是什么(在源代碼中),以了解為什么要進行交換。 注釋掉大部分代碼后,似乎導致barf的行是一個簡單的File實例化:

File myFile = new File(userDirectoryString);

我使用了許多文件和目錄,而這行是代碼中第一次使用文件或目錄。 我已經驗證了字符串“ userDirectoryString”,它是正確的。

有任何想法嗎?

我只能提供您在這里的想法:

public static final String INITIALIZE_METHOD_NAME = "initialize";

// Initialize the controller
            Method initializeMethod =   getControllerMethods().get(INITIALIZE_METHOD_NAME);

            if (initializeMethod != null) {
                try {
                    MethodUtil.invoke(initializeMethod, controller, new Object [] {});
                } catch (IllegalAccessException exception) {
                    // TODO Throw when Initializable is deprecated/removed
                    // throw new LoadException(exception);
                } catch (InvocationTargetException exception) {
                    throw new LoadException(exception);
                }
            }

您可以在OpenJFX中找到此代碼。

我們可以看到,這意味着該方法initialize()在其工作期間引發了異常。

您必須在應該在其上運行的系統上編譯代碼。 JVM掃描您的系統,並為您在其上構建機器的機器寫字節碼。 您的代碼沒有錯,這就是JVM的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM