JavaFX threading demo

来源:互联网 发布:小型软件课程设计 编辑:程序博客网 时间:2024/06/02 04:07
package JavaFXThreading;import java.util.Timer;import java.util.TimerTask;import java.util.logging.Level;import java.util.logging.Logger;import javafx.application.Application;import javafx.application.Platform;import javafx.concurrent.Task;import javafx.event.ActionEvent;//import javafx.event.EventHandler;  //JackWang_0001import javafx.geometry.Insets;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.Label;import javafx.scene.control.ProgressBar;import javafx.scene.layout.StackPane;import javafx.scene.layout.VBox;import javafx.stage.Stage;//some useful info://http://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm//https://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm//http://www.java2s.com/Tutorials/Java/JavaFX/1510__JavaFX_WebView.htm//http://www.oracle.com/technetwork/java/javase/overview/javafx-overview-2158620.html//http://www.java2s.com/public class JavaFXThreading extends Application{    private static final int MAX = 100;        Thread miTaskThread;    Thread miRunnableThread;    Timer miTimer;        MiTask miTask;    MiRunnable miRunnable;    MiTimerTask miTimerTask;        @Override    public void start(Stage primaryStage)    {        miTask = new MiTask();        ProgressBar progressBarTask = new ProgressBar();        progressBarTask.setProgress(0);        progressBarTask.progressProperty().bind(miTask.progressProperty());                ProgressBar prgbarRunnable = new ProgressBar();        prgbarRunnable.setProgress(0);        miRunnable = new MiRunnable(prgbarRunnable);                ProgressBar prgbarTimerTask = new ProgressBar();        prgbarTimerTask.setProgress(0);        miTimerTask = new MiTimerTask(prgbarTimerTask);        Button btnStart = new Button("Start Task");                btnStart.setOnAction        (            (ActionEvent evt)->            {                miTaskThread = new Thread(miTask);                miTaskThread.setDaemon(true);                miTaskThread.start();                miRunnableThread = new Thread(miRunnable);                miRunnableThread.start();                miTimer = new Timer();                miTimer.scheduleAtFixedRate(miTimerTask, 0, 100);            }        );        /* JackWang_0001        btnStart.setOnAction        (            //This anonymous inner class creation can be turned into a lambda expression            new EventHandler<ActionEvent>()            {                @Override                public void handle(ActionEvent evt)                {                    miTaskThread = new Thread(miTask);                    miTaskThread.start();                    miRunnableThread = new Thread(miRunnable);                    miRunnableThread.start();                    miTimer = new Timer();                    miTimer.scheduleAtFixedRate(miTimerTask, 0, 100);                }            }        );        */                VBox vBox = new VBox();        vBox.setPadding(new Insets(5, 5, 5, 5));        vBox.setSpacing(5);        vBox.getChildren().addAll        (            new Label("Run in Thread(Task)"),            progressBarTask,            new Label("Run in Thread(Runnable)"),            prgbarRunnable,            new Label("Run in Timer and TimerTask"),            prgbarTimerTask,            btnStart        );        StackPane root = new StackPane();        root.getChildren().add(vBox);         Scene scene = new Scene(root, 300, 250);         primaryStage.setTitle("java-buddy.blogspot.com");        primaryStage.setScene(scene);        primaryStage.show();    }    public static void main(String[] args)    {        launch(args);    }        class MiTask extends Task<Void>    {        @Override        @SuppressWarnings("SleepWhileInLoop")        protected Void call() throws Exception        {            for (int i = 1; i <= MAX; i++)            {                updateProgress(i, MAX);                Thread.sleep(100);            }            return null;        }    }        class MiRunnable implements Runnable    {        ProgressBar prgbar;        public MiRunnable(ProgressBar prgbar)        {            this.prgbar = prgbar;        }        @Override        @SuppressWarnings("SleepWhileInLoop")        public void run()        {            for(int loo = 1; loo <= MAX; loo++)            {                final double prgIdx = loo;                //prgbar.setProgress(prgIdx / MAX);                                Platform.runLater                (                    ()->{prgbar.setProgress(prgIdx / MAX);}                                        //error: local variable referenced from a lambda expression must be final or effectively final                    //()->{prgbar.setProgress(loo / MAX);}                                        /*                    new Runnable()                    {                        @Override                        public void run()                        {                            prgbar.setProgress(prgIdx / MAX);                        }                    }                    */                );                try                {                    Thread.sleep(100);                }                catch(InterruptedException exc)                {                    Logger.getLogger(JavaFXThreading.class.getName()).log(Level.SEVERE, null, exc);                }            }        }    }        class MiTimerTask extends TimerTask    {        ProgressBar prgbar;        double count;        public MiTimerTask(ProgressBar prgbar)        {            this.prgbar = prgbar;            count = 0;        }        @Override        public void run()        {            prgbar.setProgress(count / MAX);            if(++count >= MAX)            {                miTimer.cancel();            }        }    }}


0 0
原创粉丝点击