2013-04-06 103 views
0

我試圖在框架內製作一個簡單的按鈕,但按鈕圖標顯示不正確我的問題是爲什麼?我們爲什麼不能把 wingUtilities.invokeLater(new Runnable() {
public void run() { new SwingDemo(); } });
S裏面的SwingDemo(),或public void actionPerformed(ActionEvent ae) 3.)哪些語句使edt線程? 請嘗試用簡單的詞語來解釋,否則更多的疑惑將會蔓延。事件調度線程

import javax.swing.*; 
import java.awt.event.*; 
class SwingDemo implements ActionListener { 
SwingDemo() { 
    JFrame jfrm = new JFrame("A Simple Swing Application"); 
    jfrm.setSize(275, 100); 
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JButton jlab = new JButton(" Button "); 
    jfrm.add(jlab); 
    jfrm.setVisible(true); 
} 
public static void main(String args[]) { 
    SwingUtilities.invokeLater(new Runnable() {  //2 
    public void run() { 
    new SwingDemo(); 
    } 
    }); 
} 
    public void actionPerformed(ActionEvent ae) { 
    //jlab.setText("You selected " + ae.getActionCommand()); 
    //showStatus("You selected " + ae.getActionCommand()); 

}}

+0

按鈕圖標_如何正確顯示? – Reimeus 2013-04-06 17:08:46

回答

0

的調用SwingUtilities.invokeLater(...)它在應用的初始階段所做從而UI的創建在事件調度線程中發生。它需要在之前發生構造函數或應用程序內的任何後續方法被調用。創建的線程被稱爲initial thread

+0

沒有實現runnable接口創建edt線程? – 2013-04-06 17:16:01

+0

編號'SwingUtilities.invokeLater'安排在EDT上執行GUI創建任務。只要你進行invokeLater或invokeWait調用,就不用擔心EDT的實際「創建」。這由Swing自己管理。 – Reimeus 2013-04-06 17:21:47

+0

對不起,我不明白你的第一個答覆,我的意思是後來調用,並調用和等待不能互換使用? – 2013-04-06 17:47:52