2016-03-27 2 views
1

Я довольно новичок в javafx и fxml. Я пытаюсь научить себя! Однако, когда я создавал программу для простого графического интерфейса входа в систему, я столкнулся с проблемой, когда наконец попытался запустить свою программу. Он сказал мне, что в моем классе нет основного метода, и я не уверен, как его исправить. Есть идеи?javafx fxml ошибка программы (нет основного метода)

Моя программа создает экран входа в систему, и когда вы вводите «тест» для имени пользователя и пароля, это приведет вас к другой сцене.

Вот мой 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

From Oracle:

метод Main() не требуется для приложений JavaFX, когда файл JAR для приложение создается с помощью инструмента JavaFX Packager, который включает Jav aFX Launcher в файле JAR. Однако полезно включить метод main(), чтобы вы могли запускать JAR-файлы, созданные без запуска JavaFX Launcher, например, при использовании среды IDE, в которой инструменты JavaFX не полностью интегрированы. Кроме того, для приложений Swing, встраивающих JavaFX-код, требуется метод main().

Таким образом, одно из решений заключается в том, чтобы убедиться, что он построен таким образом, который полностью поддерживает инструменты JavaFX. Другим решением является добавление метода main для запуска приложения. Это позволит избежать любых потенциальных проблем, подобных этому, и не вызывает никаких проблем в случае, когда это не требуется.

Ваш главный метод должен выглядеть следующим образом:

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

Это будет просто передать управление на JavaFX, чтобы справиться, как это было бы нормально.

Смежные вопросы