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关闭,我看到..

NhkDt.png

更有趣的是,在我点击取消 kbd>之后(哎呀,'搜索UFO'是播放器中的下一个排队轨道,而我不打算重新安排它:),我无法点击框架。似乎它被一个看不见的模态对话框阻挡了。我不得不杀死VM以摆脱它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值