JRuby script with Rubeus and Swing exiting once packaged into jar using warble

独自空忆成欢 提交于 2019-12-30 11:02:00

问题


I am trying to package a simple JRuby script into a jar file. The script uses Rubeus::Swing and runs correctly when executed with the JRuby interpreter.

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

Once I package the script into a JAR with warble, when I execute:

java -jar jtest.jar

... the JFrame window shows up and instantly closes.

There is no indication of errors of any kind.

Does anyone know why this happens?


回答1:


Warbler calls System.exit() after your main script exits. This causes the Swing EventThread to exit, closing your app.

https://github.com/jruby/warbler/blob/master/ext/JarMain.java#L131

I worked around this problem by joining with the event thread at the bottom of my start script like so:

event_thread = nil
SwingUtilities.invokeAndWait { event_thread = java.lang.Thread.currentThread }
event_thread.join

Hacky, but it works.




回答2:


Just set the appropriate flag:

System.setProperty("warbler.skip_system_exit","true");


来源:https://stackoverflow.com/questions/10108822/jruby-script-with-rubeus-and-swing-exiting-once-packaged-into-jar-using-warble

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!