作者:袁乐天
最后修改日期2019-12-06
转载请注明出处,未经允许的转载本人将追究其法律责任。
intellij中用java12(或13)编写javafx应用程序
——什么?你要用javafx编写界面?吃饱了撑的?用Visual Studio编窗体不香吗?用unity写游戏不香吗?
——什么?这是学校课程要求的?
——好吧,那么我们首先打开intellij……
——什么?你说你要用java12编写javafx?为什么不用java1.8(java1.8即java8)?java1.8内置javafx库,而java12没有内置javafx库。你是想给自己找麻烦?
——哦,原来是这样,你确实想给自己找麻烦。
好吧,我们首先去下载javafx的库,
先去访问官网https://openjfx.io/,去下载javafx的sdk,将其安装好
如果你嫌外国网站访问慢的话,我个人百度网盘账号提供了sdk11.0.2的分流,
https://pan.baidu.com/s/1y4X6FyLNtWu9HYGWODYTGQ
提取码:wuar
(本网盘资源供学习交流,如果有任何侵权行为,我会立即下架)
将压缩包解压到某个文件夹(建议解压在C:\Program Files\Java\文件夹中,之后的教程我将全部以这个路径作为示例!),如图
然后我们打开intellij,点击“create new project”,由于你用的是java12去编写javafx,那么其实intellij自带的javafx模板就不存在任何意义了,所以我们在左侧直接选择java就行了,不需要去选择javafx
新建项目之后,点击File -> Project Structure,在左侧点击Libraries,点击上方加号,点击加号出来的下拉框中的Java,选中你刚刚解压缩的javafx-sdk-11.0.2\lib的这个文件夹的位置,注意,选中的是lib文件夹的位置,点击OK,再点击OK,就导入好javafx的库了!
如图,可以看见External Libraries中有javafx的库了!
接下来我新建一个Test包,新建了一个Main.java
填写了如下代码
package Test;
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage stage)
{
stage.show();
}
}
点击运行!诶?报错了?
错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
因为我们还需要填写VM Option(不知道什么是VM Option的童鞋自己百度去)
点击Run -> Edit Configurations,在VM Option里填写
--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.fxml
注意:如果你没有按照我这边来选择javafx-sdk的路径,请你在–module-path后面填上自己的路径
然后点击OK,开始运行!
成功了!成功了!有界面出来了!
好,我们来尝试播放一段音乐,这段音频位于D:\sound.wav
package Test;
import javafx.application.Application;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class Main extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage stage)
{
Media media = new Media("file:/D:/sound.wav");
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
}
}
点击运行!
卧槽,这么一长串报错是什么东西!?
这就是网上许多配置java12编写javafx给你埋的坑,这个错误跟你的代码没有任何关系,只是因为你的VM Option里没有导入javafx.media的包
网上许多教程指导你在VM Option里填写
–module-path “C:\Program Files\Java\javafx-sdk-11.0.2\lib” --add-modules=javafx.controls,javafx.fxml
瞧瞧,导入javafx.media的模块了吗?根本没有啊!
所以,我们要将VM Option改成
--module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.fxml,javafx.media
这样便能正常播放音频了!
所以,当你用到javafx某个模块的时候,在VM Option里导入即可
注意事项
配置环境就讲好了,另外编写javafx仍然有许多的坑!
1.不要写相对路径
很多人都喜欢把picture.jpg放在包目录下,然后写
Image image = new Image("picture.jpg");
或者是类似于下面这样来获取路径文件
this.getClass().getResource("").getPath();
这样子做是正确的,但是打包成exe或者是jar时,会导致无法运行,因为jvm根本无法获取你的这个文件
我推荐的做法是
String projectPath = System.getProperty("user.dir");//获取out文件夹所在路径或.exe,.jar所在文件夹的路径
Image image = new Image("file:/" + projectPath + "/picture.jpg");
2.路径中不要写反斜杠
很多人都用windows系统,喜欢这么写
String projectPath = System.getProperty("user.dir");//获取out文件夹所在路径或.exe,.jar所在文件夹的路径
Image image = new Image("file:\\" + projectPath + "\\picture.jpg");
当然,编译也能通过,也能正常运行。
但是,将你的代码放到linux系统或者是mac系统上就根本跑不起来了,因为这俩系统上的路径不是用反斜杠表示的,所以,请用正斜杠
intellij中如何用java1.8编写javafx
用jdk1.8的话,javafx sdk不用导入,VM Option也不用填写,非常方便。
我们略去jdk1.8的安装
记住三个地方的配置即可!
第一个地方
File -> Project Structure,在左侧点击Project,将右侧的Project SDK改为1.8(如果下拉栏里没有,点击右边的New按钮添加你的jdk1.8的位置)
并将右侧的Project language level改为“SDK default”或者“8”
第二个地方
File -> Project Structure,在左侧点击Modules,点击右侧Source,将Language level改为“Project default”或者“8”
点击右侧Dependencies,将Module SDK改为“8”
第三个地方
File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
在右侧的Project bytecode version中什么都不写(这样便是“Same as language level”)或者改为“8”