2010-07-22 36 views

Trả lời

2

Bạn có thể sử dụng Thread.yield(), là đối tác java để từ bỏ quyền kiểm soát của bộ vi xử lý một cách tự nguyện.

+6

'Thread.yield() 'sẽ không giúp đỡ nếu mã gọi là trên thread GUI, như các sự kiện được gửi đi trên cùng một luồng. – amotzg

0

Nó được gọi là vòng lặp sự kiện. Điều này article cho thấy cách các sự kiện được xử lý trong các thành phần giao diện người dùng trong Java.

1

Bạn có thể sử dụng EventQueue.invokeLater() để nối thêm Runnable sau tất cả các sự kiện đang chờ xử lý. Điều này có kết quả tương tự như số DoEvents() của C# có sẵn trước mã bạn đặt bên trong phương thức Runnable.run().

See Java documentation for EventQueue.

Ví dụ, nếu bạn muốn để cho tất cả các giao diện điều khiển để mất trọng tâm và các sự kiện tiêu điểm bị mất của họ được thực hiện, bạn có thể sử dụng đoạn mã sau:

@Override 
public void windowClosing(WindowEvent e){ 
    // Clear the focus to allow last changes to be noted. 
    KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); 
    // We want to let other events (e.g. lost focus) run before we start closing. 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { 
      // Do actual closing... 
     } 
    }); 
} 
Các vấn đề liên quan