2011-01-30 28 views
6

Như bạn đã biết, tiêu chuẩn SWT vòng lặp chính trông như thế này:Java SWT: Quấn vòng lặp chính trong bộ xử lý ngoại lệ?

Display display = new Display(); 
Shell shell = new Shell(display); 
... 
shell.open(); 
while (!shell.isDisposed()) { 
    if (!display.readAndDispatch()) { 
    display.sleep(); 
    } 
} 
display.dispose(); 

Gần đây, tôi đã có một cuộc tranh cãi với một đồng nghiệp về việc liệu nó sẽ làm cho tinh thần để quấn vòng lặp chính trong một try-catch, như vậy:

Display display = new Display(); 
Shell shell = new Shell(display); 
... 
shell.open(); 
while (!shell.isDisposed()) { 
    try { 
    if (!display.readAndDispatch()) { 
     display.sleep(); 
    } 
    } catch (RuntimeException e) { 
    // TODO Implement exception handler 
    } 
} 
display.dispose(); 

Đồng nghiệp của tôi nói làm nó theo cách này, bạn sẽ không phải ngay lập tức tắt ứng dụng nếu một vụ tai nạn trong thread GUI xảy ra, do đó người dùng có thể có một cơ hội để lưu dữ liệu của mình trước khi chốt chương trình.

Vì vậy, bạn nghĩ sao? Liệu nó có ý nghĩa để làm một điều như vậy?

Trả lời

6

Đó là một phong cách rất tốt để làm như vậy, bởi vì bất kỳ ngoại lệ nào cũng có thể xảy ra trong mã GUI của bạn. Chúng tôi có một người gửi BugReport chung tại địa điểm này, và tôi thích nó, bởi vì không có gì bị mất, và các ứng dụng tiếp tục làm việc sau khi báo cáo lỗi (chủ yếu là;)).

+0

Vâng, chắc chắn là phong cách rất tốt, nhưng xin lưu ý rằng việc bắt giữ ngoại lệ trống là điều rất xấu. Bởi vì sau đó ngoại lệ bị mất và gỡ lỗi trở thành một cơn ác mộng. Tôi giả định rằng bạn thực sự sẽ thực hiện đánh bắt. Nếu bạn đã từng phải gỡ lỗi loại mã này, Eclipse có xử lý điểm ngắt ngoại lệ rất tốt, nơi trình gỡ rối phá vỡ ở bất kỳ ngoại lệ cụ thể nào. –

+1

Như tôi đã nói ... Tôi xử lý ngoại lệ, bằng cách đăng nhập nó VÀ gửi một semiautomated (người dùng phải bấm "ok") bugreport cho trường hợp ngoại lệ để phát hành của chúng tôi. – Daniel