当前位置: 首页 > 知识库问答 >
问题:

在SWT中处理关闭红色X按钮的问题

乌灿
2023-03-14

我有一个关于右上角红色按钮关闭应用程序(Windows 7)的快速问题...我在Java中编程了ServerSocket,但当我使用此关闭按钮关闭应用程序时,服务器会继续运行...我想捕获此事件(如果可能),并确保当按下此按钮时,包括ServerSocket在内的整个程序都已关闭。

这是一段代码,我认为我必须修改以捕捉这一事件。。。

public static void main(String[] args) {
    try {
        new Server().startServer();
        Window1 window = new Window1();
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}


/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

任何帮助都将不胜感激。。。谢谢

共有2个答案

蓝夕
2023-03-14

您可以将WindowListener附加到它并将您需要做的任何事情放在windowCandy()方法中。

public class Test implements WindowListener {
public static void main(String[] args) {

}

public Test() {
    final JFrame frame = new JFrame();
    frame.addWindowListener(this);
}

@Override
public void windowOpened(WindowEvent e) {

}

@Override
public void windowClosing(WindowEvent e) {
    //handle window closing, close socket, etc
}

@Override
public void windowClosed(WindowEvent e) {

}

@Override
public void windowIconified(WindowEvent e) {

}

@Override
public void windowDeiconified(WindowEvent e) {

}

@Override
public void windowActivated(WindowEvent e) {

}

@Override
public void windowDeactivated(WindowEvent e) {

}

}

阴永福
2023-03-14

在您的Display上监听SWT.关闭并在此Listener中关闭服务器:

public static void main(String[] args) {
    try {
        new Server().startServer();
        Window1 window = new Window1();
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static void shutdownServer()
{
    /* Shutdown your server here */
}

/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();

    display.addFilter(SWT.Close, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            shutdownServer();
        }
    });

    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}
 类似资料:
  • 当用户使用窗口关闭按钮(红色X)按钮关闭任何应用程序窗口时。它会导致我的应用程序出现小部件被释放问题。当他们使用我提供的关闭应用程序关闭窗口时。一切正常。 按下车窗关闭按钮(红色X)可以使用上述代码吗

  • 作为Java的新手,多年的iOS和。NET的经验,我发现这是非常令人困惑。我想要的是一个非常简单的对话框(从主窗口调用),带有OK和Cancel按钮。单击“确定”时,它会执行一些操作,然后关闭对话框。单击“取消”时,它只会取消对话框。 然而,使用SWT shell对话框类来实现这一点并不明显。如何获得一个按钮来关闭对话框,并将执行返回到主窗口?

  • 我想创建一个像图片一样的按钮。我是颤动的初学者,所以我不知道如何开始。让我补充一点,我想为按钮添加一个红色发光效果。

  • 我有一个Jframe窗口,里面有一个按钮。通过单击该按钮,它将打开一个新的JFrame窗口。但是当我关闭这个窗口时,它会自动用按钮关闭第一个Jframe窗口。当我关闭第二个Jframe窗口时,如何防止第一个Jframe窗口关闭?

  • 问题内容: 当我在Turtle图形中运行无限循环绘图时单击X(关闭)按钮时,会出现一些错误消息。 这是一个例子: 当我关闭窗口时,将显示以下错误消息。 我想知道如何避免此类错误消息。 有什么方法可以将tkinter模块中Tk类的“协议”方法与“ WM_DELETE_WINDOW”选项一起使用? 问题答案: 是的,确实可以通过注册一个函数(我称它为,但是您可以选择任何函数名)来拦截窗口关闭事件,从而

  • 问题内容: 对于我的应用程序,我需要空格键才能在应用程序中的任何位置(但仅在根据选项卡打开的情况下)调用独立于焦点小部件的函数。我发现可以向显示添加过滤器,如下所示: 在大多数情况下,这种方法都能正常工作,但是如果我通过“选项卡”或“移位选项卡”为按钮提供焦点,则有点奇怪- 空格键将激活“按下的按钮”,就好像单击该按钮时鼠标。我现在有点卡住了,我不知道该如何避免…对于按钮,我已经实现了Select