1

私は少し困惑しています。私が取り組んでいる (趣味の) 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」を検証しましたが、正しいです。

何か案は?

4

2 に答える 2

0

実行するシステムでコードをコンパイルする必要があります。JVM はシステムをスキャンし、それを構築したマシンのバイト コードを書き込みます。コードに問題はありません。それが JVM の仕組みです。

于 2014-12-18T22:01:24.397 に答える
0

私がお手伝いできるのは、あなたがここにいるという考えだけです。

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() が作業中に例外をスローしたことを意味することがわかります..

于 2013-05-14T16:41:26.393 に答える