javafx fxml程序错误(无主要方法)

时间:2016-03-27 16:48:38

标签: java netbeans javafx fxml

我是javafx和fxml的新手。我正在努力教自己!但是,当我为简单的登录GUI创建程序时,当我最终尝试运行我的程序时,我遇到了一个问题。它告诉我课堂上没有主要方法,我不确定如何解决它。有什么想法吗?

我的程序会创建一个登录屏幕,当您输入“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>

1 个答案:

答案 0 :(得分:1)

From Oracle

  

当使用JavaFX Packager工具创建应用程序的JAR文件时,JavaFX应用程序不需要main()方法,该工具将JavaFX Launcher嵌入JAR文件中。但是,包含main()方法非常有用,因此您可以运行在没有JavaFX Launcher的情况下创建的JAR文件,例如在使用未完全集成JavaFX工具的IDE时。此外,嵌入JavaFX代码的Swing应用程序需要main()方法。

因此,一种解决方案是确保以完全支持JavaFX工具的方式构建它。另一种解决方案是添加def check(value) if !value.nil? return value else exit end end 方法来启动应用程序。这样可以避免任何类似的潜在问题,并且在不需要的情况下不会造成任何问题。

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

main

这将简单地将控制权传递给JavaFX,以便像通常那样处理。