java - 通过 GTK 的 jar 在 Java 中创建 gnome GUI:CLASSPATH 问题
问题描述
我试图运行一个简单的 java-gnome 窗口。
我遵循示例代码中的代码步骤
import org.gnome.gdk.Event;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.gtk.WindowPosition;
public class GdkSimple extends Window {
public GdkSimple() {
setTitle("Example");
connect((DeleteEvent)(source, event) -> {
Gtk.mainQuit();
return false;
});
setDefaultSize(250, 150);
setPosition(WindowPosition.CENTER);
show();
}
public static void main(String[] args) {
Gtk.init(args);
new GdkSimple();
Gtk.main();
}
}
我觉得我错过了一些非常基本的东西。我正在使用ideaJ。我可以使用此命令通过 IDE 运行代码
java -classpath /home/theUser/.sdkman/candidates/java/java8u202/jre/lib/charsets.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/deploy.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/cldrdata.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/dnsns.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/jaccess.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/jfxrt.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/localedata.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/nashorn.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/sunec.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/sunjce_provider.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/sunpkcs11.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/ext/zipfs.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/javaws.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/jce.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/jfr.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/jfxswt.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/jsse.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/management-agent.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/plugin.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/resources.jar:/home/theUser/.sdkman/candidates/java/java8u202/jre/lib/rt.jar:/usr/share/java/gtk-4.1.jar:/home/theUser/workspaces/workspace/java/native/gtk-demo-1/lib/gtk-4.1.jar:/home/theUser/workspaces/workspace/java/native/gtk-demo-1/target/gtk-demo-1-1.0-SNAPSHOT.jar com.gtkdemo.Main
但是我正在努力通过 Maven 将这个 jar 添加到我的类路径中。我已经厌倦了使用的方法system
<dependency>
<artifactId>gtk</artifactId>
<groupId>org.gnome.</groupId>
<version>4.1</version>
<scope>system</scope>
<systemPath>${basedir}/lib/gtk-4.1.jar</systemPath>
</dependency>
它能够构建 jar,但是当我尝试运行它时它失败了
➜ gtk-demo-1 git:(master) ✗ java -jar ./target/gtk-demo-1-1.0-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/gnome/gtk/Gtk
at com.gtkdemo.Main.main(Main.java:12)
Caused by: java.lang.ClassNotFoundException: org.gnome.gtk.Gtk
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
我尝试过的方法,
- maven 依赖插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>
com.gtkdemo.Main
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
- maven-shade-插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<transformers>
<transformer implementation=
"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.gtkdemo.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
- onejar-maven-插件
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<executions>
<execution>
<configuration>
<mainClass>com.gtkdemo.Main</mainClass>
<attachToBuild>true</attachToBuild>
<filename>
${project.build.finalName}.${project.packaging}
</filename>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
- maven-jar-plugin,尝试添加类路径
- 制作本地仓库并尝试加载https://www.thebugger.us/#/blog/Helloworld%20for%20GTK%20on%20Debian+Java%20/6
让我知道我们是否需要上述每个尝试的样本。
解决方案
推荐阅读
- javascript - 无法使用 frida 从接口检索值
- javascript - 如果设置的 cookie 存在,则设置 cookie 以重定向用户
- android - 为什么应用程序shell不能在android中使用`content`命令,它会抛出NullPointerExecption
- python - 更新 Combo 的默认值
- elasticsearch - 如何从 Scylladb 批量获取数据?
- html - 表单元素未对齐
- node.js - Jest 没有涵盖我的自定义错误类中的超级调用
- python - 如何使用 requests-html 检索非缓存页面?
- powerbi-desktop - Power BI:如何使用 +/-St 创建滚动平均值。开发。乐队
- javascript - 剥离字符串开头或结尾的字符