在我的Chess项目的eclipse上创建可运行的jar文件时获得一个奇怪的行为

时间:2012-04-30 14:52:07

标签: java eclipse jar export nullpointerexception

正如主题所说,我创造了一个国际象棋游戏作为我的第一个2D游戏,但是当我尝试从中创建一个可运行的jar文件时,我得到一个奇怪的行为,当我移动棋子时,游戏变得混乱而没有任何东西作品。奇怪的是,在日食中,一切都很完美。当它创建runnable jar文件时,eclipse会出现以下错误:

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

我不记得我的项目中有这样的文件,所以我猜它是隐藏文件或系统文件。然后我尝试将它作为普通的Jar文件导出到eclipse并通过终端导出(顺便说一句,我是一个mac OSX狮子用户),但我在两个方面都失败了并得到了NullPointerException和更多的错误。我已经阅读了一些关于清单文件的内容,并试图自己编译我的代码,然后以我上面提到的每种方式导出。

我试图解决它一个星期左右,并在各种论坛寻求帮助,但没有运气。

感谢francis,我意识到问题可能来自我的代码本身。而且我的问题是“为什么我在runnable 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;
    }
}

2 个答案:

答案 0 :(得分:7)

在Package / Project Explorer中,右键单击Project并选择“Refresh”。在导出中,您应该能够将其从Jar文件中排除(因为它没有业务)。

此.DS_Store文件是由操作系统自动创建的Mac OS文件,如果文件被删除,Eclipse将会抱怨,因此您需要确保刷新工作区。

答案 1 :(得分:1)

.DS_Store(桌面服务商店)是由Apple Inc.的Mac OS X操作系统创建的隐藏文件,用于存储文件夹的自定义属性,例如图标的位置或背景图像的选择。