私は少し困惑しています。私が取り組んでいる (趣味の) JavaFX プログラムがあり、それは私の Mac で問題なくビルドおよび実行されます。(私は最新の Oracle Java 7 を持っています)。Mac (最新の NetBeans) でビルドされた jar ファイルを 32 ビット Linux システム (これも最新の Oracle バージョン) で実行すると、次のエラーが表示されます。
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 でビルドしてから、Linux でビルドした jar ファイルを Mac で実行すると、(事実上) Mac でも同じエラーが発生します。
ビルドと同じプラットフォームで実行すると、すべて正常に動作します。(つまり、コードを取得して Linux でビルドすると、Linux では完全に動作しますが、Mac では動作しません。)
Mac でビルドされた jar ファイル (およびその逆) に対して Linux でデバッガーを実行できないように見えるので、どこから調べればよいか少し迷っています。私はすでに File.separator を使用していることを確認し、他の OS 固有のものを探しましたが、FXMLLoader.java のこれらの行が (ソース コードで) 何であるかを調べて、なぜバーフィングしているのかを確認したいと思います。ほとんどのコードをコメントアウトした後、barf の原因と思われる行は単純なファイルのインスタンス化です。
File myFile = new File(userDirectoryString);
私は多くのファイルとディレクトリを使用しています。この行は、コードでファイルまたはディレクトリを使用するための最初の呼び出しです。文字列「userDirectoryString」を検証しましたが、正しいです。
何か案は?