使用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();
}
答案 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对象传递给方法的参数。