Easy way to call method in new thread

java, javafx, multithreading, ui-thread

Solution

Firstly, I would recommend looking at the Java Thread Documentation.

With a Thread, you can pass in an interface type called a `Runnable`. The documentation can be found here. A runnable is an object that has a `run` method. When you start a thread, it will call whatever code is in the `run` method of this runnable object. For example:

Thread t = new Thread(new Runnable() {
         @Override
         public void run() {
              // Insert some method call here.
         }
});

Now, what this means is when you call `t.start()`, it will run whatever code you need it to without lagging the main thread. This is called an `Asynchronous` method call, which means that it runs in parallel to any other thread you have open, like your `main` thread. :)

Problem

I'm writing small app and now I discovered a problem. I need to call one(later maybe two) method (this method loads something and returns the result) without lagging in window of app. I found classes like `Executor` or `Callable`, but I don't understand how to work with those ones. Can you please post any solution, which helps me? Thanks for all advices. Edit: The method MUST return the result. This result depends on parametrs. Something like this: ``` public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException { return webClient.getPage(page); } ``` This method works about 8-10 seconds. After execute this method, thread can be stopped. But I need to call the methods every 2 minutes. Edit: I edited code with this: ``` public static HtmlPage getPage(final String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException { Thread thread = new Thread() { public void run() { try { loadedPage = webClient.getPage(page); } catch (FailingHttpStatusCodeException | IOException e) { e.printStackTrace(); } } }; thread.start(); try { return loadedPage; } catch (Exception e) { return null; } } ``` With this code I get error again (even if I put `return null` out of catch block).

Original source

Related problems