我正在尝试将一个简单的JRuby脚本打包到一个jar文件中。 该脚本使用 Rubeus :: Swing ,并在使用JRuby解释器执行时正确运行。
require 'rubygems'
require 'rubeus'
class Example01
extend Rubeus::Swing
def show
JFrame.new("Rubeus Swing Example 01") do |frame|
frame.visible = true
end
end
end
Example01.new.show
一旦我将脚本打包到warble
的JAR中,当我执行:
java -jar jtest.jar
... JFrame窗口显示并立即关闭。
没有任何错误的迹象。
有谁知道为什么会这样?
答案 0 :(得分:7)
Warbler在主脚本退出后调用System.exit()。这会导致Swing EventThread退出,关闭您的应用程序。
https://github.com/jruby/warbler/blob/master/ext/JarMain.java#L131
我通过加入启动脚本底部的事件线程来解决这个问题,如下所示:
event_thread = nil
SwingUtilities.invokeAndWait { event_thread = java.lang.Thread.currentThread }
event_thread.join
Hacky,但它确实有效。
答案 1 :(得分:1)
只需设置相应的标志:
System.setProperty("warbler.skip_system_exit","true");