不知怎的,我无法访问&关闭一个带有.dispose()的JFrame,它给我一个nullPointerException。我也不想做System.exit(0)。如何直接访问JFrame,是否有关闭JFrame的解决方法?
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
frame = new ScannerUI();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
...(进一步向下,我无法访问JFrame,给我一个nullpointerexception)
btnBack.setBounds(400, 270, 80, 40);
panel.add(btnBack);
btnBack.setText ("BACK");
btnBack.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//ScannerUI.DISPOSE_ON_CLOSE();
//frame.dispose();
//this.dispose();
//frame.setVisible(false);
//System.out.println ("dsakjf;dsalkhfsa;lklf");
//System.exit(0);
//JFrame test = ScannerUI.frame;
//test.dispose();
// p = false;
System.out.println ("asdfasfas");
System.exit(frame.dispose());
}
});
答案 0 :(得分:2)
您可以使用SwingUtilities方法getWindowAncestor来帮助您获取保存按钮的窗口,然后在其上调用dispose:
btnBack.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
AbstractButton button = (AbstractButton) e.getSource();
Window window = SwingUtilities.getWindowAncestor(button);
window.dispose();
}
});
另一种选择是获取当前类的封闭对象(如果它是JFrame)。您可以通过使用类名,句点,后跟此或您来从匿名内部类中获取此内容:ScannerUI.this
:
btnBack.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ScannerUI.this.dispose();
}
});
答案 1 :(得分:1)
您还可以查看Closing an Application并使用ExitAction
。这是一个更通用的解决方案,可以模拟用户单击窗口上的“X”。在这种情况下,在窗口关闭之前,将首先调用已添加到框架中的任何WindowsListener。
在这种情况下可能不适用,但只需考虑一下。