エラー処理が初めてです。私は変数の初期化に問題があります。画像が存在する限り正常に動作しますが、意図的に間違ったパスをロードすると、以下のエラーメッセージが表示されます。抽象クラスとサブクラスでの静的変数の初期化
静的メソッドの初期化を正しく修正すると、問題は解決します。
Exception in thread "main" java.lang.ExceptionInInitializerError
at Board.placeBishops(Board.java:149)
at Board.createNewBoard(Board.java:64)
at RunGame.main(RunGame.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1388)
at Bishop.<clinit>(Bishop.java:24)
public class Bishop extends Piece{
private static BufferedImage whiteBishopImage;
private static BufferedImage blackBishopImage;
static {
try {
whiteBishopImage = ImageIO.read(ChessFrame.class.getResource("/resources/icons/bishop_white.png"));
blackBishopImage = ImageIO.read(ChessFrame.class.getResource("resources/icons/bishop_black.png"));
}
catch (IOException e) {
e.printStackTrace();
whiteBishopImage = warningImage;
blackBishopImage = warningImage;
RunGame.getLogger().log(Level.WARNING, "Failed to load Bishop image");
}
}
@Override public BufferedImage getImage() {
if (color == PieceColor.WHITE){
return whiteBishopImage;
}
else return blackBishopImage;
}
これは抽象クラスです。
すでに**行番号**のスタックトレースがあるので、その行をソースコードにマークすると役立ちます。コード品質に関する副題:静的なものと「オブジェクトごとの」ものを混在させることは悪い考えです。意味:あなたのメソッド 'getImage()'は静的である可能性があります。静的オブジェクトを返すだけであるためです。あなたがそれを静的にしていないという事実は、潜在的に混乱しています。実際には、静的なものは避けてください。単体テストをより困難にするか不可能にするからです。 – GhostCat
あなたのアプリを死なせても大丈夫です。 JOptionPaneを使用してメッセージを表示します。「リソースx。プログラム終了」、System.exit(-1)をロードできませんでした。 – ControlAltDel
'resources/icons/bishop_black.png'の先頭にスラッシュがありませんか? –