Tôi có một Ứng dụng Java sử dụng SWT làm bộ công cụ và tôi cảm thấy mệt mỏi với tất cả mã bảng nồi hơi xấu xí cần để cập nhật phần tử GUI.Java SWT: gói syncExec và asyncExec để dọn sạch mã
Chỉ cần để thiết lập một nút khuyết tật để được kích hoạt Tôi phải đi qua một cái gì đó như thế này:
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});
Tôi muốn giữ mã nguồn của tôi như là phẳng như tôi có thể có thể, nhưng tôi cần một con số khổng lồ 3 cấp độ thụt đầu dòng chỉ để làm một cái gì đó đơn giản.
Có cách nào tôi có thể bao bọc không? Tôi muốn một lớp học như:
public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}
Và có thể được sử dụng như sau:
UIUpdater.updateUI(shell, buttonOk.setEnabled(true));
Something như thế này sẽ là tuyệt vời cho ẩn mà khủng khiếp mớ hỗn độn SWT dường như nghĩ là cần thiết để làm bất cứ điều gì.
Như tôi đã hiểu, Java không thể làm các con trỏ hàm. Nhưng Java 7 sẽ có một cái gì đó gọi là đóng cửa mà phải là những gì tôi muốn. Nhưng trong khi chờ đợi có bất cứ điều gì ở tất cả các tôi có thể làm gì để vượt qua một con trỏ hàm hoặc gọi lại đến một chức năng khác được thực hiện?
Là một sang một bên, tôi bắt đầu nghĩ rằng nó sẽ có giá trị nỗ lực để làm lại ứng dụng này trong Swing, và tôi không phải đưa lên với crap xấu xí này và không cross-platformyness của SWT.
Tôi hy vọng bạn đã biết, Swing đó là đơn luồng quá. Vì vậy, bạn phải làm tương tự như trong SWT để cập nhật một phần tử GUI từ một luồng khác. Sự khác biệt duy nhất là Swing không ném một ngoại lệ khi bạn gọi phương thức Swting từ chuỗi sai. Nhưng bạn sẽ thấy maynỗi lỗi trong ứng dụng của bạn khi bạn làm điều này sai. –