迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便