[英]Java Swing: Runnable JAR file does not work when including images
下面的代碼在Eclipse中可以正常工作(兩種圖像處理方式都可以)。 但是,當導出為可運行的JAR文件並雙擊.JAR時,沒有任何反應。 如果我注釋掉代碼的圖像部分,則.JAR在導出時運行良好,並且會構建框架。 因此,圖像的獲取似乎導致.JAR失敗。
我已經將Strawberry.jpg文件放在“ C:\\ Users \\ sean \\ workspace \\ myApps \\ bin \\ testing”中,請問問題出在我的代碼上嗎?
(代碼首先在這里修改: Java Swing:無法使用getResource加載圖像 )
package testing;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
public class IconTest {
public static void main(String[] arguments) throws IOException {
JFrame frame1 = new JFrame();
frame1.setTitle("Frame1");
frame1.setSize(500, 500);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flo = new FlowLayout();
frame1.setLayout(flo);
//POSSIBILITY 1 TO HANDLE IMAGE
InputStream resourceAsStream = IconTest.class.getResourceAsStream("strawberry.jpg");
Image image = ImageIO.read(resourceAsStream);
JLabel label1 = new JLabel(new ImageIcon(image));
//POSSIBILITY 2 TO HANDLE IMAGE
/* java.net.URL url= IconTest.class.getResource("strawberry.jpg");
BufferedImage watermarkImage = ImageIO.read(url);
JLabel label1 = new JLabel(new ImageIcon(watermarkImage));*/
frame1.add(label1);
frame1.setVisible(true);
}
}
處理圖像的可能性3:
您可以檢查正在獲取的資源是否存在。 找不到資源,然后您還可以使用替代文本創建JLabel
...
JLabel label1 ;
URL imageUrl = IconTest.class.getClassLoader().getResource("strawberry.jpg");
if ( imageUrl != null ) {
label1 = new JLabel(new ImageIcon(imageUrl));
} else {
label1 = new JLabel("Alternative text");
}
將圖像放在您具有源文件的位置,因為它指向源目錄
InputStream resourceAsStream = IconTest.class.getResourceAsStream("strawberry.jpg");
然后生成可運行的jar文件,然后右鍵單擊該jar並給出以Java平台二進制文件的身份運行
遵循Maven標准目錄布局可能會有所幫助:
InputStream resourceAsStream = IconTest.class.getResourceAsStream("/strawberry.jpg")
它應從“ /”開始。 還要檢查罐子上是否確實有圖像。 只需打開包裝並檢查是否已實際添加圖像。
此處提供的有關解決問題的指南很有幫助-謝謝大家。 我測試了導出的JAR的內容; 我使用Kishan建議的診斷代碼來確定我的代碼是否可以“看到”圖像。 我相信,如果我在文件系統中而不是Eclipse導入功能中移動圖像,這可能與Eclipse工作/刷新的方式有關。 最后,為了使其正常工作,我進行了以下更改:我創建了一個新項目和兩個子包-一個用於“資源”,另一個用於我的代碼類。 然后,我右鍵單擊>導入Eclipse中的資源包以獲取圖像。
我的代碼中唯一需要更改的是.... getResourceAsStream(“ / resources / strawberry.jpg”);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.