1

カスタムProgress Dialogを表示するメソッドを含むDialogクラスがあります。wait

public static void wait(String title){
    isOpen = true;
    ProgressIndicator progress = new ProgressIndicator(-1);

    Label label = new Label(title);
    label.getStyleClass().add("login-label");

    HBox container = new HBox();
    container.setStyle("-fx-background-color: white;");
    container.setAlignment(Pos.CENTER);
    container.getChildren().addAll(progress,label);
    if(Main.HEIGHT < 700){
        container.setSpacing(10);
        container.setPadding(new Insets(10,15,10,15));
    }else if(Main.HEIGHT < 1200){
        container.setSpacing(15);
        container.setPadding(new Insets(15,20,15,20));
    }else{
        container.setSpacing(20);
        container.setPadding(new Insets(20,30,20,30));
    }

    show("", container);
}

Progess Dialogを表示するために、クラスの1つに次のコードがあります。

Platform.runLater(new Runnable(){
    @Override
    public void run() {
        Dialog.wait("Processing, please wait...");
    }
});

しかし、残念ながら表示に遅延があり、スレッド内にラップしようとしましたが、うまくいきませんでした。デスクトップで実行しようとしましたが、完全に動作しますが、なぜ私のAndroid デバイスで動作しないのですか?

完全なコードは次のとおりです。

download = new Button("Download");
download.getStyleClass().add("terminal-button");
download.setPrefWidth(Main.HEIGHT > 700 ? 180 : 140);
download.setOnAction(new EventHandler<ActionEvent>(){
    @Override
    public void handle(ActionEvent event) {

        Platform.runLater(new Runnable(){
            @Override
            public void run() {
                Dialog.wait("Processing, please wait...");
            }
        });

        Platform.runLater(new Runnable(){
            @Override
            public void run() {
                //GET THE SELECTED AREAS FOR DOWNLOAD
                List<String> selectedSectors = new ArrayList();
                String sectorid = null;
                for(Sector r : listView.getItems()){
                    if(r.isSelected()){
                        selectedSectors.add(r.getObjid());
                        sectorid = r.getObjid();
                    }
                }

                if(selectedSectors.size() > 1){
                    Dialog.hide();
                    Dialog.showAlert("Multiple downloads are not supported!");
                    return;
                }

                MobileDownloadService mobileSvc = new MobileDownloadService(); 
                //INIT DOWNLOAD
                Map params = new HashMap();
                params.put("assigneeid", SystemPlatformFactory.getPlatform().getSystem().getUserID());
                params.put("sectorid", sectorid);
                batchid = mobileSvc.initForDownload(params);

                int recordcount = -1;
                while (true) {
                    int stat = mobileSvc.getBatchStatus(batchid); 
                    if ( stat < 0 ) {
                        try {  
                            Thread.sleep(2000); 
                        }catch(Throwable t){;} 
                    } else {
                        recordcount = stat; 
                        break; 
                    }
                }

                if ( recordcount <= 0 ) {
                    Dialog.hide();
                    Dialog.showError("No data to download");
                    return;
                }

                downloadsize = recordcount;
                accountList = new ArrayList();
                int start=0, limit=50;
                while ( start < recordcount ) {
                    params = new HashMap();
                    params.put("batchid", batchid);
                    params.put("_start", start);
                    params.put("_limit", limit); 
                    List<Map> list = mobileSvc.download(params);
                    //if ( list != null ) accountList.addAll( list ); 
                    System.out.println("fetch results is " + list.size());
                    //new Thread( new ProcessDownloadResultTask(start,list)).start(); 
                    start += limit;                             
                }

                Dialog.hide();

                //SAVE AREA, STUBOUTS
                clearSector();
                for(Sector r : listView.getItems()){
                    if(r.isSelected()){
                        saveSector(r);
                    }
                }

                label.setVisible(true);
                progressbar.setVisible(true);
                progressbar.progressProperty().bind(task.progressProperty());
                new Thread(task).start();
                download.setText("Cancel");
                download.setDisable(false);
                download.setOnAction(new EventHandler<ActionEvent>(){
                    @Override
                    public void handle(ActionEvent event) {
                        continueDownload = false;
                        label.setVisible(false);
                        progressbar.setVisible(false);
                        download.setText("Back");
                        download.setOnAction(new EventHandler<ActionEvent>(){
                            @Override
                            public void handle(ActionEvent event) {
                                Main.ROOT.setCenter(new Home().getLayout());
                            }
                        });
                        root.setOnKeyReleased(new EventHandler<KeyEvent>(){
                            @Override
                            public void handle(KeyEvent event) {
                                if(event.getCode() == KeyCode.ESCAPE){
                                    if(Dialog.isOpen){ Dialog.hide(); return; }
                                    Main.ROOT.setCenter(new Home().getLayout());
                                }
                            }
                        });
                        Map params = new HashMap();
                        params.put("batchid", batchid);
                        params.put("downloadedlist", downloadedList);
                        MobileDownloadService svc = new MobileDownloadService();
                        svc.cancelDownload(params);
                    }
                });
                download.setDisable(false);
                    }
        });
    }
});

上記のシナリオは、ボタンをクリックすると発生します。出力は次のようになります。ボタンをクリックするとすぐにダイアログがポップアップしますが、悲しいことに、ボタンのプロセス全体が完了した後にダイアログが表示されます! スレッドでラップしようとしましたが、うまくいきません!

私を助けてください!何か案が?

4

2 に答える 2

0

すべてを にまとめるのではなく、マウスイベントの 1 つに実行を分離することで問題を解決し、次のようsetOnActionにコードを に配置しDialog.wait("Processing, please wait...");ました。setOnMousePressed

download.setOnMousePressed(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event) {
        if(!Dialog.isOpen) Dialog.wait("Processing, please wait...");
    }
});
download.setOnMouseReleased(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event) {
        doDownload();
    }
});

このコードは機能します!

于 2016-04-25T01:23:10.350 に答える