使用jdk1.7时运行Java + JavaFX应用程序,使用jdk1.8时出错(Java + JavaFX application running when using jdk1.7, errors

编程入门 行业动态 更新时间:2024-10-25 04:17:22
使用jdk1.7时运行Java + JavaFX应用程序,使用jdk1.8时出错(Java + JavaFX application running when using jdk1.7, errors when using jdk1.8)

我一直在尝试开发一个小型的java应用程序。 我正在使用JavaFX作为GUI。 我正在使用eclipse和e(fx)clipse插件。 一切都很好。 我在eclipse中使用jdk1.7.0_60作为默认JRE。 我决定尝试导出到一个可运行的.jar文件,这样我可以在没有eclipse的情况下测试我的应用程序。 这是它出错的地方。

不久前我在我的系统上安装了jre8和jdk1.8.0_05,用于测试目的。 起初我不明白为什么我的应用程序在运行应用程序时一直给出运行时错误/异常,但这是因为我的默认java现在是8。

我将eclipse中的jdk从1.7改为1.8,并且在eclipse中给出了相同的错误/异常,所以我很确定它与我正在运行的jave8有关。 (这两者之间的组合可能?)

这是我第一次使用JavaFX,因此它可能只是一个配置错误。

我已尝试更改我的代码,如此处所述,但它仍然无法正常工作。 以下是一些截图和代码,可以更详细地解释:

Main.java

public class Main extends Application { public static void main(String[] args) { Application.launch(Main.class, args); } @Override public void start(Stage primaryStage) throws Exception { /* FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/gui/Launcher.fxml")); Parent root = (Parent) fxmlLoader.load(); LauncherController controller = fxmlLoader.getController(); controller.setStage(primaryStage); primaryStage.setTitle("The Deep Space Code"); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.setResizable(false); primaryStage.show(); */ Parent root; LauncherController controller; URL location = LauncherController.class.getResource("/fxml/gui/Launcher.fxml"); FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(location); fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); try { root = (Parent) fxmlLoader.load(location.openStream()); controller = (LauncherController) fxmlLoader.getController(); } catch (IOException ioe) { throw new IllegalStateException(ioe); } primaryStage.setTitle("The Deep Space Code"); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.setResizable(false); primaryStage.show(); } }

LauncherController.java

