Java Tic Tac Toe网络

时间:2016-10-30 13:00:14

标签: java

好的,我正在尝试制作一个有网络选项的tic tac toe。我写了这段代码,但我遇到了一些问题。

public void actionPerformed(ActionEvent e)
{       
    JButton temp=(JButton)e.getSource();
    //temp.setText("X");
    if(turn%2==0)
    {
        temp.setText("X");
        temp.setIcon(gui.imgX);
        temp.setDisabledIcon(gui.imgX);
        gui.repaint();
        gui.revalidate();
        turn++;
        try {
            for(int i=0;i<gui.buttons.length;i++)
                if(temp==gui.buttons[i])
                    out.write(i);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
    if(turn%2==1)
    {
            try {
            System.out.println(turn);
            gui.buttons[in.read()].setText("O");
            gui.revalidate();
            System.out.println(turn);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        turn++;
    }       
}

好的,每当我点击一个按钮时,它会在下一个if条件内运行(转动%2 == 0),但不会设置按钮图标或文本。但是,它实际上在后台以某种方式设置它,所以只有当它完成整个actionPerformed并从另一台PC读取一个int时,我才能看到图标和文本。所以基本上,它在完成整个actionPerformed方法后一起显示“X”和“O”。如何修复它,以便在按下按钮时显示“X”而无需等待从另一台PC读取。请注意,它成功地在另一台PC中写入int,并且按钮文本/图标在那里更改,而不等待其他条件。

1 个答案:

答案 0 :(得分:1)

目前,您正在将UI事物与逻辑/控制器混合在一起。如果你把它分开,我认为这会有所帮助。即在处理ActionEvent时,您正在等待“远程播放器”的响应,阻止所有其他UI事物。

我会尝试将控件(转向它并从远程工作站读取)移动到后台线程中,然后仅在轮到我执行或我从远程播放器收到信息时才更新UI。