- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 JavaFx 还很陌生。我正在尝试按照教程构建一个简单的计算器。我是按照教程一步一步来的。当我运行该项目时,它显示 javafx fxml LoadException。我看了一些与此相关的解决方案,但仍然无法修复它。请帮我解决这个错误。(抱歉,帖子很长)
我的程序文件如下
MainController.java
package application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
public class MainController {
@FXML
private Label result; // label variable shows output above the buttons, check this
private long number1 = 0;
private String operator = "";
private boolean start = true;
private Model model = new Model();
@FXML
public void processNumbers(ActionEvent event) {
if (start) {
result.setText(""); // set the label(output) screen as blank first
start = false;
}
String value = ((Button) event.getSource()).getText(); // take number 1-9 and convert it into String, import the
// button class otherwise will shows error
result.setText(result.getText() + value);
}
@FXML
public void processOperators(ActionEvent event) {
String value = ((Button) event.getSource()).getText();`enter code here`
if (!value.equals("=")) {
if (!operator.isEmpty()) {
return;
}
operator = value;
number1 = Long.parseLong(result.getText());
result.setText("");
} else {
if (operator.isEmpty())
return;
long number2 = Long.parseLong(result.getText());
float output = model.calculate(number2, number2, operator);
result.setText(String.valueOf(output));
start = true;
}
}
}
模型.java
package application;
public class Model { //for some action event
public float 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;
default:
return 0;
}//switch case
}
}
Main.java
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.*;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = (Parent) FXMLLoader.load(getClass().getResource("/application/CalculatorFxmlFile.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
CalculatorFxmlFile
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="300.0" prefWidth="300.0" spacing="10.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController">
<children>
<StackPane prefHeight="50.0" prefWidth="200.0">
<children>
<Label fx:id="result" prefHeight="17.0" prefWidth="327.0" text="Label">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
</children></StackPane>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="7">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="8">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="9">
<font>
<Font size="18.0" />
</font>
</Button>
<Button fx:id="result" mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="/">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="4">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="5">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="6">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="*">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="1">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="2">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="3">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="-">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
<children>
<Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="110.0" text="0">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="=">
<font>
<Font size="18.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="+">
<font>
<Font size="18.0" />
</font>
</Button>
</children>
</HBox>
</children>
</VBox>
生成异常
javafx.fxml.LoadException:
/C:/AllPrograms/Java/eclipse1/CalculatorJavaFx/bin/application/CalculatorFxmlFile.fxml:37
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at application.Main.start(Main.java:15)
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.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Can not set javafx.scene.control.Label field application.MainController.result to javafx.scene.control.Button
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1163)
at javafx.fxml.FXMLLoader.access$1600(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$ValueElement.processValue(FXMLLoader.java:857)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:751)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
... 17 more
最佳答案
这是您的错误(在您的 fxml 文件中):
<Button fx:id="result" mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="/">
<font>
<Font size="18.0" />
</font>
</Button>
此按钮id
是“结果”,也是标签的id。您应该删除此 id
属性(我认为您放错了它)或将其更改为教程建议的属性。
更新
此操作是除法,但您要添加数字 number1
和 number2
case "/":
if(number2==0) return 0;
return number1+number2;
所以你应该执行除法而不是加法
case "/":
if(number2==0) return 0;
return number1/number2;
更新2
我发现的另一个错误也在这里:
float output = model.calculate(number2, number2, operator);
您错过了 calculate
方法中的 number1
变量:
float output = model.calculate(number1, number2, operator);
关于javafx fxml LoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265719/
我对 JavaFx 还很陌生。我正在尝试按照教程构建一个简单的计算器。我是按照教程一步一步来的。当我运行该项目时,它显示 javafx fxml LoadException。我看了一些与此相关的解决方
我正在使用 javaFXML。我试图通过单击登录按钮打开一个选项窗口,但我收到 javafx.fxml.LoadException。我正在提供完整的代码,请帮助我。 FXMLDocument.fxml
这个问题已经有答案了: javafx 8 compatibility issues - FXML static fields or methods (1 个回答) 已关闭 6 年前。 我是 JavaF
我正在尝试借助这个 Tutorial 实现一个包含一些数据的 TableView . 我坚持将数据从“Person.java”填充到 TableView。 我将问题追溯到 部分在最底部的“fxmlt
我尝试制作多用户登录表单,但是,我在将值从一个 Controller 传递到另一个 Controller 时遇到问题,而且我真的不知道发生了什么。 第一个 Controller public clas
我正在查看LoginDemo 的javafx 示例代码。我使用了多场景应用的代码;我得到一个 javafx.fxml.LoadException。我不知道该怎么办。 我的代码是打开一个窗口并有一个按钮
showAdminLoginScene() 方法产生错误,但是,如果我修改此方法并从同一个包中加载另一个 fxml 文件,它会加载得很好:这是我的 Main : package application
每当我尝试运行此代码时都会获取 LoadExeption。 代码第一次运行良好,但之后我就不断收到此错误。它只是一个简单的登录页面,没有太多编码。 主要类如下 打包申请; import jav
无法弄清楚可能的问题是什么??!!应用程序构建成功并且运行成功,但是当我尝试在 JavaFX Scene Builder 中加载 fxml 文件时,它没有打开并出现以下错误: com.oracle.j
我创建了playerMp3。我正在尝试在 ScenBuilder 中创建一个 GUI 并将其导入到我的代码中。我使用 FXMLLoader 来实现此目的,但编译时出现错误。在模块信息中,我已表明我使用
我在使用 FXML 文件(手动编写,不是在 SceneBuilder 中生成)构建 JavaFX 项目时遇到问题。下面是 FXML 文件。这是按照 http://docs.oracle.com/jav
这段代码有效,但现在我遇到了麻烦。我认为这就是问题所在,但我不知道: Caused by: javafx.fxml.LoadException: /C:/Users/alex/workspac
我对javafx真的很陌生,并试图弄清楚什么是什么。一切顺利,但后来我遇到了异常。这是我的代码; public void showPersonOverview() { try {
我正在尝试创建一个非常简单的带有黑色背景的VBox。就这样。没有其他的。我使用 FXML 来描述我的 VBox。 样本.fxml: Controller .java: package sa
当从 IntelliJ 本地运行时,我的 JavaFX 应用程序启动正常,但是当它被编译成 jar 并可供客户端中的用户访问时,我收到以下异常。知道为什么会这样吗? (07:56:06) javafx
我是 JavaFX 的新手,我正在从事一个简单的计算器项目。 我真的很困惑我的代码出了什么问题。 我猜 MainController.java 或 main.fxml 中有错误。 当我运行 gradl
我使用的是 Java JDK 13 和 FontAwesomeFX 11。 我有一个 FXML 文件,其中包含一些 FontAwesomeIconViews,但是当将该文件加载到我的 Controll
我正在使用 Java 8 LocalDateTime 类将日期保留在数据存储中。日期采用这种格式 2017-07-24T01:00:00.000 作为 EmbeddedEntity 进行持久化。 pr
应用程序工作正常,直到我将 fx:controller 属性放入嵌套的 fxml 文件中。 主类: @SpringBootApplication public class MyApplication
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 4 年前。 我正在为我的学校项目制作数独,需
我是一名优秀的程序员,十分优秀!