为什么在应用程序启动方法错误中出现异常?

时间:2020-09-21 08:56:51

标签: java javafx javafx-11

我正在尝试使用Eclipse上的Javafx制作通讯录。我的问题是,仅在编译时,我才会在Application start方法中不断收到错误Exception。写作时似乎没有问题。

代码本身来自一本编码教程书,我已经逐字复制了文本,但仍然出现此错误。 我正在使用JavaSE-1.8和JavaFX 11。

我已经尝试过进行其他更简单的Javafx项目,并且效果很好。 我已经研究过,大多数解决方案都建议对fxml文件进行操作,但是在我的程序中,我什至没有使用SceneBuilder或FXML文件?

这是我的主班:

package application;
   
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.geometry.Insets;
import javafx.geometry.Pos;


public class Main extends Application {
   
   public void start(Stage primaryStage) {
       
       primaryStage.setTitle("Adress book");
       
       GridPane grid = new GridPane();
       grid.setAlignment(Pos.CENTER);
       grid.setPadding(new Insets(10,10,10,10));
       grid.setVgap(10);
       grid.setHgap(10);
       
       Text titel = new Text("Address book");
       titel.setFont(Font.font("Arial",FontWeight.BOLD, 20));
       grid.add(titel, 0, 0, 2, 1);
       
       Button bt1 = new Button("add address");
       grid.add(bt1, 0, 1);
       
       Button bt2 = new Button("show address");
       grid.add(bt2, 0, 2);
       
       Button bt3 = new Button("delete address");  
       grid.add(bt2, 0, 3);
       
       bt1.setOnAction(new EventHandler<ActionEvent>() {

           @Override
           public void handle(ActionEvent e) {
               FensterBt1.newWindow(primaryStage);
               
           }
       });
       
       bt2.setOnAction(new EventHandler<ActionEvent>() {

           @Override
           public void handle(ActionEvent e) {
//              FensterBt2.newWindow(primaryStage);
//              I have not made this class yet
           }
       });
       
       bt3.setOnAction(new EventHandler<ActionEvent>() {

           @Override
           public void handle(ActionEvent e) {
//              FensterBt3.newWindow(primaryStage);
//              I have not made this class yet
               
           }
       });

       Scene scene = new Scene(grid, 400,300);
       primaryStage.setScene(scene);
       
       primaryStage.show(); 
   }
   public static void main(String[] args) {
       launch(args);
   }
}

这是我的另一堂课

package application;

import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class FensterBt1 {

    public static void newWindow(Stage mainWindow) {

        mainWindow.setTitle("Add address");
        
        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10,10,10,10));
        grid.setVgap(10);
        grid.setHgap(10);
        
        Text titel = new Text("Please add an address");
        titel.setFont(Font.font("Arial",FontWeight.BOLD, 20));
        grid.add(titel, 1, 0);
        
        Label first = new Label("First name");
        grid.add(first, 0, 1);
        TextField inputFirst = new TextField();
        grid.add(inputFirst, 1, 1);
        
        Label last = new Label("Last name");
        grid.add(last, 0, 2);
        TextField inputLast = new TextField();
        grid.add(inputLast, 1, 2);
        
        Label phone = new Label("Phone number");
        grid.add(phone, 0, 3);
        TextField inputPhone = new TextField();
        grid.add(inputPhone, 1, 3);
        
        Label email = new Label("E-mail");
        grid.add(email, 0, 4);
        TextField inputEmail = new TextField();
        grid.add(inputEmail, 1, 4);
        
        Button save = new Button("Save data");
        grid.add(save, 0, 5);
        
        
        Scene scene = new Scene(grid, 500,500);
        mainWindow.setScene(scene);
        mainWindow.show(); 
    }
}

我的错误

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Children: duplicate children added: parent = Grid hgap=10.0, vgap=10.0, alignment=CENTER
    at javafx.scene.Parent$2.onProposedChange(Parent.java:454)
    at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDecorator.java:206)
    at javafx.scene.layout.GridPane.add(GridPane.java:965)
    at application.Main.start(Main.java:40)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    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.lambda$null$4(WinApplication.java:186)
    ... 1 more
Exception running application application.Main

我真的很感谢能帮助我的建议!

谢谢。

0 个答案:

没有答案