public class LauncherController { @FXML private static WebView WebView; @FXML private static ImageView LaunchImage; @FXML private static TextField FieldMail; @FXML private static PasswordField FieldPassword; @FXML private static CheckBox CheckBoxSave; @FXML private static Button BtnLogIn; @FXML private static Label lblEMail; @FXML private static Label lblPassword; @FXML private static Label lblWelcome; @FXML private static Label lblName; private final static String website = "http://5.231.59.222/Secret/motd"; private static WebEngine webEngine; private Stage stage; private boolean configWrite; private Config config; private User user; private String firstName; private String lastName; private String logged; private long session; public void setStage(Stage stage) { this.stage = stage; } public void initialize() { configWrite = false; webEngine = WebView.getEngine(); webEngine.load(website); Platform.runLater(new Runnable() { @Override public void run() { FieldMail.requestFocus(); } }); // config GET config = ObjectPrinter.readConfig(); if (config != null) { if (!config.getEmail().equals("")) { FieldMail.setText(config.getEmail()); CheckBoxSave.setSelected(true); Platform.runLater(new Runnable() { @Override public void run() { FieldPassword.requestFocus(); } }); } } } @FXML protected void LogInButtonClicked(ActionEvent event) { //Removed code since this doens't matter and was 100+ lines long } @FXML protected void SaveCheckBoxChanged(ActionEvent event) { configWrite = true; } }

Launcher.fxml

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import javafx.scene.image.*?> <?import javafx.scene.web.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <TabPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.LauncherController"> <tabs> <Tab text="Index"> <content> <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"> <children> <ImageView fx:id="LaunchImage" fitHeight="200.0" fitWidth="200.0" layoutX="400.0" layoutY="1.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="@../../../recources/launcher.png" /> </image> </ImageView> <Label fx:id="lblEMail" layoutX="14.0" layoutY="244.0" text="E-Mail" /> <Label fx:id="lblPassword" layoutX="14.0" layoutY="281.0" text="Password" /> <TextField fx:id="FieldMail" layoutX="85.0" layoutY="240.0" prefColumnCount="16" promptText="E-Mail" /> <PasswordField fx:id="FieldPassword" layoutX="85.0" layoutY="277.0" prefColumnCount="16" promptText="Password" /> <CheckBox fx:id="CheckBoxSave" layoutX="85.0" layoutY="318.0" mnemonicParsing="false" onAction="#SaveCheckBoxChanged" text="Save E-Mail" /> <Button fx:id="BtnLogIn" layoutX="174.0" layoutY="310.0" mnemonicParsing="false" onAction="#LogInButtonClicked" prefHeight="27.0" prefWidth="105.0" text="LogIn" textAlignment="CENTER" textFill="BLUE" wrapText="true"> <font> <Font name="Centaur" size="18.0" /> </font> </Button> <WebView fx:id="WebView" layoutX="-1.0" prefHeight="200.0" prefWidth="400.0" /> <Label fx:id="lblWelcome" layoutX="14.0" layoutY="244.0" text="Welcome to The Deep Space Code" visible="false" /> <Label fx:id="lblName" layoutX="14.0" layoutY="281.0" text="Currently logged in as " visible="false" /> </children></AnchorPane> </content> </Tab> <Tab text="Info"> <content> <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> </content> </Tab> </tabs> </TabPane>

http://i.stack.imgur.com/W3eJq.png (图书馆)

错误信息:

Exception in Application start method java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894) at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56) at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalStateException: javafx.fxml.LoadException: /J:/Desktop/Game/Launcher/bin/fxml/gui/Launcher.fxml at application.Main.start(Main.java:46) at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) ... 1 more Caused by: javafx.fxml.LoadException: /J:/Desktop/Game/Launcher/bin/fxml/gui/Launcher.fxml at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2587) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425) at application.Main.start(Main.java:43) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2582) ... 13 more Caused by: java.lang.NullPointerException at application.LauncherController.initialize(LauncherController.java:70) ... 23 more Exception running application application.Main

I have been trying to develop a small java application. I'm using JavaFX for the GUI. I'm using eclipse with the e(fx)clipse plugin. Everything worked fine. I was using jdk1.7.0_60 as me default JRE in eclipse. I decided I wanted to try and export to a runnable .jar file so I could test my application without eclipse. This is where it went wrong.

A while ago I installed jre8 and jdk1.8.0_05 on my system, for testing purposes. At first I didn't understand why my application kept giving runtime errors/Exceptions while running the application, but that is because my default java is 8 now.

I changed my jdk in eclipse from 1.7 to 1.8 and the same errors/exceptions were given in eclipse, so I'm pretty sure it has something to do with the jave8 I'm running. (combination between the two maybe?)

It is my first time using JavaFX so it may just be a configuration error.

I've tried changing my code as explained here but it still does not work. Here are some screenshots and code to explain in more detail:

Main.java

public class Main extends Application { public static void main(String[] args) { Application.launch(Main.class, args); } @Override public void start(Stage primaryStage) throws Exception { /* FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/gui/Launcher.fxml")); Parent root = (Parent) fxmlLoader.load(); LauncherController controller = fxmlLoader.getController(); controller.setStage(primaryStage); primaryStage.setTitle("The Deep Space Code"); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.setResizable(false); primaryStage.show(); */ Parent root; LauncherController controller; URL location = LauncherController.class.getResource("/fxml/gui/Launcher.fxml"); FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(location); fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); try { root = (Parent) fxmlLoader.load(location.openStream()); controller = (LauncherController) fxmlLoader.getController(); } catch (IOException ioe) { throw new IllegalStateException(ioe); } primaryStage.setTitle("The Deep Space Code"); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.setResizable(false); primaryStage.show(); } }

LauncherController.java

