2012-08-23 52 views
4

如何创建一个函数或组件等来停止所有正在运行的代码,直到满足条件?停止代码,直到满足条件为止

例如方式为JOptionPane中同样会做的,如果我有这样的例子:

JOptionPane.showInputDialog(null, "Hello", "Title", 1); 

在函数等等,然后打印到控制台之后它也不会打印,直到我关闭的JOptionPane 。

我猜这个组件有一些内置的线程设置来做到这一点,但我怎么能用我自己的功能复制?

所以说例如我想让JFrames延迟一切,直到它被关闭,所以它就像一个JOptionPane。

或者例如有过这得到了更新多个输入的功能,里面做了一些数学与那些,如果它是一个特定的值返回一个布尔值,但随后一切,但那些被暂停,直到返回True布尔。

我猜测解决方案是某种线程设置,但我对Java很新,当我在过去编码时,我没有真正使用线程,所以我无法创建一个良好的停止/启动/暂停运行风格功能系统。

有没有人有任何建议如何实现这个或更好的代码示例显示这种类型的东西工作?

回答

7

您创建了一个监视器(这仅仅是一个简单的Object

public static final Object monitor = new Object(); 
public static boolean monitorState = false; 

现在你创建一个wait方法

public static void waitForThread() { 
    monitorState = true; 
    while (monitorState) { 
    synchronized (monitor) { 
     try { 
     monitor.wait(); // wait until notified 
     } catch (Exception e) {} 
    } 
    } 
} 

和解锁你的服务员的方法。

public static void unlockWaiter() { 
    synchronized (monitor) { 
    monitorState = false; 
    monitor.notifyAll(); // unlock again 
    } 
} 

所以,当你想要做的事花哨,你可以做这样的:

new Thread(new Runnable() { 
    @Override 
    public void run() { 
    // do your fancy calculations 
    unlockWaiter(); 
    } 
}).start(); 

// do some stuff  
waitForThread();  
// do some stuff that is dependent on the results of the thread 

当然,也有很多的可能性,这是只有一个版本的怎么办呢。

+2

'等待()'应始终在循环中调用,由Javadoc中说明。 – lhballoti

+0

这看起来像我需要的东西的类型,但我不能让你的代码工作出于某种原因。你能否更新它来显示一个非常基本的条件和结果? – zeddex

+0

其实它正在工作,我只需要在条件中包装unlockWaiter()。工作测试我所做的就是\t \t \t \t //做你看中的计算 \t \t \t \t INT V = 0; \t \t \t \t int go = 1; \t \t \t \t做{ \t \t \t \t \t //旧位置 \t \t \t \t \t \t V = V + 1; \t \t \t \t \t \t System.out.println(“Looping”+ v); \t \t \t \t \t \t //如果更新 \t \t \t \t \t如果(V == 1200){ \t \t \t \t \t \t GO = 0; \t \t \t \t \t \t unlockWaiter(); \t \t \t \t \t} \t \t \t}而(去== 1); – zeddex

1

您是否尝试让线程睡眠?

那样简单Thread.sleep(timeInMilliseconds)

检查here

+1

是的,如果你知道等待或延迟循环一段时间,这很好,但在这种情况下,这不是我所需要的。感谢您的回复。 – zeddex

相关问题