当前位置: 首页 > 知识库问答 >
问题:

Failure@Application Start方法(JavaFX 11、JDK 14&Intellij)

范宏大
2023-03-14

我将尽量保持简短,但尽可能包含更多的细节,基本上,我试图使用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

去做一些修补模块文件夹,看看我是否可以修复这个。

共有1个答案

彭宏深
2023-03-14

所以在这方面工作了几个小时之后,我对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似乎很有效,但是当我将这样一个