当前位置: 首页 > 面试题库 >

使用Warble打包到jar中后,退出Rubeus和Swing的JRuby脚本退出

冷宏茂
2023-03-14
问题内容

我试图将一个简单的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窗口出现并立即关闭。

没有任何错误的迹象。

有谁知道为什么会这样吗?


问题答案:

主脚本退出后,莺莺会调用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

哈克,但它可以工作。



 类似资料:
  • 问题内容: 我正在通过Jenkins构建Qt GUI应用程序。我添加了3个构建步骤: 构建测试可执行文件 运行测试可执行文件 用gcovr编制覆盖率报告 由于某种原因,用于运行测试可执行文件的shell任务在执行后会停止。即使是简单的也不运行。测试是使用Google Test编写的,并输出xUnit XML文件,这些文件将在构建后进行分析。一些测试启动了应用程序的用户界面,因此我安装了jenkin

  • 问题内容: 当我们运行程序时,我们应该能够退出Python Interpreter和Terminal本身。但是它仅退出python解释器,而不退出终端。 提前致谢。 问题答案: (挂断)将告诉终端退出。终端应该是您脚本的父进程,因此

  • 我正试图按照以下说明为Dash生成文档集:http://kapeli.com/docsets.问题是,脚本在wget之后不会继续,并且似乎不会抛出任何错误。当我把脚本复制到终端时,一切都很好。 我使用的是MacOS 10.8.4和默认的bash。 我查看了其他帖子,比如我的shell脚本在exec之后停止,但我没有在这里使用exec。 为什么脚本退出?

  • ...there are dark corners in the Bourne shell, and people use all of them. Chet Ramey exit 命令一般用于结束一个脚本,就像C语言的exit一样。它也能返回一个值给父进程。 每一个命令都能返回一个退出状态(有时也看做 返回状态 ).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值,此值通常可以被解释

  • SBT版本:0.13.11添加到plugins.SBT中:addSbtPlugin(“com.typesafe.SBT”%“sbt-native-packager”%“1.3.4”) 在build.sbt中,添加了以下内容:lazy val root=(project In file(“.”))。enablePlugins(DebianPlugin)

  • 在退出脚本(TCL/Bash)之前,如何确保所有后台进程都已完成执行。 我想把我所有的后台进程PID写到一个pidfile中。然后在最后pgrep PID file,看看在我退出之前是否还有进程在运行。 有什么更简单的方法吗?而TCL有没有具体的办法做到这一点呢?