2013-09-24 40 views
5

Cách thực hành tốt nhất để bắt đầu một ứng dụng java swing là gì? Có thể có một cách khác để làm điều đó.Thực hành tốt nhất để bắt đầu ứng dụng xoay

Tôi muốn biết liệu tôi có phải sử dụng lớp SwingUtilities để khởi động ứng dụng (khả năng an toàn) hay không (khả năng đầu tiên).

public class MyFrame extends JFrame { 

public void createAndShowGUI() { 
    this.setSize(300, 300); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    // add components and stuff 
    this.setVisible(true); 
} 

public static void main(String[] args) { 

    // First possibility 
    MyFrame mf = new MyFrame(); 
    mf.createAndShowGUI(); 

    // Secound possibility 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 
      MyFrame mf = new MyFrame(); 
      mf.createAndShowGUI(); 
     } 
    }); 
} 

}

Trả lời

7

Chỉ cách thứ hai là đúng. Các thành phần Swing phải được tạo và truy cập chỉ trong chuỗi gửi sự kiện. Xem concurrency in swing. Báo giá có liên quan:

Tại sao luồng ban đầu chỉ đơn giản là tạo GUI? Bởi vì hầu như tất cả các mã tạo hoặc tương tác với các thành phần Swing phải chạy trên chuỗi gửi sự kiện. Hạn chế này được thảo luận thêm trong phần tiếp theo.

Vì vậy, có, bạn cần sử dụng invokeLater().

+0

Cảm ơn câu trả lời của bạn. Liên kết trong câu trả lời của bạn rất hữu ích! – Charmin

+1

@Maik bạn được chào đón. Điều đó, và phần còn lại của hướng dẫn xoay thực sự đáng đọc. – kiheru

Các vấn đề liên quan