0

このカードゲームは Java で作成しました。1 枚のカードを表向きにし、さらに 4 枚のカードを裏向きに提示します。1 から 100 コインを賭けて、裏向きのカードからより高いカードを選択しようとします。より高いカードを選ぶと、賭け金が 2 倍になり、次のラウンドで 2 倍にするか何もしないかを選択できます。

このプログラムは、1 つのパッケージで 3 つの .java ファイルを使用します。

  • HigherNumber: メイン クラス。コードの大部分が含まれます。
  • Deck: カードのデッキを表すクラスの定義が含まれています。
  • カード: 個々のカードを表すクラスの定義が含まれています。

当然、このプログラムはカードを表すために多くの画像を使用します。元の実装では、カードの位置を表す文字列を 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 クラスにあるようです作成時の各カードの画像。次に、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

私は何が欠けていますか?

4

2 に答える 2

0

写真を含む「マルチメディア」フォルダーをEclipseの「より高い番号」パッケージにドラッグアンドドロップすることで、実行可能なJARに画像ファイルを取得したようです。私はまだ NullPointerException を取得しています。

于 2013-05-21T23:25:56.477 に答える