1

トピックにあるように、私は最初の2Dゲームとしてチェスゲームを作成しましたが、そこから実行可能なjarファイルを作成しようとすると、奇妙な動作が発生し、ピースを移動するとゲームが混乱し、何も機能しなくなります。奇妙なことに、日食の中ではすべてが完璧に機能します。実行可能なjarファイルを作成すると、Eclipseで次のエラーが発生します。

Resource is out of sync with the file system: '/Chess_Project/src/.DS_Store'.

プロジェクトにそのようなファイルがあったことすら覚えていないので、隠しファイルかシステムファイルかと思います。次に、それをEclipse付きの通常のJarファイルとしてエクスポートし、その後ターミナルを介してエクスポートしようとしました(ちなみに、私はmac OSX lionユーザーです)が、両方の方法で失敗し、NullPointerExceptionさらにいくつかのエラーが発生しました。マニフェストファイルについて少し読んで、自分でコードをコンパイルしてから、上記の各方法でエクスポートしようとしました。

私は1週間ほどそれを解決しようとし、さまざまなフォーラムで助けを求めましたが、運がありませんでした。

フランシスのおかげで、問題は私のコード自体に起因する可能性があることに気づきました。アンドリューの質問は、「実行可能なjarファイルで奇妙な動作が発生するのはなぜですか(つまり、正常に動作しないのに)、Eclipse内で実行すると、すべてが正常に動作するのですか?」。これが私のコードのメインクラスです:

import java.awt.*;
import javax.swing.SwingUtilities;
import javax.swing.*;

public class MainWindowChess {

    /**
    *
    */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                JFrame f = new JFrame("Chess");
                SwingUtilities.isEventDispatchThread();
                f.setLayout(new BorderLayout());
                f.setSize(40 * 8, 40 * 9 - 20);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setResizable(false);
                Board b = new Board();
                f.add(b);
                f.setVisible(true);
                System.out.println("check");

            }
        });

    }
}

ちなみに、ここでの返信がとても速いのは驚きですが、他の人を助けたいと思っている人がたくさんいるのを見てうれしく思います。

これがpaintComponentメソッドです:

protected void paintComponent(Graphics g) {
    super.paintComponents(g);

    if (boardDrawn == false) {
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                g.drawImage(getRect(i, j), cors[i][j].getXCor(), cors[i][j].getYCor(), null);
            }
        }

        for (int i = 0; i < bp.length; i++) {
            bp[i].drawPiece(g, bp[i].getImage(), bp[i].getLocationX(), bp[i].getLocationY());
        }
        for (int i = 0; i < wp.length; i++) {
            wp[i].drawPiece(g, wp[i].getImage(), wp[i].getLocationX(), wp[i].getLocationY());
        }

        boardDrawn = true;
    } else if (boardDrawn == true) {


        if (tempPiece instanceof BlackPiece) {
            for (int i = 0; i < bp.length; i++) {

                //if the piece was found
                if (tempPiece == bp[i]) {

                    if (bp[i].isMoveAvailable(bp[i].getTypeID(), bp[i].getLocationX(), bp[i].getLocationY(), tempCor.
                            getXCor(), tempCor.getYCor())) {
                        killTime = true;
                        //if the rectangle which we want to draw the Piece on is not occupied by another Piece
                        if (isRectBlocked(bp[i].getTypeID(), oldCor.getXCor(), oldCor.getYCor(), tempCor.
                                getXCor(), tempCor.getYCor()) == false) {

                            g.drawImage(getCompatitableRect(oldCor.getXCor(), oldCor.getYCor()), oldCor.
                                    getXCor(), oldCor.getYCor(), null);
                            bp[i].drawPiece(g, bp[i].getImage(), tempCor.getXCor(), tempCor.getYCor());
                            bp[i].setX(tempCor.getXCor());
                            bp[i].setY(tempCor.getYCor());

                        } else if (canRectBeOccupied(bp[i], tempCor.getXCor(), tempCor.getYCor())
                                && isRectBlocked(bp[i].getTypeID(), oldCor.getXCor(), oldCor.getYCor(), tempCor.
                                getXCor(), tempCor.getYCor()) == false) {

                            g.drawImage(getCompatitableRect(oldCor.getXCor(), oldCor.getYCor()), oldCor.
                                    getXCor(), oldCor.getYCor(), null);
                            g.drawImage(getCompatitableRect(tempCor.getXCor(), tempCor.getYCor()), tempCor.
                                    getXCor(), tempCor.getYCor(), null);
                            bp[i].drawPiece(g, bp[i].getImage(), tempCor.getXCor(), tempCor.getYCor());
                            bp[i].setX(tempCor.getXCor());
                            bp[i].setY(tempCor.getYCor());
                        }
                    }
                }
            }
        }
        if (tempPiece instanceof WhitePiece) {
            for (int i = 0; i < wp.length; i++) {

                //if the piece was found
                if (tempPiece == wp[i]) {
                    if (wp[i].isMoveAvailable(wp[i].getTypeID(), wp[i].getLocationX(), wp[i].getLocationY(), tempCor.
                            getXCor(), tempCor.getYCor())) {
                        killTime = true;

                        if (isRectBlocked(wp[i].getTypeID(), oldCor.getXCor(), oldCor.getYCor(), tempCor.
                                getXCor(), tempCor.getYCor()) == false) {
                            System.out.println("");
                            g.drawImage(getCompatitableRect(oldCor.getXCor(), oldCor.getYCor()), oldCor.
                                    getXCor(), oldCor.getYCor(), null);
                            wp[i].drawPiece(g, wp[i].getImage(), tempCor.getXCor(), tempCor.getYCor());
                            wp[i].setX(tempCor.getXCor());
                            wp[i].setY(tempCor.getYCor());

                        } else if (canRectBeOccupied(wp[i], tempCor.getXCor(), tempCor.getYCor())
                                && isRectBlocked(wp[i].getTypeID(), oldCor.getXCor(), oldCor.getYCor(), tempCor.
                                getXCor(), tempCor.getYCor()) == false) {

                            g.drawImage(getCompatitableRect(oldCor.getXCor(), oldCor.getYCor()), oldCor.
                                    getXCor(), oldCor.getYCor(), null);
                            g.drawImage(getCompatitableRect(tempCor.getXCor(), tempCor.getYCor()), tempCor.
                                    getXCor(), tempCor.getYCor(), null);
                            wp[i].drawPiece(g, wp[i].getImage(), tempCor.getXCor(), tempCor.getYCor());
                            wp[i].setX(tempCor.getXCor());
                            wp[i].setY(tempCor.getYCor());
                        }
                    }
                }
            }
        }

        killTime = false;
        tempPiece = null;
    }
}
4

2 に答える 2

7

パッケージ/プロジェクト エクスプローラーで、プロジェクトを右クリックし、[更新] を選択します。エクスポートでは、Jar ファイルから除外できるはずです (そこにはビジネスがないため)。

この .DS_Store ファイルは、OS によって自動的に作成される Mac OS ファイルであり、ファイルが削除されると Eclipse がエラーを出すため、ワークスペースが更新されていることを確認する必要があります。

于 2012-04-30T14:58:07.587 に答える
1

.DS_Store (デスクトップ サービス ストア) は、Apple Inc. の Mac OS X オペレーティング システムによって作成される隠しファイルで、アイコンの位置や背景画像の選択など、フォルダのカスタム属性を保存します。

于 2012-04-30T14:57:28.743 に答える