按钮在可执行JAR

时间:2018-04-16 01:43:18

标签: java intellij-idea javafx jar executable

我正在处理我需要制作可执行文件的简单应用程序。

我正试图在同一个窗口中从一个场景切换到另一个场景。在Intellij中运行时,一切都运行良好。但是,当我创建可执行应用程序时,突然控制按钮停止工作。

有我的主要课程:

    package code;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("FxmlLoginMenu.fxml"));
        primaryStage.setTitle("Quiz application");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

控制器类: 按下按钮时执行的一种方法

    package code;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import java.io.IOException;

public class Controller {

@FXML public Button signUp;


@FXML public void signUp() throws IOException {

        Parent tableViewParent = FXMLLoader.load(getClass().getResource("FXMLRegister.fxml"));
        Scene tableViewScene = new Scene(tableViewParent);
        Stage window = (Stage) signUp.getScene().getWindow();
        window.setScene(tableViewScene);
        window.show();
}
}

最后一次FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.effect.InnerShadow?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Line?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>

<AnchorPane fx:controller="code.Controller"  prefHeight="385.0" prefWidth="437.0" xmlns="http://javafx.com/javafx/9.0.4" xmlns:fx="http://javafx.com/fxml/1" >

    <children >
        <MenuBar />
        <AnchorPane  id="login" maxHeight="-1.0" maxWidth="-1.0" prefHeight="418.0" prefWidth="626.0" style="-fx-background-color: #74AFAD#74AFAD;" VBox.vgrow="ALWAYS">
            <children>
                <AnchorPane id="login2" layoutX="325.0" layoutY="40.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="291.0" prefWidth="313.0" style="-fx-background-color: #D9853B#D9853B;">
                    <children>
                        <TextField fx:id="loginField" alignment="TOP_CENTER" layoutX="75.0" layoutY="95.0" promptText="Login">
                            <effect>
                                <InnerShadow />
                            </effect>
                        </TextField>
                        <PasswordField fx:id="passwordField" alignment="TOP_CENTER" layoutX="75.0" layoutY="159.0" promptText="Password">
                            <effect>
                                <InnerShadow blurType="TWO_PASS_BOX" />
                            </effect>
                        </PasswordField>
                        <Button fx:id="loginButton" layoutX="177.0" layoutY="247.0" mnemonicParsing="false"  prefHeight="27.0" prefWidth="65.0" style="-fx-background-color: #74AFAD#74AFAD #74AFAD#74AFAD;" text="Login" />
                  <Button fx:id="signUp" onAction="#signUp" layoutX="75.0" layoutY="247.0" mnemonicParsing="false"  style="-fx-background-color: #74AFAD#74AFAD #74AFAD#74AFAD;" text="Sign up" />
                  <Button fx:id="signUpAdmin" layoutX="242.0" layoutY="8.0" mnemonicParsing="false"  style="-fx-background-color: #74AFAD#74AFAD #74AFAD#74AFAD;" text="Admin" />
                    </children>
                </AnchorPane>
            <Line endX="100.0" fill="#ff2323" layoutX="360.0" layoutY="190.0" rotate="90.0" startX="-190.0" stroke="#e43030" strokeLineJoin="ROUND" strokeMiterLimit="0.0" />
            <Text fill="#d9853b" layoutX="21.0" layoutY="202.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Welcome to Quiz app" wrappingWidth="284.21875">
               <font>
                  <Font size="27.0" />
               </font>
            </Text>
            </children>
        </AnchorPane>
        <AnchorPane />
    </children>
</AnchorPane>

1 个答案:

答案 0 :(得分:0)

好的,我设法解决了这个问题。 问题出在Controller类中。它试图用

加载FXML
FXMLLoader.load(getClass().getResource("FXMLRegister.fxml"));

应该在哪里

FXMLLoader.load(getClass().getResource("FxmlRegister.fxml"));

显然IntelliJ没有捕获到该错误,因此在IntelliJ运行时它正在工作。