[问题] inner class 没有执行

楼主: obelisk0114 (追风筝的孩子)   2015-12-11 22:28:23
我的程式是一个可以计时的记忆翻牌游戏
在程式一些方法中建立一个新的 timer 并呼叫相应的 timertask
我的 timertask 以 inner class 写在相同的 class 里面
奇怪的是那方法就只有 timer & timertask 没有执行,其他都顺利执行
我怀疑是我用了 2个 timertask 做不同事情而没有另外新增执行绪
以下为部分程式码,请各位大大看看哪边出问题,若资讯太少会在补充
谢谢
private JFrame mainFrame;
...
private List<JButton> Cards = new ArrayList<JButton>();
private List<Integer> numberlist = new ArrayList<Integer>();
private int firstOpenCard = -1; // 记录第一次翻开的牌
private int openCards = -1; // 记录翻开几组
private Timer timer, timer2; // timer2 用来设定翻错的牌多久盖回,没有顺利执行
private int i1;
public MemoryGame(String title) {
playerTable = new JPanel();
playerArea = new JPanel();
playerInformation = new JPanel();
...
mainFrame = new JFrame(title);
playerInformation.add(clicks);
playerInformation.add(time);
clickDetermine clickCards = new clickDetermine(); //替每个按钮加上事件
startBtn = new JButton("start");
startBtn.addActionListener(
new ActionListener () {
public void actionPerformed(ActionEvent arg0) {
if ( (openCards != CardNumber/2) && (openCards != -1) ) {
timer.cancel();
int option = JOptionPane.showConfirmDialog(null,
"Do you want to restart the game ?", "Confirm",
JOptionPane.YES_NO_CANCEL_OPTION);
if (option == 1 || option == 2) {
timer = new Timer();
timer.schedule(new timeDisplay(), 0, 1000);
return;
}
}
...
timer = new Timer();
timer.schedule(new timeDisplay(), 0, 1000);
}
});
giveUpBtn = new JButton("give up");
giveUpBtn.addActionListener(...);
...
private class clickDetermine implements ActionListener {
public void actionPerformed(ActionEvent e) {
useSteps++;
for (int i = 0 ; i < CardNumber ; i++) {
if (e.getSource() == Cards.get(i)) {
// 翻的是第一张, 记录位置
if (firstOpenCard == -1) {
Cards.get(i).setText(numberlist.get(i) + "");
firstOpenCard = i;
clicks.setText("目前翻动次数 : " + useSteps);
}
else {
if (i == firstOpenCard) { // 翻同一张
useSteps
作者: AI3767 (AIIA)   2015-12-11 23:11:00
翻错 那边, 一schedule完就cancel不会有问题吗?不清楚你的timer2还有做什么其它的, 如果不cancel可以吗?另外是,这里没看到clickCards变量有被谁用呃 是报什么错??
作者: jinn (阿昌)   2015-12-12 21:10:00
timer2.cancel()删掉 然后coverback那里改成if(firstOpenCard!=-1) {Cards.get(firstOpenCard).setText("*"); }不就好了@@?
作者: AI3767 (AIIA)   2015-12-12 22:11:00
这个报错和timer无关, 是程式逻辑要修, 你的写法,遇到连续开牌, 可能也会有问题上面这句, 这样做是好的, 在new coverback时传入谁要翻回timer new一次就够了. 然后连续翻牌问题, 可以有两种方法1:最多翻两张, 两张有中,或是两张都翻回后, 才能翻下一轮2:可连续翻牌,但自己定出方法和资料结构, 能记得哪两张要互相配对比较也可以,原先的firstOpenCard也可以,只要能确保一次最多只会翻开两张. 然后程式执行的部份再检查看看吧

Links booklink

Contact Us: admin [ a t ] ucptt.com