迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

修复 JavaFx 应用程序启动方法中的异常

作者:迹忆客 最近更新:2023/11/13 浏览次数:

JavaFX 是一个高度丰富的库,其代码是用本地 Java 代码编写的。该库习惯于制作富 Internet 应用程序,通常称为 RIA。

该库是一组易于理解的接口和类,是 Java 虚拟机或 JVM 的友好替代品。使用该库编写的代码可以跨多个平台运行,如台式机、手机、电视等。

很久以前,图形用户界面是使用 Swing 模板构建的,但在 JavaFX 出现之后,人们可以轻松地依靠该语言来处理相同的问题。使用 JavaFx 构建的应用程序的渗透率为 76%。

应用程序启动方法中的异常是在应用程序运行和编译完成时发生的运行时错误。当应用程序在加载运行时变量或文件时效率低下时,就会出现该状态。处理不当会抛出 NullPointerException、FileNotFound 类型的异常。

此外,SonarLint、编程错误检测器 (PMD) 等插件可以帮助在没有实际程序运行的情况下提前识别运行时问题。

下面是一个示例,显示 JavaFx 中的应用程序启动方法中的异常错误。

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

public class ApplicationStart extends Application {
  public static void main(String[] args) {
    launch(args);
  }

  @Override
  public void start(Stage stage) throws Exception {
    Parent parent = FXMLLoader.load(getClass().getResource("AnyXML.fxml"));
    Scene scene = new Scene(parent);
    stage.setScene(scene);
    stage.setTitle("First Swing Sample");
    stage.show();
  }
}

上面似乎在 JavaFx 中的源代码在 ApplicationStart 类中有一个 main 方法。给定的类扩展了一个抽象的 Application 类,并且在 JavaFX 库中特别可用。

它有一个名为 Caspein 的默认主题,一旦你启动应用程序就会启动。launchApplication 类中存在的静态方法,并从 main 函数调用。它以可变参数或 varargs 作为其参数。如果多次调用启动方法,它会抛出 IllegalStateException

Application 类有一个抽象方法,其实现必须存在于 ApplicationStart 类中。override 注释表明该注释下面的代码属于父 Application 类。由注释覆盖进行的方法的实现存在于注释下方。

start 方法是 JavaFX 应用程序的主要入口,因为 main 是 Java 应用程序的入口位置。main 方法在 Application 或主线程被初始化时首先被调用。

该函数将 Stage 作为参数。阶段表示主要步骤或视图,并在应用程序在小程序查看器中启动时加载。它还会抛出与方法一起定义的异常。

该方法中的第一条语句是加载 XML 文件。FXMLLoader 类从 XML 对象模型加载对象层次结构。它用于将 FXML 文档中的对象层次结构带入 Parent 实例。它将参数作为指向 XML 文档层次结构所在位置的 URL。

结果存储在一个 Parent 类实例中,该实例以图形格式保存子类型。JavaFX 库中的 Scene 类是将所有数据存储在图形视图中的容器单元。场景的背景由指定的属性填充。Stage 类的实例被创建并且可以与其他属性一起使用。

下面提到的是用于在浏览器上显示场景的属性。

  • setScene 方法用于指定场景并与舞台实例变量一起使用。
  • setTitle 函数用于设置浏览器上的场景标题。show 函数用于填充舞台上的场景。

以下是上述代码块的输出。

Exception in Application start method 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 : 873) 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$1(
        LauncherImpl.java : 182) at java.lang.Thread.run(Thread.java : 748) Caused by
    : java.lang.NullPointerException
    : Location is required.at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java : 3207) 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 ApplicationStart.start(ApplicationStart.java : 15) at com.sun
    .javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java : 863) at com.sun
    .javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java : 326) at com.sun.javafx
    .application.PlatformImpl.lambda$null$5(PlatformImpl.java : 295) at java.security
    .AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl
    .lambda$runLater$6(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$3(
        WinApplication.java : 177)... 1 more Exception running application ApplicationStart

在上面显示的输出中,问题出现在使用 FXMLLoader 类加载 XML 对象的参数位置,但它返回一个空值。简单来说,getResource() 方法不会定位函数参数中提供的路径。

因此,空值填充 NullPointerException,这是一种运行时异常。并通过提供文件可以定位的绝对路径来处理。堆栈跟踪通常显示问题开始填充的行号。在负载参数中给出的目标必须是正确的。

因此,问题的给定解决方案如下。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Java 中的 volatile 关键字

发布时间:2023/11/13 浏览次数:173 分类:Java

本文讨论了 Java 中的 volatile 关键字及其优缺点,并举例说明了如何使用。Java 是一种非常流行的编程语言,通过了解 Java,我们可以很容易地理解它为什么会在编程社区中获得这样的地位。

Java 中的 StringUtils

发布时间:2023/11/13 浏览次数:80 分类:Java

本文介绍 Java 中的 StringUtils 类是什么。本文介绍什么是 StringUtils 以及如何在 Java 中使用它来处理字符串。StringUtils 是一个用于处理 String 的类,它提供了比 Java String 类更多的实用方法。

Java 中的 flatMap

发布时间:2023/11/13 浏览次数:132 分类:Java

本文介绍 flatMap 以及如何在 Java 中使用它。本文介绍 flatMap 以及如何在 Java 中使用它。flatMap 是 Java 流中的一个操作/函数,用于在执行某些功能性任务后获取新流。在这里,我们将讨论 flatMap

在 Java 中将 Stream 元素转换为映射

发布时间:2023/11/13 浏览次数:77 分类:Java

我们将使用 Java 将流元素转换为映射。我们将向你展示如何使用 Collectors.toMap() 从 Java 字符串中提取映射。我们将讨论 Java Streams 的实际用途以及如何将流元素转换为映射元素。

Java 中的 findFirst 流方法

发布时间:2023/11/13 浏览次数:171 分类:Java

本教程介绍 Java 中的 findFirst 流方法。java.util.stream API 是在 Java 8 中引入的;它用于处理对象的集合。不同的源(例如数组或集合)可以创建流。

Java 中的 Stream 的 reduce 操作

发布时间:2023/11/13 浏览次数:147 分类:Java

本文介绍 Java 中 stream 的 reduce 操作。本文将讨论 reduce() 操作细节并讨论它的一些示例。在讨论 reduce() 操作之前。让我们首先讨论减少。

Java 中的 reflection 是什么

发布时间:2023/11/13 浏览次数:79 分类:Java

本文介绍了 reflection 以及如何在 Java 中使用它。本文介绍 reflection 以及如何在 Java 中使用它。Java 有一个 reflection API 特性,它允许我们检查和修改类、接口等。

修复 Java 未解决的编译错误

发布时间:2023/11/13 浏览次数:141 分类:Java

本文介绍如何修复 Java 中未解决的编译错误。Java 在三个组件上工作:JVM、JRE 和 JDK。JVM(Java 虚拟机)在物理上并不存在,它提供了运行字节码的环境。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便