JavaFX和scenebuilder(添加Eventhandler引起的异常)

时间:2018-04-12 13:48:37

标签: java javafx fxml scenebuilder

我们是JavaFX和Scene Builder的新手,并且遇到以下问题。

如果我们在FXML文档中定义我们的控制器(使用Scene Builder创建),我们会在下面发布异常。

在这里,您可以看到我们的Application,Controller和FXML文档类的代码。

申请类:

public class Projekt5 extends Application {

    public static Connection c= null;

    private static final String driverClass = "com.mysql.jdbc.Driver";
    private static final String connectionDescriptor = "jdbc:mysql://i-med-ts:3306/md_projekt";
    private static String user= "root";
    private static String password= "root";

    public void start(Stage stage) throws Exception {

        try{
            c = DriverManager.getConnection(connectionDescriptor, user,password);
            System.out.println("Connection");
        }

        catch (SQLException e) {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Information");
            alert.setHeaderText(null);
            alert.setContentText("A database error occured.");
            alert.showAndWait();
        }

        FXMLLoader loader= new FXMLLoader(getClass().getResource("/projekt5/FXMLDocument.fxml"));
        loader.setController(new FXMLDocumentController(c));
        AnchorPane root = loader.load();

        FXMLDocumentController control = new FXMLDocumentController(c);

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

控制器类

public class FXMLDocumentController implements Initializable {

    Connection c=null;
    private static PreparedStatement getUser = null;
    private static ResultSet rs = null;
    private TextField textName;
    private TextField textPassword;
    private Label nameLabel;
    private Label label;
    private Button button;

    public FXMLDocumentController (Connection con) {
        c = con;
    }

    public void loginApplication(ActionEvent event) {
        String Name = textName.getText();
        String Password = textPassword.getText();
        String queryCheck = "SELECT * "+ "FROM user_tab " + " WHERE user_id = ? "+ " and pw = ?";

        try {
            getUser  = c.prepareStatement(queryCheck);
            getUser.setString (1, Name);
            getUser.setString (2, Password);
            rs  = getUser.executeQuery();

            while (rs.next())
            {
                String name = rs.getString("user_id");
                String pw = rs.getString("pw");
            }
        } catch (SQLException e1) {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Information");
            alert.setHeaderText(null);
            alert.setContentText("A database error occured.");
            alert.showAndWait();
        }
    }

    public void handle(ActionEvent event) {
        throw new UnsupportedOperationException("Not supported yet.");      //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

FXML(使用场景构建器创建):

 <AnchorPane id="AnchorPane" prefHeight="600.0" prefWidth="900.0" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt5.FXMLDocumentController">
    <children>
      <VBox layoutX="228.0" layoutY="100.0" prefHeight="208.0" prefWidth="425.0">
         <children>
            <GridPane>
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                  <RowConstraints maxHeight="24.0" minHeight="10.0" prefHeight="14.0" vgrow="SOMETIMES" />
                  <RowConstraints maxHeight="46.0" minHeight="10.0" prefHeight="46.0" vgrow="SOMETIMES" />
                  <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <Label fx:id="nameLabel" prefHeight="30.0" prefWidth="61.0" text="Name" textOverrun="CLIP" GridPane.rowIndex="2">
                     <opaqueInsets>
                        <Insets />
                     </opaqueInsets>
                  </Label>
                    <Label fx:id="label" minHeight="16" minWidth="69" text="Password" GridPane.rowIndex="4" />
                  <TextField fx:id="textName" GridPane.columnIndex="1" GridPane.rowIndex="2" />
                  <TextField fx:id="textPassword" GridPane.columnIndex="1" GridPane.rowIndex="4" />
               </children>
            </GridPane>
         </children>
      </VBox>
        <Button fx:id="button" contentDisplay="CENTER" layoutX="381.0" layoutY="352.0" onAction="#loginApplication" prefHeight="51.0" prefWidth="126.0" text="Log in " textAlignment="CENTER">
         <effect>
            <Blend />
         </effect>
         <contextMenu>
            <ContextMenu>
              <items>
                <MenuItem mnemonicParsing="false" text="Unspecified Action" />
              </items>
            </ContextMenu>
         </contextMenu>
      </Button>
    </children>
   <effect>
      <Blend />
   </effect>
</AnchorPane>

引发此异常:

 java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    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(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
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$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: Controller value already specified.
file:/home/aadalen/NetBeansProjects/projekt5/dist/run550935368/projekt5.jar!/projekt5/FXMLDocument.fxml:16

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2597)
    at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:103)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:914)
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971)
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
    at projekt5.Projekt5.start(Projekt5.java:49)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)
    ... 1 more
Exception running application projekt5.Projekt5
Java Result: 1

0 个答案:

没有答案