我将尽量保持简短,但尽可能包含更多的细节,基本上,我试图使用Javafx创建一个简单的MPG计算器,但我遇到了一个障碍,每当我试图运行主文件时,就会出现一些关于FXMLLoader的错误,但我无法弄清楚原因,我尽可能多地研究了Q&a(有很多),我尝试实现给出的答案,但没有一个奏效。
我很确定这就是我痛苦的原因。
父根=fxmlloader.load(getClass().getResource(“/sample/sample.fxml”));
对于javafx,我是一个新手,所以我非常感谢任何帮助,如果需要更多的信息,我会提供。
文件结构
文件结构
主
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("/sample/sample.fxml"));
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<GridPane alignment="center" hgap="10" prefHeight="267.0" prefWidth="251.0" vgap="10" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="sample.Controller">
<columnConstraints>
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
</rowConstraints>
<children>
<AnchorPane prefHeight="279.0" prefWidth="251.0">
<children>
<Label layoutX="12.0" layoutY="14.0" prefHeight="35.0" prefWidth="233.0" text="Miles Per Gallon Calculator" textAlignment="CENTER" underline="true">
<font>
<Font size="19.0" />
</font>
</Label>
<Label layoutX="16.0" layoutY="69.0" prefHeight="27.0" prefWidth="50.0" text="Miles">
<font>
<Font size="18.0" />
</font>
</Label>
<Label layoutX="16.0" layoutY="113.0" prefHeight="27.0" prefWidth="68.0" text="Gallons">
<font>
<Font size="18.0" />
</font>
</Label>
<Button layoutX="27.0" layoutY="151.0" mnemonicParsing="false" onAction="#calculateMPG" prefHeight="42.0" prefWidth="206.0" text="Calculate MPG" />
<TextField fx:id="milesField" layoutX="84.0" layoutY="70.0" />
<TextField fx:id="gallonsField" layoutX="84.0" layoutY="114.0" />
<Label layoutX="16.0" layoutY="204.0" prefHeight="27.0" prefWidth="68.0" text="MPG">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="mpgField" layoutX="84.0" layoutY="205.0" />
</children>
</AnchorPane>
</children>
</GridPane>
控制器
package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import java.text.DecimalFormat;
public class Controller {
DecimalFormat df = new DecimalFormat("#.###"); double mpg;
@FXML
private TextField milesField;
@FXML
private TextField gallonsField;
@FXML
private TextField mpgField;
@FXML
void calculateMPG(ActionEvent event) {
try {
double miles = Double.parseDouble(milesField.getText());
double gallons = Double.parseDouble(gallonsField.getText());
if(gallons == 0){
mpgField.setText("Cannot Divide by zero");
}
else {
mpg = miles / gallons;
mpgField.setText(df.format(mpg));
}
} catch (NumberFormatException e){
mpgField.setText("Please enter real numbers.");
}
}
}
错误
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.NoSuchMethodError: 'java.lang.Object sun.reflect.misc.ReflectUtil.newInstance(java.lang.Class)'
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927)
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.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 sample.Main.start(Main.java:13)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Exception running application sample.Main
Process finished with exit code 1
作为一个简短的补充说明,我在设置IntelliJ时遇到了一些问题,由于某种原因,当我为非JavaFX编程导入JDK14时,它没有导入任何Jar文件,所以我不得不手动导入那些模块,JavaFX模块也是一样,这里是这些模块的图像,如果有什么不正确的地方,请告诉我。
JDK1
JDK2
JDK3
编辑:刚刚完成了IntelliJ、JAvaFX、&JDK14的干净安装,但当我尝试运行基本的JAvaFX“Hello World”时,仍然遇到了同样的问题。虽然给出的错误更多的是描述性的,我将在这里发布新的错误。
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x6af6aa0c) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x6af6aa0c
at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38)
at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056)
at sample.Main.start(Main.java:13)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Exception running application sample.Main
Process finished with exit code 1
编辑2:最后清理了错误,在添加这一行(见下文)到VM选项后,出现了一个问题。(是的,我把我的道路)
-p/%EnterPathToJavaFX%/lib--添加-modules javafx.controls
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.base not found
去做一些修补模块文件夹,看看我是否可以修复这个。
所以在这方面工作了几个小时之后,我对VM选项有了一个处理(这是我刚开始的时候不知道的),但是我很确定这个问题是由正斜杠和反斜杠的使用引起的,在我读到的很多答案中,他们使用了正斜杠而不是反斜杠,直到大约10分钟前我才意识到这一点,这有点尴尬,但是,吸取了教训。
不管怎么说,如果你仍然有这个问题,我会给出一个应该怎么做的基本概要(尽管有很多好的答案,但记住使用反斜杠,不要像我一样是个哑巴)。
重要提示:此实现是针对Windows系统的
第一:确保下载了JDK和JavaFX,尽量保持文件夹名称简单(如JDK14或JavaFX14)。
第二:打开一个新的项目并选择您的“项目SDK”,在我们的例子中选择您下载的JDK。
第三步:创建项目后,转到File->project Structure,然后在“project settings”下选择Libraries,然后单击project settings右侧的加号图标,选择Java,然后导航到JavaFX文件夹并选择“lib”。
第四:如果您现在运行项目,您将得到一个运行时错误,而不是转到运行(在顶部),然后选择“编辑配置”。在“VM Options:”文本字段中输入:
-p *Your_Drive_Partition*:\*path_to_JFX*\JavaFX\lib --add-modules=javafx.controls,javafx.fxml
现在就到这里,欢迎使用JavaFX。
正斜杠是URI的,反斜杠是本地(windows)文件,不要忘记这一点,否则就会陷入和我一样的境地,一遍又一遍地做同样的事情,期待不同的结果。
祝你有愉快的一天。
我使用JDK14,但是当我安装EAP2020.2 Build#IU-202.5428.22时,我不能导入gradle项目,我得到以下错误 构建时间:2020-06-02 20:46:21 UTC修订:a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4 Kotlin:1.3.72 Groovy:2.5.11 Ant:Apache Ant(TM)版本1.10.7编译于20
Kubernetes Failure Stories The source code repository for https://k8s.af moved to https://codeberg.org/hjacobs/kubernetes-failure-stories
本文向大家介绍MySQL5.1主从同步出现Relay log read failure错误解决方法,包括了MySQL5.1主从同步出现Relay log read failure错误解决方法的使用技巧和注意事项,需要的朋友参考一下 众所周知MySQL5.1的Replication是比较烂的。MySQL的每一个版本更新关于同步方面每次都是可以看到一大堆。但MySQL 5.1性能是比较突出的。所以经不
我试图在NetBeans 9上运行JavaFX 11,因为JDK 11不再有JavaFX了,我无法让NetBeans运行JavaFX项目,它说: 然后我从这个网站下载了javafx11https://gluonhq.com/products/javafx/,在完成教程之后,我能够正常地通过终端编译和运行JavaFX类。添加JavaFX的唯一方法是使用Maven,但即使成功构建了应用程序,我也无法运
我不确定不将JDK 8与包含的JavaFX一起使用是否有意义,但无论如何,在Eclipse中如何在这种情况下使用JavaFX?
我习惯于使用Maven分发项目,通常,团队中的每个人(以及CI服务器)都可以依赖Maven进行打包、测试、运行等调试,但是,项目可以导入到Eclipse并通过主类启动(与Eclipse的Maven插件相反)。Spring-Boot就是一个很好的例子。导入这样的项目后,我可以只运行或调试主类。 然而,对于JavaFX11来说,编写一个配置所有必要依赖关系的pom.xml似乎很有效,但是当我将这样一个