為什麼要加EventQueue.invokeLater
比如下面的程式:
原因:
Java's GUI is strictly single-threaded.
All GUI related things in java should always go through a single thread. The thread is our legendary "AWT-EventQueue-0" . Hence all GUI related actions should necessarily go through the AWT Event thread. If not so you may end up in a deadlock. For small programs, this might never happen. But for a huge java application if you try frame.setVisible(true) kind of thing in main thread, you will soon find yourself searching a new job. What invokeLater() does is to post your Runnable in the AWT thread's event queue. So the code in your run method will be executed in the AWT-Eventqueue thread.
大意是說,java的GUI都是的單執行緒,應該使用事件排程執行緒去執行,如果沒意思使用事件排程執行緒的話,可能造成死鎖。但是在小的程式中,這種現象(死鎖)不會發生的;大的應用程式中才會出現這種現象!
import java.awt.*;
import javax.swing.*;
public class Test
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new JFrame();
frame.setSize(400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}
原因:
Java's GUI is strictly single-threaded.
All GUI related things in java should always go through a single thread. The thread is our legendary "AWT-EventQueue-0" . Hence all GUI related actions should necessarily go through the AWT Event thread. If not so you may end up in a deadlock. For small programs, this might never happen. But for a huge java application if you try frame.setVisible(true) kind of thing in main thread, you will soon find yourself searching a new job. What invokeLater() does is to post your Runnable in the AWT thread's event queue. So the code in your run method will be executed in the AWT-Eventqueue thread.
大意是說,java的GUI都是的單執行緒,應該使用事件排程執行緒去執行,如果沒意思使用事件排程執行緒的話,可能造成死鎖。但是在小的程式中,這種現象(死鎖)不會發生的;大的應用程式中才會出現這種現象!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18903360/viewspace-2153030/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式碼之間為什麼要加空格?
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 巨集定義裡面為什麼要加括號?
- 學習Python為什麼要參加培訓班?Python
- 學習Python語言為什麼要參加培訓?Python
- 為什麼要參加java培訓?有哪些優勢?Java
- 為什麼要參加軟體測試培訓?有哪些優勢?
- 為什麼要code reviewView
- 為什麼要寫作
- Python是什麼?為什麼要掌握python?Python
- 為什麼要參加中質協六西格瑪黑帶認證
- 為什麼要學習Netty?Netty
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要指令重排序?排序
- 為什麼要財務自由
- 為什麼要學習 Vim?
- mysql為什麼加索引就能快MySql索引
- 為什麼C語言Scanf函式對字串不要加取地址運算子?而整型變數要加?C語言函式字串變數
- [短文速讀-3] 內部匿名類使用外部變數為什麼要加final變數
- 為什麼 JavaScript 的 this 要這麼用?JavaScript
- Python到底是什麼?為什麼要學Python?Python
- Python優勢是什麼?為什麼要學習?Python
- 我為什麼要學技術
- 為什麼要“東數西算”?
- 為什麼要分庫分表?
- 為什麼還要記密碼密碼
- redis為什麼要提供pipeline功能Redis
- 前端為什麼要工程化?前端
- 為什麼要閱讀原始碼原始碼
- 序 為什麼要建立部落格
- [譯]為什麼要寫 super(props)
- 為什麼要貢獻開源
- 為什麼要特徵標準化特徵
- 我為什麼會從程式不喜歡加{}到加{}
- Linux是什麼系統?為什麼要學習Linux?Linux
- 為什麼要學習Python?Python可以做什麼事情?Python
- 什麼是Spring Boot?為什麼要學習Spring Boot?Spring Boot