[英]External java program: Handle SIGTERM
我有一個在主機上運行的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程序的這種方法。
非常感謝你。
最好的問候凱文
嘗試對應用程序進行模糊處理。 在這里看看(2009)-用於反混淆Java代碼的工具 。
也許可以解析源代碼,以便您能夠更深入地挖掘源代碼並進行編譯。
否則,從包裝應用程序外部插入基於Swing的ui事件隊列非常復雜。
也許您可以反編譯主類,並用自己的主類替換其主方法,並添加一個shutdownhook
請參見: Java中的shutdown鈎子的有用示例? 該方法調用onClose(反混淆)方法。
無論如何,這是一個有趣而充滿挑戰的問題!
使用main方法創建自己的類,該方法將安裝關閉鈎子以在關閉前進行保存。 然后調用原始程序的main方法。 將其添加到jar並使用此類啟動程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.