我用Java创建了这个纸牌游戏。它做了什么它呈现一张牌面朝上,另外4张牌面朝下。你下注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);
我不知道这里出了什么问题。当我使用Strings而不是URL时,该程序作为可运行的JAR运行良好。它在Eclipse中运行时工作正常。它现在不能作为可运行的JAR工作。
我确实读过一些名为“清单”的内容,但我很难理解。我确实让Eclipse为这个程序生成一个清单:
Manifest-Version: 1.0
Main-Class: higherNumber.HigherNumber
我错过了什么?
答案 0 :(得分:0)
我使用类似的东西:
URL myurl = this.getClass().getResource("file.png");
myIconImage = Toolkit.getDefaultToolkit().getImage(myurl);
你正在做的事情:
return new ImageIcon(cardIconURL);
也许尝试我的第二行。我也将图像存储在罐子里。
答案 1 :(得分:0)
好吧,看起来我通过将包含图片的“多媒体”文件夹拖放到Eclipse中的“highernumber”包中来获取可运行JAR中的图像文件。我仍然得到NullPointerException。