IDEA中JDK11使用JavaFX的相关问题

原创
2019/08/05 23:05
阅读数 6.5K

突发奇想的研究了一波在JDK11上跑JavaFX

  • 遇到的第一个问题,怎么用maven来处理JavaFX的依赖关系
    • 习惯使用maven所以第一想到的就是用maven处理JavaFX于是在某个群里问了一下JavaFX的maven依赖的一个重要指标
    	<groupId>org.openjfx</groupId>
    
    • 于是乎在maven中央仓库找这个,发现了一组很有节奏感的包
    • 点了一个进去看了下,发现版本号跟JDK版本号类似,于是调出了不知道什么时候丢在记忆角落里的一句话,FX版本跟随JDK版本,但经发现JDK11也可以使用FX12的库
    • 下面是所有FX的依赖,当然版本号嘛自己用哪个自己去仓库看,下面贴一波JDK环境
<properties>
	<fx.version>12.0.2</fx.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.openjfx</groupId>
		<artifactId>javafx-base</artifactId>
		<version>${fx.version}</version>
	</dependency>

	<dependency>
		<groupId>org.openjfx</groupId>
		<artifactId>javafx-graphics</artifactId>
		<version>${fx.version}</version>
	</dependency>

	<dependency>
		<groupId>org.openjfx</groupId>
		<artifactId>javafx-controls</artifactId>
		<version>${fx.version}</version>
	</dependency>

	<dependency>
		<groupId>org.openjfx</groupId>
		<artifactId>javafx-media</artifactId>
		<version>${fx.version}</version>
	</dependency>

	<dependency>
		<groupId>org.openjfx</groupId>
		<artifactId>javafx-web</artifactId>
		<version>${fx.version}</version>
	</dependency>

	<dependency>
		<groupId>org.controlsfx</groupId>
		<artifactId>controlsfx</artifactId>
		<version>11.0.0</version>
	</dependency>

	<dependency>
		<groupId>com.jfoenix</groupId>
		<artifactId>jfoenix</artifactId>
		<version>9.0.9</version>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.1</version>
			<configuration>
				<source>11</source>
				<target>11</target>
			</configuration>
		</plugin>

		<plugin>
			<groupId>org.openjfx</groupId>
			<artifactId>javafx-maven-plugin</artifactId>
			<version>0.0.3</version>
			<configuration>
				<mainClass>启动类完全限定名</mainClass>
			</configuration>
		</plugin>
	</plugins>
</build>

实在跑不起来时用此下面的方法

  • 写完这个后只能说创建个空白窗口是可以运行的,但是只要一放组件就绝对报一大波错误,其中有一条一定是跟模块无法访问有关,跟模块有关,
  • 哪么就是JDK版本的模块化问题啦,首先应该想到怎么去访问模块,于是进行一波下面的设置,这个设置文件是module-info.java我是把它放在src/main/java下的
// login是我的工程名,当然在idea中工程也是一个模块,所以也可以说是某个自己创建的模块名
module login {
	requires javafx.base;
	requires javafx.controls;
	requires javafx.graphics;
	// 下面注释掉的在网上有个人解释是暴露这个模块给某些模块访问,这个方法是可行的,我试过了
	// opens cn.lotus.app to javafx.graphics,javafx.controls,javafx.base;
	// exports这个是将某个包导出去,感觉跟上面的opens效果差不多,可能是写得不够多吧,
	// 个人习惯用这种方法,如果没有写opens或exports是运行不了程序的
	exports cn.lotus.app;
}

效果图

展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部