正如主题所说,我已经创建了一个国际象棋游戏作为我的第一个 2D 游戏,但是当我尝试从中创建一个可运行的 jar 文件时,我得到了一个奇怪的行为,当我移动棋子时,游戏变得混乱并且没有任何效果。奇怪的是,在日食中,一切都运行良好。当它创建可运行的 jar 文件时,eclipse 给出了以下错误:
Resource is out of sync with the file system: '/Chess_Project/src/.DS_Store'.
我什至不记得我的项目中有这样的文件,所以我猜它是隐藏文件或系统文件。然后我尝试使用 eclipse 将其导出为普通的 Jar 文件,然后通过终端(顺便说一下,我是 mac OSX lion 用户),但我在这两种方式上都失败了,并且遇到NullPointerException
了更多错误。我已经阅读了一些关于清单文件的内容,并尝试自己编译我的代码,然后以我上面提到的每种方式导出。
我试图解决它一个星期左右,并在各种论坛上寻求帮助,但没有运气。
感谢 francis,我意识到问题可能来自我的代码本身。andrew 我的问题是“为什么我在可运行的 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;
}
}