在Windows上调用函数关闭

时间:2013-03-19 12:14:07

标签: java swing jframe awt windowlistener

使用Java:我使用netbeans GUI构建器构建了一个GUI。

GUI类是通过扩展jFrame

创建的

public class ArduinoGUI extends javax.swing.JFrame

并使用以下方式显示GUI:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {                    
        new ArduinoGUI().setVisible(true);                    
    }
}

因此我没有一个实际的框架对象可以调用frame.,所以在这种情况下如何覆盖windowClosed函数,因为我必须调用一个特定的函数来整理应用程序退出前的串行连接。

编辑:这里是明确的代码,如下所示:

@Override
public void processWindowEvent(WindowEvent e) {
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
        arduino.close();
        System.out.println("Arduino Close()");
        dispose();
    }

2 个答案:

答案 0 :(得分:4)

你可以在windowClosing方法上调用你的函数..

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

class WindowEventHandler extends WindowAdapter {
  public void windowClosing(WindowEvent evt) {
    System.out.println("Call your method here"); 
  }
}

public class TJFrame {

  public static void main(String[] args) {
    JFrame frame = new JFrame("Swing Frame");

    JTextBox label = new JLabel("This is a Swing frame", JLabel.CENTER);

    frame.add(label);

    frame.addWindowListener(new WindowEventHandler());
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setSize(350, 200); // width=350, height=200
    frame.setVisible(true); // Display the frame
  }

}

答案 1 :(得分:2)

如果你还没有在你的类(它是JFRame的子类)中创建“processWindowEvent”方法。该方法将WindowEvent对象作为参数。在该方法中添加一个if块,如下所示:

if(e.getID() == WindowEvent.WINDOW_CLOSING){

    //...Do what you need to do just before closing

}

e是WindowEvent对象传递给方法的参数。