01/10/2018, 15:12

Cancel a Task trong Java

Chào các bạn,

Mình có 1 task để update scene graph như sau:

class CullingTask extends Task<Void>{
        
        private ObservableList<Node> bgList;
        private ImageView mask;
        private Group pGroup;
        public CullingTask(ObservableList<Node> list, Group present,  ImageView img){
            bgList = list;
            mask = img;   
            pGroup = present;
             
        }
        @Override 
        protected Void call() throws Exception {
                
            if (isCancelled()){
                System.out.println("Cancel calculating");
                return null;
            }                   
               
            final List<Node> list = calculatNodes();                
            Platform.runLater(new Runnable() {
                @Override 
                public void run() {
                    if(bgList.isEmpty()){
                        final int size = list.size();
                        for(int i = 0; i < size; i++){
                            if(isCancelled()){
                                System.out.println("Cancel updating");
                                bgList.clear();
                                break; 
                            }                                         
                            bgList.add(list.get(i));
                        }
                    }
                    if(!isCancelled())                             
                        pGroup.getChildren().remove(mask);
                }
            });
            return null;
        }
    }

Hàm sau để khởi tạo và chạy task:

public void culling() {
    cullingTask = new CullingTask(bgGroup.getChildren(), presentPane, bgImage);
    Thread th = new Thread(cullingTask);
    th.setDaemon(true);
    th.start();      
}  

Mình đặt biến cullingTask global nhưng khi gọi cullingTask.cancel() thì tại sao state isCancelled không trả về true ? Đổi context thành CullingTask.this.isCancelled() cũng ko tác dụng. Không biết mình miss chỗ nào?
Đây là print state của task khi chạy:

Bạn nào nhìn ra vấn đề chỗ này chỉ giúp mình với.

anon45952904 viết 17:24 ngày 01/10/2018

Ko tìm được nguyên nhân tại sao mình nhét thêm 1 cái stop() để dừng.

Bài liên quan
0