简体   繁体   中英

Java + JavaFX application running when using jdk1.7, errors when using jdk1.8

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似乎不再填充静态字段-为什么要使用静态变量呢?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM