2

我正在尝试将一个简单的 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

一旦我将脚本打包到一个 JAR 中warble,当我执行时:

java -jar jtest.jar

... JFrame 窗口出现并立即关闭。

没有任何错误的迹象。

有谁知道为什么会这样?

4

2 回答 2

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

哈克,但它的工作原理。

于 2012-04-28T18:08:25.400 回答
1

只需设置适当的标志:

System.setProperty("warbler.skip_system_exit","true");
于 2014-03-23T10:50:19.823 回答