我正在尝试使用fxcanvas将javafx集成到swt应用程序中。作为参考,我遵循这个甲骨文指南
在我的ide中,这段代码显示一个错误
/* Create an FXCanvas */
final FXCanvas fxCanvas = new FXCanvas(shell, SWT.NONE) {
@Override
public Point computeSize(int wHint, int hHint, boolean changed) {
getScene().getWindow().sizeToScene();
int width = (int) getScene().getWidth();
int height = (int) getScene().getHeight();
return new Point(width, height);
}
};
错误:
(是,我已导入正确的point类: org.eclipse.swt.graphics.Point
):
'computeSize(int, int, boolean)' in 'Anonymous class derived from javafx.embed.swt.FXCanvas' clashes with 'computeSize(int, int, boolean)' in 'javafx.embed.swt.FXCanvas'; attempting to use incompatible return type
然而,我不认为这是根本原因。。。因为当我尝试构建项目(maven)时,我会遇到以下错误: package javafx.embed.swt does not exist
. 我相信这才是真正的问题。
所以在做了一些研究之后,我检查了一些事情,首先,jfxswt jar看起来应该是可以访问的:
如果我打开jar,你会看到:
我甚至尝试将jar作为库手动添加到我的模块中,但仍然不起作用。
这是我的pom.xml,(我有意匿名提供某些信息)
我还将提到,我已经在一个没有任何maven依赖关系的新项目中尝试过这种方法,并且只是手动添加swt和类似的库,但出现了相同的错误。
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</parent>
<artifactId></artifactId>
<version>2.0.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name></name>
<description></description>
<dependencies>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-ui-swt</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>jface</artifactId>
<version>3.3.0-I20070606-0010</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
</project>
我遗漏了什么,有什么想法吗?
1条答案
按热度按时间vlurs2pr1#
您需要添加
jfxswt.jar
文件到类路径进行编译和执行。这可以通过使用系统作用域来实现,因为jar文件是jdk的一部分
jre/lib
目录。这将指示maven添加
jre/lib/jfxswt.jar
到类路径。这可能会导致一个问题,如果有人使用不同的jdk什么有jar在其他地方,但对于java8你应该没事。你必须加上
jfxswt.jar
当你执行应用程序时,你的类路径。在maven中,您可以使用exec插件:
笔记:
在maven中,不赞成使用系统作用域,而赞成将文件安装到存储库中。上述解决方案目前效果良好。
的内容
jfxswt.jar
可能是一些swt库的一部分不幸的是我不熟悉swt。如果您可以在maven repo中找到这个jar,那么就不要只包含它,而不要弄乱系统范围。这个
twobuttons.TwoButtons
课程来自你提到的教程。