簡體   English   中英

InputStream不會讀取Runnable JAR中的圖像

[英]InputStream won't read images in Runnable JAR

我正在為D&D編寫一個字符構建器,但我發現自己處於一個奇怪的情況,因為InputStream類似乎適用於某些文件,然后我得到: java.lang.NullPointerException:輸入流不能為null

我正在使用InputStream將javafx Image構造加載到ImageView構造函數中[new ImageView(new Image(getClass()。getResourceAsStream(..)))]; 它在我加載一些.jpeg圖像時有效,但是當我在.png圖像上執行相同的處理時它不會

我在StackOverflow上嘗試了很多這里描述的解決方案,但似乎沒有一個解決方案太過接近我的問題或者根本沒有幫助:

  • 創建一個Source文件夾並從那里檢索圖像
  • 將圖像文件移動到類包
  • 閱讀所有可能的文檔

這段代碼工作正常,它基本上讀取圖像並將它們作為某些按鈕的背景

ImageView imv;
        for(int i = 1; i <= 8; i++) {
            imv = new ImageView(new Image(getClass().getResourceAsStream("/ButtonImages/" + i + ".jpeg")));
...

這是構建結果(適用於JAR,因為它適用於Eclipse) build result

然后這段代碼,應該加載所有的D&D比賽圖像

this.imv = new ImageView(new Image(getClass().getResourceAsStream("/RaceImages/" + displayname + ".png")));

它確實在Eclipse中顯示出來,但在Runnable jar上報告錯誤 eclipse build

這是我的項目結構的圖像。

code structure

這是我在執行Runnable JAR時期望發生的事情 expectancy

這就是我得到的:

C:\Users\*****\Desktop>java -jar Dnd.jar
Width: 1238.6666666666667       Height: 720.0
Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Input stream must not be null
        at javafx.graphics/javafx.scene.image.Image.validateInputStream(Unknown Source)
        at javafx.graphics/javafx.scene.image.Image.<init>(Unknown Source)
        at dnd.userinterface.javafx.scene.CharactersPane.<init>(CharactersPane.java:55)
        at dnd.userinterface.javafx.scene.DndPane.bookPane(DndPane.java:199)
        at dnd.userinterface.javafx.scene.DndPane.initPane(DndPane.java:99)
        at dnd.userinterface.javafx.scene.DndPane.<init>(DndPane.java:70)
        at dnd.userinterface.javafx.application.DNDApplication.start(DNDApplication.java:52)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        ... 1 more

明確地說我在閱讀比賽圖像時得到一個空的InputStream

注意:我實際上提取了jar所在的RaceImages文件夾,並僅通過命令行運行它(不是我想要的解決方案),運行應用程序 Ambiguous Method

如果你的圖像在src/img/<whatever>文件夾中,那么你的路徑應該是/img/<whataver> 重要的是你要么構建你的jar(這是一個有效的zip文件),以便圖像條目在代碼中有路徑,或者你查看你的jar文件(例如whith 7zip)並相應地更正代碼中的圖像路徑。

我發現了一個嘗試捕獲的問題,我感到慚愧的是沒有早點這樣做。

最終,唯一的錯誤是Eclipse旁邊的圖片名稱中的單個大寫字母,但是從.jar運行時導致NullPointerException。

我認為這已得到解決, 無需進一步干預

這是一張顯示問題的圖片

錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM