我正在尝试使用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
我真的很感谢能帮助我的建议!
谢谢。