스윙 백그라운드 작업 처리

2879 단어 UI프레임swing

1.       스윙의 백그라운드 장시간 작업 정보
Swing UI에서 백그라운드 작업이 너무 오래 걸리면 GUI 인터페이스가 일시적으로 응답하지 못할 수 있습니다.이러한 문제를 해결하기 위해 스윙워커 클래스를 인용하여 백엔드 소모 작업을 완성합니다.
프로그램 프레임워크는 다음과 같습니다.
SwingWorker worker = new SwingWorker<YourReturnType, YourInterType>() {

            @Override
            protected YourReturnType doInBackground() throws Exception {
                //        
                ...

                //        ,          ,        
                while(...){
                    ...
                     publish(new YourInterType());//       Process    
                }

                return ...;
            }

            @Override
            public void Process(List<YourInterType){
               //         ,         
                ...
            }

            @Override
            public void done() {
                try {
                    YourReturnType y = get();
                    ...//       , GUI      
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };

        worker.execute();

 
예:
 
 SwingWorker worker = new SwingWorker<Boolean, Void>() {

            @Override
            protected Boolean doInBackground() throws Exception {             
                Database db = new Database(eName.getText(), cName.getText());
                return new CreateImpl(db).createDatabase();
            }


            @Override
            public void done() {
                try {
                    String mess = "    !";
                    b = get();
                    if (b) {
                        doClose(RET_OK);
                        mess = "  ,    !";
                    }
                    com.mess.setText(mess);
                   
                    frame.setDone();
                    frame.dispose();
                    com.setVisible(true);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };

        worker.execute();

 
SwingWorker는 백그라운드에서 많은 시간을 소모합니다.사용자가 주로 사용하는 방법은 두 가지인데 하나는 DoInBakcground이고 하나는 Done이다.이 중 DoInBackground는 작업이 끝난 후의 응답을 처리하는 데 시간이 걸립니다.
SwingWorker의 첫 번째 파라미터는 DoInBackground가 되돌아오는 유형을 지정하고, 두 번째 파라미터는 중간 처리 결과의 유형을 지정합니다.여기서는 중간 결과를 처리할 필요가 없기 때문에 두 번째 파라미터를 Void로 지정합니다.
 
그 중에서 워커가done에서 사용자 데이터에 접근할 수 있도록 사용자 데이터를 주 클래스의 구성원 변수로 명시해야 한다.

좋은 웹페이지 즐겨찾기