Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaFX和maven: NullPointerException: Location是必需的

JavaFX和maven: NullPointerException: Location是必需的
EN

Stack Overflow用户
提问于 2014-02-24 14:23:17
回答 7查看 64.6K关注 0票数 41

我一直在尝试让Maven与JavaFX建立联系。尽管我对Maven和JavaFX缺乏经验,但我并不认为这是一个很大的挑战。我的Java知识相当扎实(包括Swing),没有料到设置它会遇到这么大的困难。

我从一个由JavaFX 13.0 Community提供的IntelliJ项目开始。我的主类中的代码相对较小:

代码语言:javascript
运行
AI代码解释
复制
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
    {
        //getClass().getResource("../../resources/sample.fxml");
        Parent root = FXMLLoader.load(getClass().getResource("../sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args)
    {
        launch(args);
    }
}

我的pom.xml也不太大:

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>sample</groupId>
    <artifactId>JavaFXDemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <organization>
        <name>RubberDucky</name>
    </organization>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.zenjava</groupId>
                    <artifactId>javafx-maven-plugin</artifactId>
                    <version>2.0</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.zenjava</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <mainClass>sample.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>javafx</artifactId>
            <version>2.2</version>
            <systemPath>${java.home}/lib/jfxrt.jar</systemPath>
            <scope>system</scope>
        </dependency>
    </dependencies>
</project>

我正在使用JavaFX Maven Plugin构建应用程序。在运行mvn clean jfx:jar之后,一切看起来都很好,所有构建都成功了。但是,当我试图运行应用程序时,我会得到以下错误:

代码语言:javascript
运行
AI代码解释
复制
Exception in Application start method
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.javafx.main.Main.launchApp(Main.java:698)
        at com.javafx.main.Main.main(Main.java:871)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown So
urce)
        at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Location is required.
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at sample.Main.start(Main.java:15)
        at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$5.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
        at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source)
        ... 1 more

经过一些粗略的调试,问题似乎出现在我正在加载文件的过程中。在将sample.fxml硬编码到我硬盘上的某个位置之后,应用程序运行时没有任何问题。在从IntelliJ运行应用程序时,当前的设置(见上文)也是如此。

我觉得我已经用尽了所有的资源(包括StackOverflow,一些非常类似的错误),但是我不知道到底是什么错了。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-02-25 02:21:30

确保您的sample.fxml位于src/main/resources/目录(或子目录)中。然后您可以像这样访问该文件:

代码语言:javascript
运行
AI代码解释
复制
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("sample.fxml"));

解释:在编译阶段,所有资源和类都被复制到target/classes/中。因此,fxml文件驻留在这个目录中,类驻留在一个有关其包名的子目录中。如果您调用getClass().getResource("sample.fxml");,则将相对于类文件搜索该文件,该类文件将是以下目录:target/classes/sample/

在类加载器上调用.getResource()将相对搜索路径设置为target/classes/,从而找到您的文件。

P.S.你也可以写:

代码语言:javascript
运行
AI代码解释
复制
Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml"));
票数 104
EN

Stack Overflow用户

发布于 2015-12-12 03:11:48

正如@荒谬-Mind已经解释过的,maven不会复制驻留在src目录下的任何资源文件(如fxml)。

如果您想保留除了java源文件之外的fxml文件,可以使用maven资源插件来复制它们:

代码语言:javascript
运行
AI代码解释
复制
<build>
    ...
    <resources>
        <resource>
            <filtering>false</filtering>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.fxml</include>
            </includes>             
        </resource>
    </resources>
    ...
</build>
票数 16
EN

Stack Overflow用户

发布于 2016-08-30 05:24:07

我和Intelij和Gradle也有同样的问题。

修复步骤:

1.移动档案

sample.fxml

到路径

\src\main\resources\fxml

  1. 设置此文件的路径:

父根= FXMLLoader.load(getClass().getResource("/fxml/sample.fxml"));

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22000423

