Java Windows注销用户,中止Windows从Java注销
EDIT2
對于那些跟隨討論的人,我留下了我的第一個答案,但似乎他們沒有工作。首先找到我的真正解決方案
好吧,所以我認為這實際上有效,但它并不完全可以接受,因為它使用了受限制的API部分(但它自Java 1.3以來就存在并且仍然存在于Java 1.7中)。它使用sun.misc.Signal。大部分代碼最初由Andrew Thompson發布。
import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import sun.misc.Signal;
import sun.misc.SignalHandler;
class TestShutDown {
static final String WINDOW_MODIFIED = "windowModified";
TestShutDown() {
final JFrame f = new JFrame("Log Off!");
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
System.err.println("Window closing");
handleQuit(f);
}
});
Signal.handle(new Signal("TERM"), new SignalHandler() {
@Override
public void handle(Signal arg0) {
handleQuit(f);
}
});
// bad practice, but not the point..
f.setSize(400, 200);
f.setLocationByPlatform(true);
f.setVisible(true);
}
protected static void handleQuit(final JFrame f) {
int result = JOptionPane.showConfirmDialog(f, "Close Me");
if (result == JOptionPane.OK_OPTION) {
System.exit(0);
}
}
public static void main(String[] args) {
// start the GUI on the EDT
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestShutDown();
}
});
}
}
解決方案早期建議(不要在LOGOFF上工作)
我假設您正在使用帶有JFrame的GUI應用程序。
在您的JFrame中,設置以下內容:
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);然后,在您的JFrame上注冊WindowAdapter。覆蓋windowClosing()方法并從那里打開一個阻止對話框,詢問用戶他想做什么(是/否/取消)。如果他選擇,是的,你保存然后丟棄框架,如果他選擇否,你只需丟棄框架。如果他選擇取消,你什么都不做。
編輯:
這里有一些代碼和更多關于我正在解釋的內容以及Andrew Thompson帶來的細節。以下所有學分應歸他所有:
使用此代碼:
import java.awt.event.*;
import javax.swing.*;
class TestShutDown {
TestShutDown() {
final JFrame f = new JFrame("Log Off!");
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
int result = JOptionPane.showConfirmDialog(f, "Close Me");
if (result==JOptionPane.OK_OPTION) {
System.exit(0);
}
}
});
// bad practice, but not the point..
f.setSize(400,200);
f.setLocationByPlatform(true);
f.setVisible(true);
}
public static void main(String[] args) {
// start the GUI on the EDT
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestShutDown();
}
});
}
}然后告訴Windows關閉,我看到..
更有趣的是,在我點擊取消 kbd>之后(哎呀,'搜索UFO'是播放器中的下一個排隊軌道,而我不打算重新安排它:),我無法點擊框架。似乎它被一個看不見的模態對話框阻擋了。我不得不殺死VM以擺脫它。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java Windows注销用户,中止Windows从Java注销的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php curl上传文件返回false,
- 下一篇: oracle备份 ram,Oracle备