在main中加载fxml文件

时间:2015-11-12 23:23:16

标签: java javafx fxml scenebuilder

我从youtube做了这个教程,我有与教程相同的代码,但我用Scenebuilder做了我正确的fxml。     以下是代码:https://github.com/AlmasB/FXTutorials/tree/master/src/com/almasb/calc      我有相同的主,相同的控制器和相同的型号..     当我尝试编译时,它对我说:

`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(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
    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(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$$Lambda$48/1394438858.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at application.Main.start(Main.java:12)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$$Lambda$51/1252716230.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda$45/1775282465.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/21202996.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda$46/2040495657.run(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$$Lambda$37/1558600329.run(Unknown Source)
    ... 1 more
Exception running application application.Main

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Parent;

这是我的主要内容:

    package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
       try {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("view/Calculatorview.fxml"));
  //    Parent root = FXMLLoader.load(getClass().getResource("view/Calculatorview.fxml"));
        AnchorPane root = (AnchorPane) loader.load();
        Scene scene = new Scene(root);

        primaryStage.setScene(scene);
        primaryStage.show();
    } 
       catch(Exception e)    {
        e.printStackTrace();
    }
    }
    public static void main(String[] args) {
      launch(args);
    }
}

这是我的fxml文件:

   <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.embed.swing.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="640.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <children>
      <AnchorPane prefHeight="600.0" prefWidth="700.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <SplitPane dividerPositions="0.19063545150501673" layoutX="149.0" layoutY="32.0" orientation="VERTICAL" prefHeight="600.0" prefWidth="500.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
              <items>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                     <children>
                        <TextField alignment="CENTER_RIGHT" prefHeight="73.0" prefWidth="638.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                           <font>
                              <Font size="47.0" />
                           </font>
                        </TextField>
                     </children>
                  </AnchorPane>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="515.0" prefWidth="498.0">
                     <children>
                        <GridPane layoutX="90.0" layoutY="116.0" prefHeight="319.0" prefWidth="638.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                          <columnConstraints>
                              <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                              <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                              <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                              <ColumnConstraints hgrow="SOMETIMES" maxWidth="116.0" minWidth="10.0" prefWidth="95.0" />
                              <ColumnConstraints hgrow="SOMETIMES" maxWidth="116.0" minWidth="10.0" prefWidth="95.0" />
                              <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 minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                          </rowConstraints>
                           <effect>
                              <Blend />
                           </effect>
                           <children>
                              <Button mnemonicParsing="false" onAction="#processOperator" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #EE543A; -fx-text-fill: #FFFFFF;" text="=" GridPane.columnIndex="7" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="620.0" layoutY="395.0" mnemonicParsing="false" onAction="#processOperator" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #EE543A; -fx-text-fill: #FFFFFF;" text="+" GridPane.columnIndex="7" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="620.0" layoutY="299.0" mnemonicParsing="false" onAction="#processOperator" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #EE543A; -fx-text-fill: #FFFFFF;" text="-" GridPane.columnIndex="7" GridPane.rowIndex="2">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="620.0" layoutY="203.0" mnemonicParsing="false" onAction="#processOperator" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #EE543A; -fx-text-fill: #FFFFFF;" text="×" GridPane.columnIndex="7" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="620.0" layoutY="107.0" mnemonicParsing="false" onAction="#processOperator" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #EE543A; -fx-text-fill: #FFFFFF;" text="÷" GridPane.columnIndex="7">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="532.0" layoutY="395.0" mnemonicParsing="false" prefHeight="70.0" prefWidth="76.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="C" GridPane.columnIndex="4" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="358.0" layoutY="395.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="0" GridPane.columnIndex="5" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="362.0" layoutY="395.0" mnemonicParsing="false" prefHeight="69.0" prefWidth="88.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="M-" GridPane.columnIndex="4">
                                 <font>
                                    <Font size="28.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="e" GridPane.columnIndex="1" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="1/x" GridPane.columnIndex="3" GridPane.rowIndex="4">
                                 <font>
                                    <Font name="System" size="28.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="√" GridPane.columnIndex="3" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="MC" GridPane.columnIndex="3" GridPane.rowIndex="2">
                                 <font>
                                    <Font name="System" size="28.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="M+" GridPane.columnIndex="3" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="27.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="x²" GridPane.columnIndex="2" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="tan" GridPane.columnIndex="2" GridPane.rowIndex="2">
                                 <font>
                                    <Font name="System" size="28.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="sin" GridPane.columnIndex="2" GridPane.rowIndex="1">
                                 <font>
                                    <Font name="System" size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="xʸ" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="log" GridPane.rowIndex="2">
                                 <font>
                                    <Font name="System" size="28.0" />
                                 </font>
                              </Button>
                              <Button graphicTextGap="0.0" layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="cos" GridPane.columnIndex="2">
                                 <font>
                                    <Font name="System" size="26.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text=")">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button alignment="CENTER" layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="x³" GridPane.columnIndex="2" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="98.0" layoutY="11.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="(" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="64.0" prefWidth="95.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="3" GridPane.columnIndex="6" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="2" GridPane.columnIndex="5" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="64.0" prefWidth="96.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="6" GridPane.columnIndex="6" GridPane.rowIndex="2">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="64.0" prefWidth="98.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="9" GridPane.columnIndex="6" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="8" GridPane.columnIndex="5" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" prefHeight="64.0" prefWidth="96.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="±" GridPane.columnIndex="5">
                                 <font>
                                    <Font size="29.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="58.0" prefWidth="76.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="1" GridPane.columnIndex="4" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="4" GridPane.columnIndex="4" GridPane.rowIndex="2">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="5" GridPane.columnIndex="5" GridPane.rowIndex="2">
                                 <font>
                                    <Font size="35.0" />
                                 </font>
                              </Button>
                              <Button layoutX="10.0" layoutY="11.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="7" GridPane.columnIndex="4" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="619.0" layoutY="395.0" mnemonicParsing="false" prefHeight="100.0" prefWidth="81.0" style="-fx-background-color: #EE543A; -fx-text-fill: #FFFFFF;" text="\%" GridPane.columnIndex="6">
                                 <font>
                                    <Font size="29.0" />
                                 </font>
                              </Button>
                              <Button mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="π" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="462.0" layoutY="202.0" mnemonicParsing="false" onAction="#processNumpad" prefHeight="64.0" prefWidth="95.0" style="-fx-background-color: #9E9D9B; -fx-text-fill: #FFFFFF;" text="." GridPane.columnIndex="6" GridPane.rowIndex="4">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button graphicTextGap="0.0" layoutX="172.0" layoutY="10.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="cosh" GridPane.columnIndex="1">
                                 <font>
                                    <Font name="System" size="22.0" />
                                 </font>
                              </Button>
                              <Button layoutX="172.0" layoutY="74.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="sinh" GridPane.columnIndex="1" GridPane.rowIndex="1">
                                 <font>
                                    <Font size="25.0" />
                                 </font>
                              </Button>
                              <Button layoutX="172.0" layoutY="138.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="tanh" GridPane.columnIndex="1" GridPane.rowIndex="2">
                                 <font>
                                    <Font name="System" size="24.0" />
                                 </font>
                              </Button>
                              <Button layoutX="91.0" layoutY="266.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="10ʸ" GridPane.columnIndex="1" GridPane.rowIndex="3">
                                 <font>
                                    <Font size="30.0" />
                                 </font>
                              </Button>
                              <Button layoutX="253.0" layoutY="74.0" mnemonicParsing="false" prefHeight="96.0" prefWidth="92.0" style="-fx-background-color: #60646D; -fx-text-fill: #FFFFFF;" text="MR" GridPane.columnIndex="3">
                                 <font>
                                    <Font size="28.0" />
                                 </font>
                              </Button>
                           </children>
                        </GridPane>
                     </children>
                  </AnchorPane>
              </items>
            </SplitPane>
         </children>
      </AnchorPane>
   </children>
</fx:root>

新主要: structure

2 个答案:

答案 0 :(得分:2)

好的。我尝试使用Java 1.8设置我的环境,并从提供的链接中尝试了教程。这就是我做的。

  1. 安装了Elcipse Kepler(Java EE)
  2. 此处有关e(fx)clipse https://www.eclipse.org/efxclipse/install.html
  3. 的说明
  4. 安装了所有的libs / jars,如下所示
  5. enter image description here

    在上面之后,我在eclipse中创建了一个新的Java项目。我右键单击了该项目并创建了两个源文件夹

    src/main/java 
    src/main/resources 
    

    然后我右键单击src / main / java并创建新包并将其命名为 application 。在应用程序下,我创建了4个java类,并从教程链接中复制了内容。我确实在每个java文件的顶部修改了包,仅反映应用程序

    以下是java类

    package application;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    public class App extends Application {
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            Parent root = FXMLLoader.load(getClass().getResource("/ui.fxml"));
    
            primaryStage.setScene(new Scene(root));
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    控制器

     package application;
    
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.scene.control.Button;
    import javafx.scene.text.Text;
    
    public class Controller {
    
        @FXML
        private Text output;
    
        private long number1 = 0;
        private String operator = "";
        private boolean start = true;
    
        private Model model = new Model();
    
        @FXML
        private void processNumpad(ActionEvent event) {
            if (start) {
                output.setText("");
                start = false;
            }
    
            String value = ((Button)event.getSource()).getText();
            output.setText(output.getText() + value);
        }
    
        @FXML
        private void processOperator(ActionEvent event) {
            String value = ((Button)event.getSource()).getText();
    
            if (!"=".equals(value)) {
                if (!operator.isEmpty())
                    return;
    
                operator = value;
                number1 = Long.parseLong(output.getText());
                output.setText("");
            }
            else {
                if (operator.isEmpty())
                    return;
    
                output.setText(String.valueOf(model.calculate(number1, Long.parseLong(output.getText()), operator)));
                operator = "";
                start = true;
            }
        }
    }
    

    模型

    package application;
    
    public class Model {
    
        public long calculate(long number1, long number2, String operator) {
            switch (operator) {
                case "+":
                    return number1 + number2;
                case "-":
                    return number1 - number2;
                case "*":
                    return number1 * number2;
                case "/":
                    if (number2 == 0)
                        return 0;
    
                    return number1 / number2;
            }
    
            System.out.println("Unknown operator - " + operator);
            return 0;
        }
    }
    

    和ui.fxml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import java.net.*?>
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.beans.property.*?>
    <?import javafx.geometry.*?>
    <?import javafx.scene.shape.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.image.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.text.*?>
    <?import javafx.scene.paint.Color?>
    
    <VBox spacing="10" alignment="CENTER" prefWidth="300" prefHeight="300" fx:controller="application.Controller" xmlns:fx="http://javafx.com/fxml">
        <fx:define>
            <Font fx:id="FONT" size="18" />
        </fx:define>
    
        <StackPane alignment="CENTER">
            <Rectangle fill="TRANSPARENT" stroke="GRAY" width="230" height="50" />
            <Text fx:id="output" font="$FONT" />
        </StackPane>
    
        <HBox spacing="10" alignment="CENTER">
            <Button text="7" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="8" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="9" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="/" prefWidth="50" font="$FONT" onAction="#processOperator" />
        </HBox>
    
        <HBox spacing="10" alignment="CENTER">
            <Button text="4" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="5" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="6" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="*" prefWidth="50" font="$FONT" onAction="#processOperator" />
        </HBox>
    
        <HBox spacing="10" alignment="CENTER">
            <Button text="1" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="2" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="3" prefWidth="50" font="$FONT" onAction="#processNumpad" />
            <Button text="-" prefWidth="50" font="$FONT" onAction="#processOperator" />
        </HBox>
    
        <HBox spacing="10" alignment="CENTER">
            <Button text="0" prefWidth="110" font="$FONT" onAction="#processNumpad" />
            <Button text="=" prefWidth="50" font="$FONT" onAction="#processOperator" />
            <Button text="+" prefWidth="50" font="$FONT" onAction="#processOperator" />
        </HBox>
    
    </VBox>
    

    我遇到了Java源库(引用JRE)和jfxrt.jar文件的问题。所以我做了以下

    1. 删除了引用的库
    2. 删除了引用的外部jar
    3. 右键单击该项目,然后选择属性
    4. 选择 Java构建路径
    5. 点击窗口右侧的添加资料库,添加 JRE系统资料库,如下所示
    6. 添加了外部jar jfxrt.jar
    7. enter image description here

      添加上述内容后,代码已解决且没有任何问题。

      请记住,我将 ui.fxml 放在 src / main / resources 文件夹下。因此,当我最初将项目作为 Java应用程序运行时,它会抱怨并给出与您面临的相同的异常。所以我改变了&#34; ui.fxml&#34;到&#34; /ui.fxml"和繁荣,我看到了计算器。

      Parent root = FXMLLoader.load(getClass().getResource("/ui.fxml"));
      

      请参见下面的截图,我希望这些步骤有所帮助。

      enter image description here

答案 1 :(得分:1)

NullPointerException: Location is required
从您呼叫的行FXMLLoader.load(...)

表示您为FXML文件提供的URL为null:即资源的路径不正确。

getClass().getResource()将在类路径上搜索相对于当前类的资源。根据您关联的屏幕截图,Main位于包appication中,Calculatorview.fxml位于application.view。所以你需要

Parent root = FXMLLoader.load(getClass().getResource("view/Calculatorview.fxml"));

或者,您可以指定相对于类路径的fxml文件(而不是相对于当前类):

Parent root = FXMLLoader.load(getClass().getResource("/application/view/Calculatorview.fxml"));

(请注意与您的代码相比的额外前导/。)

当然,请注意,此路径是在运行时搜索的,因此您需要确保在编译代码时将fxml文件与文件一起部署。换句话说,如果MainCalculatorview.fxml位于包application中,那么您应该在某处拥有一个名为application的文件夹,其中包含Main.class(注意,类文件)和Calculatorview.fxml。这通常位于名为binclasses的文件夹中,具体取决于您的IDE及其设置(或者您将在jar文件中使用application结构,如果您正在构建罩)。