好的,我正在尝试制作一个有网络选项的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,并且按钮文本/图标在那里更改,而不等待其他条件。
答案 0 :(得分:1)
目前,您正在将UI事物与逻辑/控制器混合在一起。如果你把它分开,我认为这会有所帮助。即在处理ActionEvent时,您正在等待“远程播放器”的响应,阻止所有其他UI事物。
我会尝试将控件(转向它并从远程工作站读取)移动到后台线程中,然后仅在轮到我执行或我从远程播放器收到信息时才更新UI。