public class LauncherController { @FXML private static WebView WebView; @FXML private static ImageView LaunchImage; @FXML private static TextField FieldMail; @FXML private static PasswordField FieldPassword; @FXML private static CheckBox CheckBoxSave; @FXML private static Button BtnLogIn; @FXML private static Label lblEMail; @FXML private static Label lblPassword; @FXML private static Label lblWelcome; @FXML private static Label lblName; private final static String website = "http://5.231.59.222/Secret/motd"; private static WebEngine webEngine; private Stage stage; private boolean configWrite; private Config config; private User user; private String firstName; private String lastName; private String logged; private long session; public void setStage(Stage stage) { this.stage = stage; } public void initialize() { configWrite = false; webEngine = WebView.getEngine(); webEngine.load(website); Platform.runLater(new Runnable() { @Override public void run() { FieldMail.requestFocus(); } }); // config GET config = ObjectPrinter.readConfig(); if (config != null) { if (!config.getEmail().equals("")) { FieldMail.setText(config.getEmail()); CheckBoxSave.setSelected(true); Platform.runLater(new Runnable() { @Override public void run() { FieldPassword.requestFocus(); } }); } } } @FXML protected void LogInButtonClicked(ActionEvent event) { //Removed code since this doens't matter and was 100+ lines long } @FXML protected void SaveCheckBoxChanged(ActionEvent event) { configWrite = true; } }

Launcher.fxml

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import javafx.scene.image.*?> <?import javafx.scene.web.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <TabPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.LauncherController"> <tabs> <Tab text="Index"> <content> <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"> <children> <ImageView fx:id="LaunchImage" fitHeight="200.0" fitWidth="200.0" layoutX="400.0" layoutY="1.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="@../../../recources/launcher.png" /> </image> </ImageView> <Label fx:id="lblEMail" layoutX="14.0" layoutY="244.0" text="E-Mail" /> <Label fx:id="lblPassword" layoutX="14.0" layoutY="281.0" text="Password" /> <TextField fx:id="FieldMail" layoutX="85.0" layoutY="240.0" prefColumnCount="16" promptText="E-Mail" /> <PasswordField fx:id="FieldPassword" layoutX="85.0" layoutY="277.0" prefColumnCount="16" promptText="Password" /> <CheckBox fx:id="CheckBoxSave" layoutX="85.0" layoutY="318.0" mnemonicParsing="false" onAction="#SaveCheckBoxChanged" text="Save E-Mail" /> <Button fx:id="BtnLogIn" layoutX="174.0" layoutY="310.0" mnemonicParsing="false" onAction="#LogInButtonClicked" prefHeight="27.0" prefWidth="105.0" text="LogIn" textAlignment="CENTER" textFill="BLUE" wrapText="true"> <font> <Font name="Centaur" size="18.0" /> </font> </Button> <WebView fx:id="WebView" layoutX="-1.0" prefHeight="200.0" prefWidth="400.0" /> <Label fx:id="lblWelcome" layoutX="14.0" layoutY="244.0" text="Welcome to The Deep Space Code" visible="false" /> <Label fx:id="lblName" layoutX="14.0" layoutY="281.0" text="Currently logged in as " visible="false" /> </children></AnchorPane> </content> </Tab> <Tab text="Info"> <content> <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> </content> </Tab> </tabs> </TabPane>

http://i.stack.imgur.com/W3eJq.png (Libraries)

Error message:

Exception in Application start method java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894) at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56) at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalStateException: javafx.fxml.LoadException: /J:/Desktop/Game/Launcher/bin/fxml/gui/Launcher.fxml at application.Main.start(Main.java:46) at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) ... 1 more Caused by: javafx.fxml.LoadException: /J:/Desktop/Game/Launcher/bin/fxml/gui/Launcher.fxml at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2587) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425) at application.Main.start(Main.java:43) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2582) ... 13 more Caused by: java.lang.NullPointerException at application.LauncherController.initialize(LauncherController.java:70) ... 23 more Exception running application application.Main

最满意答案

它看起来像静态字段不再填充我的FXMLLoader - 你为什么要使用静态变量?

It looks like static-Fields are NOT filled anymore my FXMLLoader - why are you using static variables at all?

更多推荐

本文发布于:2023-08-07 02:44:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1458970.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:时运   应用程序   Java   JavaFX   errors

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!