网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月05日漏签0天
javafx吧 关注:3,681贴子:7,195
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 3回复贴,共1页
<<返回javafx吧
>0< 加载中...

[JavaFX详解篇] Application类 实例部分

  • 只看楼主
  • 收藏

  • 回复
  • 我是莫得感情
  • 星光闪耀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
说到继承Application之后,对自己的程序进行初始化, 大家通常会使用那种方式呢?
是在构造方法里进行初始化?
是在实现show的方法里进行初始化?
不过在本专题里我们将介绍一种新的初始化方式,在继承Application类后,我们发现里面其实存在着一个方便我们进行初始化的方法,只不过需要我们手动重写而已,方法的原型:

不需要担心此方法的时效性,他在JavaFX将我们的类实例化后会立刻被调用。
那如何在程序结束后完成资源的释放?有的人可能会说:在那里调用的launch方法,就在那里的launch后进行处理。
这样的说法确实没错,但除了这种,我们仍然有着更优雅的处理方式,就如同init方法一样,Application也贴心的为我们创建了一个需要手动重载的Stop方法,方法原型:

而且令人惊喜的是,与init一样,这个方法会在JavaFX线程中被调用。
然后就是show方法,这个方法就是对窗体的初始化部分而已,所以在此将不多做介绍(有想了解的可以提出)。
在JavaFX中有这么一个方法,他会创建并返回一个HostServices对象。

在开始介绍这个方法之前,我先问大家几个问题。
1.你是否苦于寻找当前程序的目录?
2.你是否还在使用Runtime.getRuntime().exe()来启动其他程序?
没关系,贴心的HostServices会解决一切!
它拥有以下方法:
getCodeBase()
如果此程序被打包为了Jar(war不知道,没测试过),那么此方法将会返回包含此Jar的目录地址,格式为uri的格式,不过如果程序没有被打包为Jar则会返回空字符串,这个特性注定了它不一般,可以用来分辨自己是否为jar。
getDocumentBase()
实测应该是获取当前程序的工作目录,格式同样是uri
resolveURI(String base, String rel)
此方法接收两个参数,一个是String格式的uri,一个是String格式的文件名称
它会返回一个经过拼接之后的新的Uri,说实话感觉不如File类。
showDocument(String uri)
伟大,无需多言!这个uri可以是任何东西,可以是应用程序,可以是文件路径,甚至可以是网址。
如果是程序路径或者系统命令,则会直接调用。
如果是文件会打开对应绑定了此文件打开格式的应用,比如记事本。
如果是目录会直接在资源文件管理器打开。
如果是网址则会打开电脑的浏览器。
可以说是及其的逆天和强大!
关于此类的更加详细的介绍可以参考官方的注释!
让我们来介绍今天最后一个方法吧!
在调用Application的launch方法时不知道大家有没有想过一件事情,为什么它要接受一个args作为参数?
难道是它另有所求?
其实这都是官方对我们无微不至的照顾!
大家在使用别的控制台应用的时候有没有好奇过一件事情,他们的指令是如何被正确解析的?是他们艺高?是他们使用了第三方库?
就算是,在我看来:不如getParameters()方法体贴!
在所有人认为官方不打算对我们的参数进行传递的时候,getParameters()方法站了出来。
此方法故名思意,返回一个参数对象,这个参数是官方已经帮助我们处理完成了的参数对象。
但看官方的介绍,xmd有的可能头晕目眩,就差睡着了!
接下来就随着我,来一步一步学会使用此类,走上程序巅峰!
首先向我们走来的是getRaw(),它返回一个List<String>集合作为参数,内容为我们传入的args的内容,此方法看起来平平无奇,也不是我们介绍的重点。
重点是getNamed()方法,它会返回一个命名的参数,其结构为Map<String,String>键值对,那么什么是命名的参数呢?
在此程序的定义里,所有的以“--”开头 + 任意字符串 + "="的都属于是命名参数,如:”--username=john“
这个参数可以只为:”--username=“,不过在获取键值的时候返回的会是一个空的字符串就是了!
而另一个方法getUnnamed()返回的是一个List<String>,意思是返回未命名的参数。
举个例子吧!
"--username=john --password=123456 doe"中,password与username都属于命名参数,而末尾的doe则是未命名的参数.
通过上面的介绍,大家对参数类有了更加详细的了解,它可以帮我们不用任何第三方库的情况下对运行参数进行解析,还是那句话:伟大,无需多言!


讲完这些,便是Application的全部内容了。
不过如果真有去翻阅代码的人应该注意到其实我还少了一个方法的讲解,这个方法的内容其实相当难评价。
我并不是不准备去讲,相反,我会在后面重新开一个帖子甚至是视频去讲解。
我没在开玩笑,这个notifyPreloader(PreloaderNotification info)方法,如果要讲解得做很多前置的工作...
最后感谢大家的支持,最近在升级七级,精选吧主,重振JavaFX吧荣光,我辈义不容辞!


  • 我是莫得感情
  • 星光闪耀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
完哩,我说错了东西,注意!!!!!!
init方法确实实在JavaFX线程,不过是在JavaFX-Launcher线程,不是JavaFX Application Thread,注意,在JavaFX-Launcher线程里初始化ui仍然会导致出现报错!!!
但是stop方法我说的没有问题,stop方法确实运行在JavaFX Application Thread,大家可以放心使用!!!


2025-08-05 04:05:43
广告
不感兴趣
开通SVIP免广告
  • 我是莫得感情
  • 星光闪耀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
说实话,我是很疑惑的,我之前想当然认为既然对象实例化时位于JavaFX Application Thread,那么官方说的立刻调用为什么会在JavaFX-Launcher线程,这很逆天!
官方原话:
This method is called immediately after the Application class is loaded and constructed.
但是我也没注意到后面的提示:
NOTE: This method is not called on the JavaFX Application Thread.
我的问题,我打马虎眼了


  • 我是莫得感情
  • 星光闪耀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回javafx吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示