Java 如何使方法暂停而不暂停整个程序?

Java 如何使方法暂停而不暂停整个程序?,java,time,timeout,sleep,Java,Time,Timeout,Sleep,所以我在写一个程序,在一个玩家面前播放Reversi/Otherlo。我写了一个方法来制作一个片段翻转的短动画- public void flip(int row, int col, Graphics window) { Color a; if (pieces[row][col]==1) a = Color.black; else a = Color.white; for ( int size = 90; size>0; size-=2) { try { Threa

所以我在写一个程序,在一个玩家面前播放Reversi/Otherlo。我写了一个方法来制作一个片段翻转的短动画-

public void flip(int row, int col, Graphics window)
{
Color a;
if (pieces[row][col]==1)
    a = Color.black;
else
    a = Color.white;
for ( int size = 90; size>0; size-=2)
{
    try { Thread.sleep(11,1111); } catch (InterruptedException exc){}
    window.setColor(new Color( 0, 100, 0 ));
    window.fillRect(row*100+3, col*100+3, 94, 94);
    window.setColor(a);
    window.fillOval(row*100 + 5, col*100+5+(90-size)/2, 90, size);
}
if (a==Color.black)
    a=Color.white;
else
    a=Color.black;
for ( int size = 0; size<90; size+=2)
{
    try { Thread.sleep(11,1111); } catch (InterruptedException exc){}
    window.setColor(new Color( 0, 100, 0 ));
    window.fillRect(row*100+3, col*100+3, 94, 94);
    window.setColor(a);
    window.fillOval(row*100 + 5, col*100+5+(90-size)/2, 90, size);
}
}
public void flip(整数行、整数列、图形窗口)
{
颜色a;
如果(条数[行][列]==1)
a=颜色。黑色;
其他的
a=颜色。白色;
对于(int size=90;size>0;size-=2)
{
尝试{Thread.sleep(111111);}catch(InterruptedException exc){}
setColor(新颜色(0,100,0));
window.fillRect(行*100+3,列*100+3,94,94);
设置颜色(a);
窗口。椭圆形(行*100+5,列*100+5+(90尺寸)/2,90,尺寸);
}
如果(a==颜色.黑色)
a=颜色。白色;
其他的
a=颜色。黑色;

对于(int size=0;size您应该在从主程序创建的专用线程中运行此方法。

在这种情况下,您应该在单独的
线程中运行
flip
。最简单的示例:

Thread t = new Thread(new Runnable() {
    public void run() {
        flip();
    }
});
t.start();

您需要创建一个单独的线程来处理动画。该线程可以调用
thread\sleep
,因为
thread\sleep
不会暂停“整个程序”,但仅限于当前线程。在动画的每个步骤中,它都应该更改指示片段翻转动画当前阶段的某些状态,然后请求重新绘制。

您的目标是异步编程:计划一个
javax.swing.Timer
,它每次触发时都执行一个动画步骤。这将是idioGUI程序的一种自动方式;使用单独的线程在循环中休眠,并在每个步骤中使用
invokeLater
的方法也会起作用,但由于使用了更多的系统资源(另一个线程通常只是休眠),因此不太优雅.

+1不要在GUI线程中执行任何可能会花费大量时间的操作。请始终将此工作传递给其他线程,并使用SwingUtils.invokeLater从其他线程更新GUI。