Isuru Pathirathna
Isuru Pathirathna

Reputation: 33

Java FX - How to terminate a ScheduledService

I wrote a little code to download some files from internet..if user click on cancel button this must be stopped..i use the cancel() method for do it..but it didn't work.

ScheduledService<Object> service = new ScheduledService<Object>() {
            protected Task<Object> createTask() {
                return new Task<Object>() {
                    protected Object call() {
                        if (checkinternet()) {
                            downloadFiles();
                        }
                        return null;
                    }

                };
            }
        };
        service.start();

In buttons action event handler i called cancel method for stop service.. but it wasn't successful..

service.cancel();

How do i do that...

Upvotes: 1

Views: 1581

Answers (1)

Gikkman
Gikkman

Reputation: 762

There is no automatic way to cancel a task or service.

From the documentation (https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm):

Cancelling the Task.

There is no reliable way in Java to stop a thread in process. However, the task must stop processing whenever cancel is called on the task. The task is supposed to check periodically during its work whether it was cancelled by using the isCancelled method within the body of the call method.

The example referenced in the above block looks like this:

Task<Integer> task = new Task<Integer>() {
    @Override protected Integer call() throws Exception {
        int iterations;
        for (iterations = 0; iterations < 100000; iterations++) {
            if (isCancelled()) {
               break;
            }
            System.out.println("Iteration " + iterations);
        }
        return iterations;
    }
};

So you will have to implement the cancel logic by yourself, unfortunately.

Upvotes: 1

Related Questions