簡體   English   中英

如何在 main 仍在運行時使用線程運行另一個 JFrame

[英]How to use a thread to run another JFrame while the main is still running

我有一個 jframe 我想在我的主框架運行時顯示。 我想暫停我的主要代碼,直到用戶在另一幀上執行必要的操作。 我已經閱讀了很多解決方案,但我需要看到它完成了我的代碼才能完全理解和掌握它。 我不想像以前看到的那樣使用 jdialog 作為答案。 我的主要目標是更好地理解線程,以便我可以在不同的情況下使用我學到的東西。

使用我創建的代碼,在運行線程時,只加載框架,框架上沒有其他功能。 (框架很簡單,它有一個標簽,一個用戶從中選擇的列表,以及一個基本上返回所選列表值的按鈕。)它就像線程被切斷完成或其他東西。

這是我的班級調用屏幕:

public class myThread implements Runnable {

    String result = null;

    public void run() {
        MessageScreen ms = new MessageScreen();
        ms.setVisible(true);
    }

    public String getResult() {
        return result;
    }

    public void setResult(String AS) {
        result = AS;
    }

}

在我的主代碼中,調用了一個返回 String[] 值的方法,在某些時候使用此方法,我有以下代碼調用新線程以獲取在原始主方法中返回所需的值:

    myThread mt = new myThread();
    Thread t = new Thread(mt);
    t.start();
    try {
        t.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    myreturn = new String[] {"true", mt.getResult()}; 

沒有列出第二幀的整個代碼,當用戶按下按鈕時,在綁定到按鈕的偵聽器的末尾按下我想關閉框架並返回從列表中選擇的字符串:

jf.dispose();
myt.setResult(AdminSelection);

在框架類中,我聲明了以下實例變量:

String AdminSelection = null;
myThread myt; 

我希望這是足夠的信息,有人可以幫助我並了解這里出了什么問題。

函數join()一直等到run()方法結束,當您執行t.join()時,您的線程已經或幾乎結束。 這是因為在您的run()方法中,在用戶單擊確認按鈕之前,沒有任何東西會阻塞線程。 最好這樣!

在這里創建線程是沒有意義的,你應該使用回調,或者在 Java 中更一般地,一個監聽器。 您可以查看 創建自定義偵聽器


但是,特別是如果你想暫停你的主代碼,你應該使用一個(模態的) JDialog ,它是為此而設計的! 不要試圖自己阻塞 UI,你可能會錯誤地阻塞 UI 線程(由 Swing/AWT 處理)。 創建一個JDialog會更好,因為在 UI 線程上已經為這種用法做好了一切准備。

另外,你必須知道創建一個Thread真的很長,在你真正需要的Thread使用它。

暫無
暫無

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

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