首页 > 编程语言 > 详细

javaFX学习01:关于调用launch方法的内部过程以及线程变化

时间:2020-04-04 17:11:08      阅读:126      评论:0      收藏:0      [点我收藏+]

关于javaFX我们了解了它的最基本的代码如下:

import javafx.application.Application;
import javafx.stage.Stage;

public class HELLO extends Application {
    
    public static void main(String[] args) {
        launch(args);
    }
   
    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.show();
    }
    
}

我们可以看到会显示出这样一个窗口

技术分享图片

 

 可以知道在main方法里调用的launch方法肯定调用了HELLO类里的start方法,因为在运行这段代码时窗口被显示出来了,但真的只调用了start方法吗?我们这里就再来实验以下。

查看API文档我们可以知道,在Application类里有三个方法需要重写,分别是init方法、start方法、stop方法,所以我们再写一个类继承Application,分别重写下这三个方法(先不把窗口显示出来),代码如下:

import javafx.application.Application;
import javafx.stage.Stage;

public class Life extends Application{
    public static void main(String[] args) {
        System.out.println("main()");
        launch(args);
    }

    @Override
    public void init() throws Exception {
        System.out.println("init()");
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("start()");
    }

    @Override
    public void stop() throws Exception {
       System.out.println("stop()");
    }
}

在所在的方法里,分别输出相对应的方法名,用来观察方法的执行情况,我们执行程序可以看到如下情况:

技术分享图片

 

 我们会发现程序并没有终止,并且没有调用stop方法,我们手动终止程序也不没有调用stop方法,说明手动停止程序并不能让Application"死亡"

我们再添加以下show方法,使得窗口显示出来,代码如下:

import javafx.application.Application;
import javafx.stage.Stage;

public class Life extends Application{
    public static void main(String[] args) {
        System.out.println("main()");
        launch(args);
    }

    @Override
    public void init() throws Exception {
        System.out.println("init()");
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("start()");
        primaryStage.show();
    }

    @Override
    public void stop() throws Exception {
       System.out.println("stop()");
    }
}

我们可以发现在没关闭窗口之前,结果和之前一样,但当我们点击关闭按钮,可以发现如下结果:

技术分享图片

 

 可以发现程序停止,并且调用了stop方法,说明Application已经”死亡“

由如上我们可以知道javaFX中,必须有start方法,并且在调用launch方法时,launch先调用init方法,然后再调用start方法,当我们关闭窗口的时候,才会调用stop方法使得Application死亡

所以,当我们启动javaFX程序,会进行以下步骤

技术分享图片

 

 关于线程的变化

我们先在每个方法里加入得到当前线程名的代码进行测试,代码如下:

import javafx.application.Application;
import javafx.stage.Stage;

public class Life extends Application{
    public static void main(String[] args) {
        System.out.println("main() ="+Thread.currentThread().getName());
        launch(args);
    }

    @Override
    public void init() throws Exception {
        System.out.println("init() ="+Thread.currentThread().getName());
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("start() ="+Thread.currentThread().getName());
        primaryStage.show();
    }

    @Override
    public void stop() throws Exception {
       System.out.println("stop() ="+Thread.currentThread().getName());
    }
}

在还没关闭窗口前我们可以看到如下结果:

技术分享图片

 

 而当我们关闭窗口后可以看到如下结果:

技术分享图片

 

 我们可以看到当我们执行程序时,先开启mian线程,当执行init的时候,再开启JavaFX-Launcher线程,当执行start的时候再开启JavaFX Application Thread线程,随后直到关闭窗口线程才结束

技术分享图片

 

javaFX学习01:关于调用launch方法的内部过程以及线程变化

原文:https://www.cnblogs.com/zengyuxiang/p/12632436.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!