簡體   English   中英

在繼續使用Java中的另一個線程之前,如何等待線程做某事?

[英]How to wait for a thread to do something before continuing on another thread in Java?

我有一個用JFormDesigner創建的名為Welcome的圖形用戶界面。 我要等到在該表單上單擊一個按鈕后才能繼續我的申請。

我正在使用synchronized並實例化GUI作為對象來執行此操作。

synchronized(new Welcome()) {
    wait();
}

在我的GUI內,有一個開始按鈕,單擊該按鈕可運行以下命令:

public void startScript() {
    synchronized(this) {
        notify();
    }

    // Close the GUI
    dispose();
}

GUI成功加載,但是,出現此錯誤:

線程“ main”中的異常java.lang.Object.wait(本機方法)處的java.lang.IllegalMonitorStateException dtohh.main.Main。(Main.java:處的java.lang.Object.wait(Object.java:502)處的異常20)在dtohh.tests.Tests.main(Tests.java:11)

我什至無法按一下GUI上的“開始”按鈕。 然后,當我按下按鈕時,腳本結束,僅此而已。

我添加了此代碼以測試其是否正常運行:

synchronized(new Welcome()) {
    wait();
}

System.out.println("Test");

但是在按下按鈕后,應用程序退出,並且不顯示輸出。 如何等待按鈕被正確按下?

我設法弄清楚了,我需要等待Welcome.class實例,並在第二個線程上使用this進行通知。

主線程:

Welcome gui = new Welcome();
syncronized(gui) { gui.wait(); }

第二個線程:

private void onStart() {
    syncronized(this) { notifyAll(); }
    dispose();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM