4

条件が満たされるまで実行中のすべてのコードを停止する関数やコンポーネントなどをどのように作成できますか?

たとえば、これがある場合、JOptionPaneと同じようになります。

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

関数内などで、その後コンソールに印刷すると、JOptionPaneを閉じるまで印刷されません。

このコンポーネントには、これを行うために何らかのスレッドセットアップが組み込まれていると思いますが、自分の関数でそれを複製するにはどうすればよいですか?

たとえば、JFrameが閉じられるまですべてを遅延させて、JOptionPaneのように機能させたいとします。

または、たとえば、更新された複数の入力を持つ関数があり、その内部でそれらを使用していくつかの計算を行い、特定の値の場合はブール値を返しましたが、それ以外のすべては、真のブール値が返されるまで一時停止されました。

解決策はある種のスレッド設定だと思いますが、私はJavaにまったく慣れておらず、過去にコーディングしたことがあるので、実際にはスレッドを使用したことがないため、適切なストップスタート/ポーズ実行スタイルの関数システムをまだ作成できません。

誰かがこれを達成する方法、またはこのタイプのものが機能していることを示すより良いコード例を持っていますか?

4

2 に答える 2

8

You create a monitor (which is just a simple Object)

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

Now you create a wait method

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

and a method to unlock your waiters.

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

So when you want to do something fancy, you can do it like this:

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

Of course, there are many possibilities, this is only one version of how to do it.

于 2012-08-23T14:51:44.250 に答える
1

スレッドをスリープ状態にしてみましたか?

単純なThread.sleep(timeInMilliseconds)

こちらをチェック

于 2012-08-23T15:00:43.670 に答える