最近,我一直在开发一个使用 GTK4 的小型 GUI 应用程序。这个 gui 应用程序使用 Java 和 Rust 的组合(我使用 jni crate 进行互操作)。
我正在使用 Rust 中的 Gtk-rs 箱创建 Gui 窗口。我有使用 JNI 调用 Rust 的 Java 代码。
编译过程非常顺利,我从 Rust 端生成一个动态库 (.so) 并将其加载到 Java 中,编译 Java 文件并创建可执行的 Java 存档。本机库是动态链接的。
但是,当我执行存档时,我收到了这个奇怪的消息:
“未知选项-jar”
什么也没有发生。
我用来执行jar文件的命令是:java -jar test.jar
我已经检查了 jar 的清单和其他所有内容,但它似乎不起作用。
我使用的是 Ubuntu,并且我获得了 GraalVM 社区版 v21.0.2 和 Rust 编译器版本 1.83。
我尝试直接按原样运行类文件而不制作jar文件,但由于某种原因主类无法加载。我还尝试使用不同的 java 编译器和运行时,但所有这些都得到相同的输出。
对此提供一些帮助会很好。
这实际上是GApplication
GtkApplication
的超类)的默认行为:
GApplication 以对大多数人来说合理的方式处理参数 应用:
不带命令行参数的调用会导致应用程序被激活(即:发出“激活”信号或 您的“激活”方法被调用) 在命令行上调用一个或多个文件名或 URI 将导致发出“open”信号(或“open”方法) 被叫)
如果 --gapplication-service 作为唯一的命令行参数给出,GApplication 将设置 G_APPLICATION_IS_SERVICE 标志并 在服务模式下运行。请参阅 HowDoI/DBusApplicationLaunching 相关信息。
如果应用程序启用它,--gapplication-app-id可用于覆盖应用程序id
如果使用 GtkApplication 那么 Gtk 特定的命令行参数将以通常的方式处理
--支持帮助
所有其他命令行标志都被拒绝
您可以通过告诉 Gtk(Glib,真的)您的应用程序将进行自己的处理来禁用此默认处理:
let app = Application::builder()
.application_id(&format!("ix.radon.guiframe.{}", &name))
.flags(ApplicationFlags::HANDLES_COMMAND_LINE) // <-- add this line
.build();