zoukankan      html  css  js  c++  java
  • invokeAndWait for JavaFX

    http://www.guigarage.com/2013/01/invokeandwait-for-javafx/

    ——————————————————————————————————————————————————

    Swing offers the two methods SwingUtilities.invokeAndWait(…) and SwingUtilities.invokeLater(…) to execute a Runnable object on Swings event dispatching thread. You can read more about this methods here.

    As I currently know JavaFX provides only Platform.runLater(…) that is the equivalent of SwingUtilities.invokeLater(…). A “runAndWait” method doesn’t exist at the moment. While developing some DataFX stuff and my first Raspberry Pi demo I needed this feature in JavaFX. So I created a runAndWait method that will hopefully be part of DataFX in some future. Until then you can use this code in your project:

    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
     
    import javafx.application.Platform;
     
    /**
     * General JavaFX utilities
     *
     * @author hendrikebbers
     *
     */
    public class FXUtilities {
     
        /**
         * Simple helper class.
         *
         * @author hendrikebbers
         *
         */
        private static class ThrowableWrapper {
            Throwable t;
        }
     
        /**
         * Invokes a Runnable in JFX Thread and waits while it's finished. Like
         * SwingUtilities.invokeAndWait does for EDT.
         *
         * @param run
         *            The Runnable that has to be called on JFX thread.
         * @throws InterruptedException
         *             f the execution is interrupted.
         * @throws ExecutionException
         *             If a exception is occurred in the run method of the Runnable
         */
        public static void runAndWait(final Runnable run)
                throws InterruptedException, ExecutionException {
            if (Platform.isFxApplicationThread()) {
                try {
                    run.run();
                } catch (Exception e) {
                    throw new ExecutionException(e);
                }
            } else {
                final Lock lock = new ReentrantLock();
                final Condition condition = lock.newCondition();
                final ThrowableWrapper throwableWrapper = new ThrowableWrapper();
                lock.lock();
                try {
                    Platform.runLater(new Runnable() {
     
                        @Override
                        public void run() {
                            lock.lock();
                            try {
                                run.run();
                            } catch (Throwable e) {
                                throwableWrapper.t = e;
                            } finally {
                                try {
                                    condition.signal();
                                } finally {
                                    lock.unlock();
                                }
                            }
                        }
                    });
                    condition.await();
                    if (throwableWrapper.t != null) {
                        throw new ExecutionException(throwableWrapper.t);
                    }
                } finally {
                    lock.unlock();
                }
            }
        }
    }

    It’s working for all my needs. Please give me some feedback if there are any problems or bug.

    ——————————————————————————————————————————————————

    回帖略。。。

    ——————————————————————————————————
    傲轩游戏网
  • 相关阅读:
    [模板] 循环数组的最大子段和
    [最短路][几何][牛客] [国庆集训派对1]-L-New Game
    [洛谷] P1866 编号
    1115 Counting Nodes in a BST (30 分)
    1106 Lowest Price in Supply Chain (25 分)
    1094 The Largest Generation (25 分)
    1090 Highest Price in Supply Chain (25 分)
    树的遍历
    1086 Tree Traversals Again (25 分)
    1079 Total Sales of Supply Chain (25 分 树
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2865882.html
Copyright © 2011-2022 走看看