2011-09-14 29 views
5

Mã của tôi là:JFrame được nạp trễ

solveDb_userfileInconsistency solve = new solveDb_userfileInconsistency(); 
    solve.setVisible(true); 

    try { 
     solve.solveIt(); 
    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

"solveIt" phương pháp lợi nhuận sau 30 giây và cho đến khi nó trở về, khung không được cài đặt đúng cách nhưng sau solveIt phương pháp lợi nhuận, khung được cài đặt đúng cách nhưng những gì tôi muốn là trước khi đi vào phương pháp giải quyết, khung nên được đúng trên màn hình. Có phương pháp nào có thể đợi cài đặt của khung và sau đó gọi phương thức resolveIt?

Trả lời

2

Có vẻ như bạn đang thực hiện tất cả điều này trên chuỗi giao diện người dùng. Đừng làm điều đó - hãy thực hiện solveIt thực hiện trên một chuỗi nền, gọi vào chuỗi giao diện người dùng bằng cách sử dụng SwingUtilities nếu nó cần cập nhật/truy vấn giao diện người dùng. Về cơ bản, bạn không nên làm công việc quan trọng trong chuỗi giao diện người dùng - xem Swing concurrency tutorial để biết thêm thông tin.

1

Hãy xem lớp SwingWorker. Nó được sử dụng để làm các quá trình nền mà không dừng khung được cài đặt.

1

Sử dụng chuỗi gửi sự kiện cho mã có liên quan đến GUI ngắn ngủi. Các nhiệm vụ chạy dài nên được thực hiện theo chủ đề của riêng chúng như được đề xuất trong các câu trả lời khác.

Vì mọi người đặt cược tôi với nó. Hãy để tôi chỉ bổ sung cho câu trả lời của họ với một số liên kết thú vị:

Lưu ý rằng hai liên kết điểm để hơi cũ nhưng có liên quan tài liệu của JFC. Ngày nay, SwingWorker được bao gồm trong Tiêu chuẩn API.

Chúc mừng,