复制
相关文章
JavaFX入门(二):JavaFX和FXML
在我的JavaFXML系列博客第一篇《JavaFX入门(一):我的第一个JavaFX程序 》中我们用纯Java代码写了一个很简单的JavaFXML程序,这一节中我们使用FXML编写程序界面,然后用Java书写后台逻辑完成上一节中的程序,实现相同的功能。
卡尔曼和玻尔兹曼谁曼
2019/01/22
8.8K0
JavaFX入门(二):JavaFX和FXML
使用Maven构建JavaFX程序(HelloWorld示例)
本工程包含一个main入口函数类,一个controller类,资源文件包括一个fxml文件,一个css样式文件。 工程目录如下:
卡尔曼和玻尔兹曼谁曼
2019/01/22
8.8K0
使用Maven构建JavaFX程序(HelloWorld示例)
window.location.href和window.location.hash的区别
综:window.location.href表示重定向,后面跟着的是完整的url地址,与其相似的还有window.location.hash,
全栈程序员站长
2022/09/13
8810
防止NullPointerException,是程序员的基本修养
如果一个Java程序到处抛出NullPointerException,那么我们可能会各种吐槽代码的质量。但是我们的项目又经常会抛出空指针异常,空指针异常必然常伴Java程序员。为此我们需要了解一些它喽,NullPointerException是Java种一个常见的RuntimeException,正如阿里的Java开发手册所说,对于Java程序员来说防止NPE是一种基本素养。今天我们盘一下NullPointerException。
无花大师
2023/04/17
8780
基因日签【20210629】snRNA是剪接所必需的
除U6外,所有的snRNP都含有一段保守序列,它能够与Sm蛋白结合,后者是一种能被自身免疫病所产生的抗体识别的蛋白质。
尐尐呅
2022/03/31
4240
基因日签【20210629】snRNA是剪接所必需的
JavaFX入门(四):JavaFX布局(一)
说道GUI编程一定要谈到布局,JavaFX内置了大量的布局控件提供给我们使用。其实,JavaFX的布局控件和界面元素控件都是继承自javafx.scene.layout.Region类。我们这里只看布局控件类。布局控件我们在界面上一般是看不到的,它一个容器用于放置其它可视的界面元素控件。(JavaFX在线API文档:JavaFX8 API Online) JavaFX布局控件的类图如下:
卡尔曼和玻尔兹曼谁曼
2019/01/22
12K1
JavaFX入门(四):JavaFX布局(一)
选择云服务厂商:信息隐私政策是必需
一个良好的云供应商隐私政策不仅应该含有物理和逻辑安全,还要有地理和人员方面的约束。 当涉及到选择云服务厂商时,首先你要做的事情是弄清楚他们确实拥有信息隐私政策,发布在某个位置你是可以找到的,且它解决了你的问题。另外,它是否可以在线使用,并且在需要时进行更新。有些,政策可以促进你考虑一些他们以前没有想到的事情。 云隐私政策应用重点关注的地方是物理和逻辑安全。但同样重要的是身份管理和访问控制,这些政策是专门给可以访问您的数据的人。 你还应该关注对于不同的地理位置有哪些相关政策。例如,如果的数据无法离开美国,那么
静一
2018/03/20
9990
URL是如何关联Nginx location配置块的?
上一篇文章介绍了HTTP请求匹配server{ }配置块的过程,接着请求会继续匹配location{ }配置块,并最终决定哪些指令及Nginx模块处理请求。本文将介绍location的匹配规则,以及rewrite指令与location匹配顺序的关系。
陶辉
2023/10/18
4020
URL是如何关联Nginx location配置块的?
Nginx中location的匹配和rewrite
最近在线上进行nginx规则的调整的时候遇到一个问题,发现在location匹配时候可能会踩到的一个坑。 location在匹配规则的时候匹配的是归一化之后的URL,比如多个斜杠或者URL中带”.”, “..”的都会被 归一化。 而在内部rewrite的时候新的URL地址是不会再次被归一化的。这种不一致如果没有留意可能会遇到问题。 比如: ```` if ($request_uri ~ "/api") { rewrite (.*) /newapi/$1; # 斜杠多余了 } location
小小科
2018/05/02
1.3K0
JavaFx-Button
.button1 { -fx-font: 22 arial; -fx-base: #b6e7c9; }
shengjk1
2021/03/02
4.9K0
JavaFx-Button
什么是Maven?
Maven的主要目标是让繁琐的构建过程变得自动化,根据pom.xml文件解决依赖问题。
陈不成i
2021/06/29
2090
什么是Maven?
Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。
浩Coding
2019/07/03
6310
什么是Maven?
JavaFX 简介
本文介绍了JavaFX技术,并基于JavaFX编写了一个简单的图形界面程序。通过使用JavaFX,可以大大简化Java应用程序的开发过程,提高开发效率。同时,JavaFX也提供了一些常用的设计器,如SceneBuilder,可以方便地创建JavaFX应用程序。
乐百川
2018/01/09
5.8K0
JavaFX 简介
避开NullPointerException的10条建议
NullPointerException应该是 Java 开发中最常出现的问题,也是 Java 程序员最容易犯的错误。虽然看起来是个小错误,但带来的影响却不小,Tony Hoare(null 引用的发明者)在 2009 年说过 NPE 大约给企业造成数十亿美元的损失。在这工作半年内,我就踩了好几次 NPE 的坑。举个例子,我需要在原有逻辑上加一段代码,而新加的代码报错抛出了 NPE,同时又没做异常处理,就直接导致后面的逻辑不运行了,影响了整个原有逻辑,太恐怖了。所以大家一定要小心避开 NPE 这个坑。
草捏子
2020/08/10
2.1K0
JavaFX 11发行说明
以下记录描述了有关此版本的重要更改和信息。在某些情况下,该说明提供了有关问题或更改的其他详细信息的链接。
gemron的空间
2019/11/04
6.7K0
Nginx Location和Rewrite深入剖析
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
星哥玩云
2022/07/26
7370
运维是必需品,安全是奢侈品
安全,一直是大部分公司想引起重视,又不引起重视的存在。想引起重视的原因是安全问题不断出现,经常会听到某某云厂商的服务器不可用了,某某公司的服务器被入侵了,某某公司的数据库被前员工删了,层出不穷的安全问题让安全人员防不胜防。
没有故事的陈师傅
2022/12/06
1K0
JavaFX入门(三):使用Eclipse开发JavaFX程序
JavaFX有着WPF类似的炫酷,但是由于WPF不是跨平台的,所以最近看了看JavaFX。下面是使用Eclipse进行开发的环境配置。
卡尔曼和玻尔兹曼谁曼
2019/01/22
6.1K0
JavaFX入门(三):使用Eclipse开发JavaFX程序
javafx的使用原理是什么?javafx与java有什么不同?
在生活中人们接触java比较多,很多人却不知道javafx是什么。javafx是一种编程语言,使用这种语言能够开发丰富的网络程序,目前javafx包括两种类别,一种是javafx脚本,另一种是javafx mobile(可以运行于手机等移动设备),在以后的发展中,javafx可能会拥有更多的作用。那么javafx的使用原理是什么?javafx与java有什么不同?
用户8739405
2021/07/02
4.8K0
Stack Overflow 上最火的一个问题:什么是 NullPointerException
在逛 Stack Overflow 的时候,发现最火的问题竟然是:什么是 NullPointerException(java.lang.NullPointerException),它是由什么原因导致的,有没有好的方法或者工具可以追踪它发生的原因?
田维常
2019/10/23
5500

相似问题

JavaFX NullPointerException位置是必需的NetBeans

40

JavaFX - (IntelliJ) FXML (NullPointerException: Location )

25

分级JavaFX - java.lang.NullPointerException:位置是必需的

10

IntelliJ to jar给出了"java.lang.NullPointerException: Location是必需的“。

20

JavaFX,nullpointerexceltion,位置是必需的

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文