class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{
//玩家
JLabel play[] = new JLabel[32];
//棋盤
JLabel image;
//窗格
Container con;
//工具列
JToolBar jmain;
//重新開始
JButton anew;
//悔棋
JButton repent;
//打開
JButton showOpen;
//保存
JButton showSave;
//退出
JButton exit;
//當前資訊
JLabel text;
//保存當前操作
Vector FileVar;
Vector Var;
//規則類物件(使用于呼叫方法)
ChessRule rule;
/*單擊棋子*******************************/
/*chessManClick = true 閃爍棋子 并給執行緒回應*/
/*chessManClick = false 吃棋子 停止閃爍 并給執行緒回應*/
boolean chessManClick;
/*控制玩家走棋*******************************/
/*chessPlayClick = 1 黑棋走棋*/
/*chessPlayClick = 2 紅旗走棋 默認紅旗*/
/*chessPlayClick = 3 雙方都不能走棋紅旗走棋 默認紅旗*/
int chessPlayClick = 2;
//控制棋子閃爍的執行緒
Thread tmain;
//把第一次的單擊給執行緒回應
static int Man,i;
ChessMainFrame(){
}
ChessMainFrame(String Title){
//獲行刻格參考
con = this.getContentPane();
con.setLayout(null);
//實體化規則類
rule = new ChessRule();
FileVar = new Vector();
Var = new Vector();
//創建工具列
jmain = new JToolBar();
text = new JLabel("歡迎來到中國象棋");
text.setToolTipText("提示資訊");
anew = new JButton("新游戲");
anew.setToolTipText("重新開始");
exit = new JButton("退出");
exit.setToolTipText("退出本程式");
repent = new JButton("悔棋");
repent.setToolTipText("回傳到上次走棋的位置");
showOpen = new JButton("打開");
showOpen.setToolTipText("打開以前棋局");
showSave = new JButton("保存");
showSave.setToolTipText("保存當前棋局");
//把組件添加到工具列
jmain.setLayout(new GridLayout(0,6));
jmain.add(anew);
jmain.add(repent);
jmain.add(showOpen);
jmain.add(showSave);
jmain.add(exit);
jmain.add(text);
jmain.setBounds(0, 500, 450, 30);
con.add(jmain);
//添加棋子標簽
drawChessMan();
/*注冊監聽者*/
anew.addActionListener(this);
repent.addActionListener(this);
exit.addActionListener(this);
showOpen.addActionListener(this);
showSave.addActionListener(this);
//注冊棋子移動監聽
for(int i=0;i<32;i++) {
drawChessMan();
con.add(play[i]);
play[i].addMouseListener(this);
}
//添加棋盤標簽
con.add(image = new JLabel(new ImageIcon("CChess.GIF")));
image.setBounds(0, 0, 445, 498);
image.addMouseListener(this);
//注冊表單關閉監聽
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
//表單居中
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if(frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if(frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
this.setLocation((screenSize.width - frameSize.width)/2-200,(screenSize.height - frameSize.height)/2-290);
this.setIconImage(new ImageIcon("相1.gif").getImage());
this.setResizable(false);
this.setTitle(Title);
this.setSize(450, 555);
this.show();
}
/*添加棋子方法*************/
public void drawChessMan() {
//流程控制
int i,k;
//圖示
Icon in;
//黑色棋子
//車
in = new ImageIcon("車1.GIF");
for(i=0,k=10;i<2;i++,k+=385);{
play[i] = new JLabel(in);
play[i].setBounds(k,10,40,40);
play[i].setName("車1");
}
//馬
in = new ImageIcon("馬1.GIF");
for(i=4,k=60;i<6;i++,k+=285);{
play[i] = new JLabel(in);
play[i].setBounds(k,10,40,40);
play[i].setName("馬1");
}
//象
in = new ImageIcon("象1.GIF");
for(i=8,k=105;i<10;i++,k+=195);{
play[i] = new JLabel(in);
play[i].setBounds(k,10,40,40);
play[i].setName("象1");
}
//士
in = new ImageIcon("士1.GIF");
for(i=12,k=155;i<14;i++,k+=95);{
play[i] = new JLabel(in);
play[i].setBounds(k,10,40,40);
play[i].setName("士1");
}
//卒
in = new ImageIcon("卒1.GIF");
for(i=16,k=10;i<21;i++,k+=96.5);{
play[i] = new JLabel(in);
play[i].setBounds(k,160,40,40);
play[i].setName("卒1"+i);
}
//炮
in = new ImageIcon("炮1.GIF");
for(i=26,k=60;i<28;i++,k+=289);{
play[i] = new JLabel(in);
play[i].setBounds(k,110,40,40);
play[i].setName("炮1"+i);
}
//將
in = new ImageIcon("將1.GIF");
play[30] = new JLabel(in);
play[30].setBounds(205,10,40,40);
play[30].setName("將1");
//紅色棋子
//車
in = new ImageIcon("車2.GIF");
for(i=2,k=10;i<4;i++,k+=385);{
play[i] = new JLabel(in);
play[i].setBounds(k,450,40,40);
play[i].setName("車2");
}
//馬
in = new ImageIcon("馬2.GIF");
for(i=6,k=60;i<8;i++,k+=285);{
play[i] = new JLabel(in);
play[i].setBounds(k,450,40,40);
play[i].setName("馬2");
}
//相
in = new ImageIcon("相2.GIF");
for(i=10,k=105;i<12;i++,k+=195);{
play[i] = new JLabel(in);
play[i].setBounds(k,450,40,40);
play[i].setName("相2");
}
//仕
in = new ImageIcon("仕2.GIF");
for(i=14,k=155;i<16;i++,k+=95);{
play[i] = new JLabel(in);
play[i].setBounds(k,450,40,40);
play[i].setName("仕2");
}
//兵
in = new ImageIcon("兵2.GIF");
for(i=21,k=10;i<26;i++,k+=96.5);{
play[i] = new JLabel(in);
play[i].setBounds(k,300,40,40);
play[i].setName("兵2"+i);
}
//炮
in = new ImageIcon("炮2.GIF");
for(i=28,k=60;i<30;i++,k+=289);{
play[i] = new JLabel(in);
play[i].setBounds(k,350,40,40);
play[i].setName("炮2"+i);
}
//帥
in = new ImageIcon("帥2.GIF");
play[31] = new JLabel(in);
play[31].setBounds(205,450,40,40);
play[31].setName("帥2");
}
}
問題:沒有錯誤,但是編譯的時候總會出項下面問題
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1095)
at java.awt.Container.add(Container.java:419)
at ChessMainFrame.<init>(Chess.java:118)
at Chess.main(Chess.java:10)
注釋了這紅色部分后可以運行,但是棋子加不上去啊,這是為什么呢?
uj5u.com熱心網友回復:
drawchessMan方法就是用來畫圖的吧,你注釋了肯定玩不起來uj5u.com熱心網友回復:
沒注釋的話,或是把drawchessMan方法給刪了,運行報錯呢。紅色字體的部分轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/211290.html
標籤:Eclipse
上一篇:java后端生成的excel,如何讓瀏覽器呼叫本地excel直接打開,而不是去下載勒?
下一篇:vscode除錯java程式報錯
