簡體   English   中英

Java Swing對JTextArea的多線程訪問

[英]Java Swing multi-threaded access to JTextArea

我有一個多線程Java Swing應用程序。

幾個線程將通過textArea.append("something")寫入JTextArea來調用該方法。 我應該像這樣包裝它:

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        textArea.append("something");
    }
});

或者它只是一個內容更新,Swing會自己做正確的線程嗎?

通常,您對Swing所做的任何更新,特別是任何更改控件的狀態或布局的更新都應該從Swing線程完成。

在這種情況下,你是絕對正確的,將每個更新包裝到invokeLater是正確的方法。 您可以嘗試更新自己的隊列或類似的但是當Swing已經提供了您需要的功能時,使用它是有意義的。

請參閱JTextArea文檔: http//docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html

在哪里說

警告:Swing不是線程安全的。 有關更多信息,請參閱Swing的線程策略。

在哪里說:

一般來說,Swing不是線程安全的。 除非另有說明,否則必須在事件派發線程上訪問所有Swing組件和相關類。

JTextArea#append方法中沒有任何文檔說明從其他線程使用是安全的。

暫無
暫無

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

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