/ / JavaFX construído com netbeans no meu Mac de 64 bits não roda no Linux de 32 bits - java, multiplataforma, javafx-2

JavaFX construído com netbeans no meu Mac de 64 bits não rodará em Linux de 32 bits - java, multi-plataforma, javafx-2

Estou um pouco perplexo. Eu tenho um programa JavaFX no qual estou trabalhando (hobby) e ele cria e executa muito bem no meu Mac. (Eu tenho o Oracle Java 7 mais recente). Quando executo o arquivo jar que foi criado no Mac (na versão mais recente) NetBeans), no meu sistema Linux de 32 bits (também com a versão mais recente do Oracle), gera o seguinte erro:

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)

A linha para Something.java:33 é onde eu chamo

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

Portanto, estou um pouco confuso sobre por onde começar. Este é um arquivo jar criado no meu Mac, movido para um Linux de 32 bits (executando o Oracle Java mais recente de 32 bits) e executado.

O que é bastante estranho é que, se eu criar isso no Linux de 32 bits e executar o arquivo jar construído no Linux no meu Mac, obter (efetivamente) o mesmo erro no Mac.

Se eu rodar na mesma plataforma que eu construo, tudo funciona muito bem. (Ou seja, se eu pegar o código e construí-lo no Linux, ele funcionará perfeitamente no Linux, mas não no Mac.)

Como não consigo executar um depurador no Linux paraNo arquivo jar criado pelo Mac (e vice-versa), estou um pouco perdido por onde começar a procurar. Já garanto que estou usando o File.separator e procurei outras coisas específicas do sistema operacional, mas gostaria de encontrar descubra quais são essas linhas no FXMLLoader.java (no código-fonte) para ver por que ele está vomitando. Depois de comentar a maior parte do código, a linha que parece causar o vomitar é uma simples instanciação de arquivo:

File myFile = new File(userDirectoryString);

Eu uso muitos arquivos e diretórios, e essa linha é a primeira chamada para o uso de arquivos ou diretórios no meu código. Eu validei a String "userDirectoryString" e está correta.

Alguma ideia?

Respostas:

0 para resposta № 1

Só posso ajudar com a noção de que você está aqui:

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);
}
}

Você pode encontrar esse código no OpenJFX.

Podemos ver que isso significa que o método initialize () lançou uma exceção durante seu trabalho.


0 para resposta № 2

Você precisa compilar o código no sistema em que estádeveria correr. A JVM varre seu sistema e grava código de bytes para a máquina na qual você o construiu. Não há nada de errado com seu código, é como a JVM funciona.