gpt4 book ai didi

java - 从 ShutdownHook 调用非静态方法

转载 作者:行者123 更新时间:2023-11-30 04:59:44 26 4
gpt4 key购买 nike

我需要从 ShutdownHook 调用该方法的非静态方法 removeLocksOnExit()。 该方法在 main 所在的同一个类中声明。

主要我有以下代码:

//final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// remove lock file...
removeLocksOnExit();
}
});

removeLocks() 不能被声明为静态,因此我不能直接从新线程调用它。

主类包含一个关于窗口关闭的操作监听器,它也调用该方法。以下是代码摘录:

addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (exit() == 0) {
removeLocksOnExit();
log.info("END");

System.exit(0);
}
}
});

也许我可以从 addShutdownHook 触发窗口关闭事件。这个将在我面前调用该函数。 (或者创建一个特殊事件以进行缓存......

可行吗?如果是,您将如何触发该事件?

为了更好地理解这里是我的类的结构:

public class MyTool 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 MyTool inst = new MyTool(args);

MyTool(String[] args) {
super(CustomPathModel.MyTITLE);
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();
addToolActionListener(this);
}
}

最佳答案

您在构造函数中添加窗口关闭事件。也在那里添加关闭 Hook 。

请注意,但是,removeLocks 方法可能会从不同的线程调用两次。请注意它会自行清理,并且是线程安全的。还要确保在创建窗口监听器或关闭 Hook 之前,removeLocks 方法已准备好运行(即,它需要的所有变量都已初始化)

关于java - 从 ShutdownHook 调用非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7256620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com