我需要從ShutdownHook調用非靜態方法removeLocksOnExit()
。 該方法在main中的同一個類中聲明。從ShutdownHook調用非靜態方法
在主我有以下代碼:
//final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// remove lock file...
removeLocksOnExit();
}
});
()不能被decared靜態的,因此我canot從新線程直接調用它的removeLocks。
主類包含但在窗口關閉的行動列表,也調用該方法。這裏是代碼的摘錄:
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (exit() == 0) {
removeLocksOnExit();
log.info("END");
System.exit(0);
}
}
});
也許我可以從addShutdownHook那麼觸發窗口關閉事件。而這個會調用我前面的函數。 (或創建爲宗旨,以緩存的特別活動......
是否可行?如果是的話你會如何觸發事件?
有一個更好的瞭解,這裏是我的類的結構:
public class IEPLC_Tool extends JFrame{
removeLocksOnExit(){
....
...
}
public static void main(String[] args) {
...............
.........
//final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// remove lock file...
removeLocksOnExit();
}
});
}
final IEPLC_Tool inst = new IEPLC_Tool(args);
IEPLC_Tool(String[] args) {
super(CustomPathModel.IEPLC_TITLE);
setResizable(false); // FIXME find a way to auto size inner xml-editor
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (exit() == 0) {
removeLocksOnExit();
log.info("END");
System.exit(0);
}
}
});
setLookFeel();
initAdminStatus();
initGUI();
addFesaToolActionListener(this);
}
}
如果您可以從窗口關閉事件調用的匿名內部類中調用該方法,則可以從作爲關閉鉤子一部分調用的匿名內部類調用該方法。有什麼問題讓你覺得你不能?這是一個例外嗎? – parsifal
創建對象並調用yourObject.removeLocksOnExit()是否可行? –
等待...我重組了一下代碼...也許會更容易理解...給我2分鐘: – Stefano