[英]Runnable JAR file won't
我用Java創建了這個紙牌游戲。 它的作用是使一張卡面朝上,另外四張面朝下。 您下注1到100個硬幣,並嘗試從正面朝下的紙牌中選擇更高的紙牌。 如果您選擇更高的卡,您的賭注將加倍,並且您可以選擇在下一輪中加倍或全無。
該程序在一個包中使用3個.java文件:
因此,該程序自然使用大量圖片來表示卡片。 在我最初的實現中,我只是向ImageIcon傳遞了一個字符串,以表示卡的位置。 就像,對於一張面朝下的卡片的圖標,
faceDown = new ImageIcon("multimedia/redBack.gif");
當我這樣做時,該程序在Eclipse中運行時運行完美。 因此,我使用Eclipse導出到可運行的JAR文件。 然后,該JAR文件運行沒有問題,除非我將JAR文件移動到其他地方,所有圖像均未顯示。
因此,我研究並找到了使用URL來解決此問題的方法。 我對該程序進行了重新設計以使用URL,所以現在有了這樣的內容:
//Set URL for default faceDown icon.
faceDownURL = this.getClass().getResource(pictureRoot +"redBack.gif");
//Set location for default back face of cards.
faceDown = new ImageIcon(faceDownURL);
現在它可以在Eclipse中正常運行,但是我無法使導出的可運行JAR正常工作。 從Windows運行時,它只是閃爍而沒有執行任何操作。 當我通過命令行運行時,得到以下信息:
C:\Documents and Settings\mstabosz>java -jar C:\Temp\HigherNumber.jar
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at higherNumber.Card.setImage(Card.java:150)
at higherNumber.Card.<init>(Card.java:36)
at higherNumber.Deck.<init>(Deck.java:22)
at higherNumber.HigherNumber.<init>(HigherNumber.java:16)
at higherNumber.HigherNumber.main(HigherNumber.java:857)
嘗試遵循此代碼,問題的根源似乎在第150行的Card類中。在第150行,該類在setImage()函數中,該函數正在構建名為iconName的字符串以用於設置每張卡創建時的圖像。 然后,它將ImageIcon返回給Card類的構造函數。
//Set up the icon for the card.
this.cardIcon = setImage();
第150行是return語句。 以下是創建ImageIcon中使用的URL cardIconURL的語句。
//Create a URL based on the constructed string.
URL cardIconURL = this.getClass().getResource(iconName);
return new ImageIcon(cardIconURL);
我只是不明白這里出了什么問題。 當我使用字符串而不是URL時,該程序作為可運行的JAR正常運行。 在Eclipse中運行時,效果很好。 它現在不能用作可運行的JAR。
我確實閱讀了一些清單,但我很難理解。 我確實讓Eclipse為該程序生成了清單:
Manifest-Version: 1.0
Main-Class: higherNumber.HigherNumber
我想念什么?
我用類似的東西:
URL myurl = this.getClass().getResource("file.png");
myIconImage = Toolkit.getDefaultToolkit().getImage(myurl);
你在做:
return new ImageIcon(cardIconURL);
也許嘗試我的第二行。 我也將圖像存儲在罐子中。
好的,看起來好像是通過將包含圖片的“多媒體”文件夾拖放到Eclipse的“更高編號”包中,將圖像文件保存在可運行的JAR中。 我仍然得到NullPointerException。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.