簡體   English   中英

線程無限循環java

[英]threading infinity loop java

在方法內部,我啟動了一個等待用戶輸入的線程(擺動按鈕)。 只有在輸入之后,線程才能關閉,並且該方法返回一個值。 我的問題是等待輸入的代碼不在該線程中運行,而是在其他地方運行:

String returnString = "";
Thread waitThread = new Thread(
                () -> {
                    while (xy == null) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            throw THREAD_INTERRUPTED.toException();
                        }
                    }
                }, "waitThread"
            );

waitThread.start();

try {
    waitThread.join();
} catch (InterruptedException e) {
    throw THREAD_INTERRUPTED.toException();
}

// -> wait for user input -> xy != null -> waitThread ends -> main thread joins -> continue code:

returnString = xy;

return ReturnString;

為什么這是必要的? 因為該方法必須返回通過單擊按鈕在其他位置設置的值(xy)。

上面的代碼僅以無限循環結束,不允許與swing組件進行任何交互。

我想不是專業人士,我想主線程是用來捕獲交互事件的。 由於它被卡在waitThread.join(); ,那是不可能的。 正確?

有沒有辦法重組它?

為什么要重新發明輪子? 開箱即用的多種方法:

public static void main(String[] args) {
    String message = JOptionPane.showInputDialog("What are you gonna tell me?");
    System.out.println(message);
}

JOptionPane的

我認為您走錯了路。

單擊一個按鈕會導致一個事件,然后應該有一個ActionListener對此做出反應。

並且該偵聽器可能會更新一些“狀態”內容,而您的其他線程正在讀取該信息。

回答jannis的問題:該方法打開一個彈出窗口,其中包含兩個按鈕。 每個按鈕都為彈出窗口設置一個特定的返回值,然后通過相同的方法將其返回。 因此,該方法需要打開和關閉彈出窗口。 我知道這很愚蠢,但必須是這種方式。 如果我可以在等待時保持與前端的交互,則設置將起作用。

從此評論來看,您似乎正在嘗試重新發現所謂的“模態對話框”,而這根本不是愚蠢的。 請參閱Swing: 如何制作對話框中有關對話框的官方文檔。

暫無
暫無

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

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