大佬教程收集整理的这篇文章主要介绍了JavaFX - 资源路径在通过 IntelliJ 运行应用程序时不起作用,但在使用 JLink 构建后起作用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 official OpenJFX documentation 中的 @H_581_5@modular with Gradle 选项。
文件结构:
正如 here 中所建议的,我尝试将其用于我的所有资源:
URL CSSURL = getClass().getresource("/org/jamesd/examples/CSS/style.CSS");
scene.getStylesheets().add(CSSURl.toExternalForm());
因此,在我的情况下,为了加载我的主要 .fxml
文件(和所有资源),它将是:
URL urlFXML = getClass().getresource("/fxml/file.fxml");
Parent root = FXMLLoader.load(urlFXML);
当我点击 Run -> Run Main.java(代码设置如上)时,我得到了臭名昭著的 java.lang.NullPointerException: LOCATIOn is required.
,但是当我使用 jlink
构建应用程序时,它可以工作 - 应该如此!
正如 this topic 中所建议的,我使用了 jimage List modules
命令,它给了我以下结构:
@H_736_20@module: [module] meta-inf/MANIFEST.MF [com]/[company]/[package]/Main.class [com]/[company]/[package]/controllers/[Controller].class fxml/file.fxml img/logo.png module-info.class style/style.CSS
为了让我能够运行应用程序而无需每次都构建它,我必须像这样设置我的资源 URL
:
URL urlFXML = new file("src/main/resources/fxml/file.fxml").toURI().toURL();
Parent root = FXMLLoader.load(urlFXML);
如果我这样做,在使用 jlink
构建应用程序后,我会收到此错误:
java.io.fileNotFoundException: /home/[user]/documents/Projects/[folder]/[folder]/[folder]/[projectname]/build/image/bin/src/main/resources/fxml/file.fxml (No such file or directory)
这是有道理的,正如您从上面的 jimage List modules
命令中看到的那样。
我不知道是什么在困扰着我、IDE、Gradle、jlink
或我的无能。
我还确保我已经涵盖了“疑难解答”部分(来自第二个链接):
getClass().getresource()
,所以我在 /
中使用了 URL
。记住绝对路径是相对于类路径定义的。 通常,类路径的根是所有源和 IDE 中的资源文件夹。
我不确定作者的意思是:
src
文件夹(因为他提到了 IDE)。src/main
文件夹,因为这是所有“源”代码所在的位置(即包含包和 java
文件的 .java
文件夹)。jimage List modules
命令所见)。file file = new file(".");
System.out.print("files: \n");
for(String filenames : file.List()) System.out.println(filenames);
哪个返回:
files:
gradle
setTings.gradle
.IDea
src
build
build.gradle
gradlew.bat
gradlew
.gradle
我还尝试将以下代码添加到我的 build.gradle
文件中,但似乎没有任何作用:
sourceSets {
main {
resources {
srcDirs = ["src/main/resources"]
includes = ["**/*.fxml"]
}
}
}
有没有一种方法可以设置资源 URL
,它在我运行应用程序和构建它时都适用,同时保持我当前的文件结构?
source/Demo(GitHub 不允许我上传它 - 压缩时太大或文件/文件夹太多 - 很抱歉给您带来不便)。
我已经包含了一个构建的 jlink
图像,它只需要运行。如果您想使用绝对路径对其进行测试,请取消注释 URL
中的 @H_736_20@main.java。
编辑 1:
build
文件夹的目录树:
.
├── classes
│ └── java
│ └── main
│ ├── com
│ │ └── company
│ │ └── app
│ │ ├── controllers
│ │ │ └── TesTingController.class
│ │ └── Main.class
│ └── module-info.class
├── generated
│ └── sources
│ ├── AnnotationProcessor
│ │ └── java
│ │ └── main
│ └── headers
│ └── java
│ └── main
├── image
│ ├── bin
│ │ ├── app
│ │ ├── app.bat
│ │ ├── java
│ │ ├── jrunscript
│ │ └── keytool
│ ├── conf
│ │ ├── net.propertIEs
│ │ ├── sdp
│ │ │ └── sdp.conf.template
│ │ ├── security
│ │ │ ├── java.policy
│ │ │ ├── java.security
│ │ │ └── policy
│ │ │ ├── limited
│ │ │ │ ├── default_local.policy
│ │ │ │ ├── default_US_export.policy
│ │ │ │ └── exempt_local.policy
│ │ │ ├── README.txt
│ │ │ └── unlimited
│ │ │ ├── default_local.policy
│ │ │ └── default_US_export.policy
│ │ └── sound.propertIEs
│ ├── include
│ │ ├── classfile_constants.h
│ │ ├── jawt.h
│ │ ├── jni.h
│ │ ├── jvmticmlr.h
│ │ ├── jvmti.h
│ │ └── linux
│ │ ├── jawt_md.h
│ │ └── jni_md.h
│ ├── legal
│ │ ├── java.base
│ │ │ ├── ADDITIONAL_liCENSE_INFO
│ │ │ ├── aes.md
│ │ │ ├── asm.md
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ ├── cldr.md
│ │ │ ├── c-libutl.md
│ │ │ ├── icu.md
│ │ │ ├── liCENSE
│ │ │ ├── public_suffix.md
│ │ │ └── unicode.md
│ │ ├── java.datatransfer
│ │ │ ├── ADDITIONAL_liCENSE_INFO -> ../java.base/ADDITIONAL_liCENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION -> ../java.base/ASSEMBLY_EXCEPTION
│ │ │ └── liCENSE -> ../java.base/liCENSE
│ │ ├── java.desktop
│ │ │ ├── ADDITIONAL_liCENSE_INFO -> ../java.base/ADDITIONAL_liCENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION -> ../java.base/ASSEMBLY_EXCEPTION
│ │ │ ├── colorimaging.md
│ │ │ ├── giflib.md
│ │ │ ├── harfbuzz.md
│ │ │ ├── jpeg.md
│ │ │ ├── lCMs.md
│ │ │ ├── libpng.md
│ │ │ ├── liCENSE -> ../java.base/liCENSE
│ │ │ ├── mesa3d.md
│ │ │ └── xwd.md
│ │ ├── java.prefs
│ │ │ ├── ADDITIONAL_liCENSE_INFO -> ../java.base/ADDITIONAL_liCENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION -> ../java.base/ASSEMBLY_EXCEPTION
│ │ │ └── liCENSE -> ../java.base/liCENSE
│ │ ├── java.scripTing
│ │ │ ├── ADDITIONAL_liCENSE_INFO -> ../java.base/ADDITIONAL_liCENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION -> ../java.base/ASSEMBLY_EXCEPTION
│ │ │ └── liCENSE -> ../java.base/liCENSE
│ │ ├── java.xml
│ │ │ ├── ADDITIONAL_liCENSE_INFO -> ../java.base/ADDITIONAL_liCENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION -> ../java.base/ASSEMBLY_EXCEPTION
│ │ │ ├── bcel.md
│ │ │ ├── dom.md
│ │ │ ├── jcup.md
│ │ │ ├── liCENSE -> ../java.base/liCENSE
│ │ │ ├── xalan.md
│ │ │ └── xerces.md
│ │ └── jdk.unsupported
│ │ ├── ADDITIONAL_liCENSE_INFO -> ../java.base/ADDITIONAL_liCENSE_INFO
│ │ ├── ASSEMBLY_EXCEPTION -> ../java.base/ASSEMBLY_EXCEPTION
│ │ └── liCENSE -> ../java.base/liCENSE
│ ├── lib
│ │ ├── classList
│ │ ├── jexec
│ │ ├── jrt-fs.jar
│ │ ├── JspawnHelper
│ │ ├── jvm.cfg
│ │ ├── libawt_headless.so
│ │ ├── libawt.so
│ │ ├── libawt_xawt.so
│ │ ├── libFontmanager.so
│ │ ├── libjavajpeg.so
│ │ ├── libjava.so
│ │ ├── libjawt.so
│ │ ├── libjimage.so
│ │ ├── libjli.so
│ │ ├── libJsig.so
│ │ ├── libJsound.so
│ │ ├── liblCMs.so
│ │ ├── libmlib_image.so
│ │ ├── libnet.so
│ │ ├── libnio.so
│ │ ├── libprefs.so
│ │ ├── libsplashscreen.so
│ │ ├── libverify.so
│ │ ├── libzip.so
│ │ ├── modules
│ │ ├── psFontj2d.propertIEs
│ │ ├── psFont.propertIEs.ja
│ │ ├── security
│ │ │ ├── blackListed.certs
│ │ │ ├── cacerts
│ │ │ ├── default.policy
│ │ │ └── public_suffix_List.dat
│ │ ├── server
│ │ │ ├── libJsig.so
│ │ │ └── libjvm.so
│ │ └── tzdb.dat
│ └── release
├── jlinkbase
│ ├── delegaTing
│ ├── jlinkjars
│ │ ├── javafx-base-11.0.2-linux.jar
│ │ ├── javafx-controls-11.0.2-linux.jar
│ │ ├── javafx-fxml-11.0.2-linux.jar
│ │ ├── javafx-graphics-11.0.2-linux.jar
│ │ ├── tesTing-1.0.jar
│ │ └── tesTing.merged.module-1.0.jar
│ ├── mergedjars
│ ├── nonmodjars
│ ├── tmpmerged
│ │ └── tesTing.merged.module-1.0.jar
│ └── tmpmodinfo
│ └── module-info.class
├── libs
│ └── tesTing-1.0.jar
├── resources
│ └── main
│ ├── fxml
│ │ └── file.fxml
│ ├── img
│ │ └── logo.png
│ ├── lang
│ ├── lib
│ ├── meta-inf
│ │ └── MANIFEST.MF
│ └── style
│ └── style.CSS
└── tmp
├── compileJava
│ └── source-classes-mapPing.txt
└── jar
└── MANIFEST.MF
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的JavaFX - 资源路径在通过 IntelliJ 运行应用程序时不起作用,但在使用 JLink 构建后起作用全部内容,希望文章能够帮你解决JavaFX - 资源路径在通过 IntelliJ 运行应用程序时不起作用,但在使用 JLink 构建后起作用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。