簡體   English   中英

javafx fxml程序錯誤(沒有main方法)

[英]javafx fxml program error(no main method)

我對 javafx 和 fxml 還很陌生。 我在努力自學! 但是,當我為簡單的登錄 GUI 創建程序時,當我最終嘗試運行我的程序時遇到了問題。 它告訴我我的類中沒有 main 方法,我不確定如何修復它。 有任何想法嗎?

我的程序會創建一個登錄屏幕,當您輸入“test”作為用戶名和密碼時,它會將您帶到另一個場景。

這是我的 Login.java

package com;

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

    /**
     *
     * @author Tyler
     */
    public class Login extends Application{

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

    }

這是我的 LoginController.java

package com;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

/**
 * FXML Controller class
 *
 * @author Tyler
 */
public class LoginController implements Initializable {

    @FXML
    private Label lblMessage; 
    @FXML
    private TextField txtUsername;
    @FXML
    private PasswordField txtPassword;
    @FXML
    private void btnLoginAction(ActionEvent event) throws Exception{
        if(txtUsername.getText().equals("test") && txtPassword.getText().equals("test")){
            ((Node) (event.getSource())).getScene().getWindow().hide();
            Parent parent = FXMLLoader.load(getClass().getResource("DateSelection.fxml"));
            Stage stage  = new Stage();
            Scene scene = new Scene(parent);
            stage.setScene(scene);
            stage.setTitle("Date Selection");
            stage.show();
        }else{
            lblMessage.setText("Username or Password is invalid!");
        }
    }
    /**
     * Initializes the controller class.
     * @param url
     * @param rb
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

這是我的 Login.fxml

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

<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" fx:id="lblMessage" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.LoginController">
   <children>
      <PasswordField fx:id="txtPassword" layoutX="200.0" layoutY="200.0" prefHeight="30.0" prefWidth="200.0" promptText="Password" />
      <TextField fx:id="txtUsername" layoutX="200.0" layoutY="140.0" prefHeight="30.0" prefWidth="200.0" promptText="Username" />
      <Button fx:id="btnLogin" layoutX="269.0" layoutY="251.0" mnemonicParsing="false" onAction="#btnLoginAction" prefHeight="30.0" text="Login">
         <font>
            <Font size="14.0" />
         </font></Button>
      <Label fx:id="lblMessage" layoutX="283.0" layoutY="71.0" text="Label" />
   </children>
</AnchorPane>

Here is my DateSelectionController.java

package com;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;

/**
 * FXML Controller class
 *
 * @author Tyler
 */
public class DateSelectionController implements Initializable {

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

這是我的 DateSelection.fxml

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

<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="com.DateSelectionController">
   <children>
      <Label layoutX="191.0" layoutY="164.0" text="Welcome">
         <font>
            <Font name="System Bold" size="50.0" />
         </font>
      </Label>
   </children>
</AnchorPane>

從甲骨文

當使用 JavaFX Packager 工具創建應用程序的 JAR 文件時,JavaFX 應用程序不需要 main() 方法,該工具將 JavaFX Launcher 嵌入 JAR 文件中。 但是,包含 main() 方法很有用,因此您可以運行在沒有 JavaFX Launcher 的情況下創建的 JAR 文件,例如在使用未完全集成 JavaFX 工具的 IDE 時。 此外,嵌入 JavaFX 代碼的 Swing 應用程序需要 main() 方法。

因此,一種解決方案是確保以完全支持 JavaFX 工具的方式構建它。 另一種解決方案是添加一個main方法來啟動應用程序。 這將避免任何這樣的潛在問題,並且在不需要的情況下不會引起任何問題。

您的主要方法應如下所示:

public static void main(String[] args){
    Application.launch(Login.class, args);
}

這將簡單地將控制權傳遞給 JavaFX 以像往常一樣進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM