【问题标题】:External java program: Handle SIGTERM外部 java 程序:句柄 SIGTERM
【发布时间】:2014-10-09 23:56:24
【问题描述】:

我有在主机上运行的 java 程序(带有 gui)。在运行时,用户可以添加一些数据记录。该程序只适用于他们。

稍后系统可能会关闭或程序刚刚被 SIGTERM 关闭。

不幸的是,如果用户用“X”手动关闭,porgram 似乎只存储数据记录。

现在我有一个问题,如果程序被 SIGTERM 关闭,我可能会丢失一些数据。不幸的是,没有联系电子邮件地址要求作者进行更改。

我尝试使用“jd gui”对其进行反编译,这似乎或多或少地起作用。我想我可以添加信号处理程序并调用“窗口关闭”方法。

但是“jd gui”创建了这样的代码:

/* 110:269 */       if ((??? = Thread.currentThread().getContextClassLoader()) != null) {
/* 111:270 */         return ???;

如果我尝试编译源代码,我还会遇到许多其他错误。

我认为这是因为 jar 文件被某些工具混淆了。不幸的是,反编译的代码不起作用,我无法使用 JFrame 重新编译文件。

长话短说: 是否可以编写一个“包装程序”,它只处理 SIGTERM,然后调用主框架(这是唯一的 JFrame)的 JFrame“关闭方法”(或如何调用它)?

我只是不知道如何调用外部运行的java程序的这种方法。

非常感谢。

最好的问候 凯文

【问题讨论】:

    标签: java swing signals sigterm


    【解决方案1】:

    使用 main 方法创建您自己的类,该方法会在关闭前安装关闭挂钩以保存。然后调用原始程序的 main 方法。将此添加到 jar 并使用此类启动程序。

    【讨论】:

      【解决方案2】:

      尝试对应用程序进行去混淆处理。看看这里(2009) - Tool to deobfuscate Java codes

      也许可以解决源,以便您能够更深入地挖掘 源并编译它。

      否则,从包装应用程序外部挂钩到基于 Swing 的 ui 事件队列是相当复杂的。

      也许你可以反编译主类并用你自己的替换它的主方法 添加一个shutdownhook 请参阅:Useful example of a shutdown hook in Java? 调用 onClose(反混淆)方法。

      无论如何,一个有趣且具有挑战性的问题!

      【讨论】:

      • 感谢您提供反混淆 java 代码的工具。它真的帮助我理解了代码是如何工作的(以及如何编写钩子)。谢谢:)
      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多