使用java swing删除导致NullPointerException的窗格
我试着清理一个窗格,然后用swing将一个新窗格放回原处。但在我当前的设置中,它抛出了一个我不理解的NullPointerException。这是我的密码:使用java swing删除导致NullPointerException的窗格,java,swing,nullpointerexception,jframe,jpanel,Java,Swing,Nullpointerexception,Jframe,Jpanel,我试着清理一个窗格,然后用swing将一个新窗格放回原处。但在我当前的设置中,它抛出了一个我不理解的NullPointerException。这是我的密码: public static void createAndShowGUI() { final JFrame frame = new JFrame("Generator"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pane1 = new
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel();
JPanel pane2 = new JPanel();
addComponentsToPane(frame.getContentPane(), pane1, pane2);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
我在addComponentsToPane中有一个按钮的actionlistener:
buttonGenerate.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
Map<String,String> replacements = new HashMap<String,String>(10);
replacements.put("name", textName.getText());
//createTable();
//makeDocx(replacements);
removePane();
}
});
pane1已声明为public static JPanel pane1=null代码>在课程的开头。当我用actionlistener单击按钮时,它在线程“AWT-EventQueue-0”java.lang.NullPointerException中抛出异常,指向pane1.removeAll()代码>
为什么会出现这个错误?我知道我遗漏了一些重要的东西,有人知道它是什么,或者知道实现我想要的东西的替代方法吗
通过以下方式感谢您:
JPanel pane1 = new JPanel();
您正在createAndShowGUI中创建第二个名为pane1的局部变量。您没有使用定义为静态的全局变量。那个还是空的。您应该这样创建它:
pane1 = new JPanel();
通过这样做:
JPanel pane1 = new JPanel();
您正在createAndShowGUI中创建第二个名为pane1的局部变量。您没有使用定义为静态的全局变量。那个还是空的。您应该这样创建它:
pane1 = new JPanel();
如果pane1是一个静态变量,那么应该在createAndShowGUI()方法中引用它。您正在错误地创建新的本地引用:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel(); //INCORRECT
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane1 = new JPanel(); //CORRECT
相反,请使用静态引用:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel(); //INCORRECT
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane1 = new JPanel(); //CORRECT
如果pane1是一个静态变量,那么应该在createAndShowGUI()方法中引用它。您正在错误地创建新的本地引用:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel(); //INCORRECT
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane1 = new JPanel(); //CORRECT
相反,请使用静态引用:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel(); //INCORRECT
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane1 = new JPanel(); //CORRECT
不要使用静态变量和方法。这不是设计GUI的方法
可以从上的Swing教程中的按钮demo
这样的简单示例开始。然后将instance
变量添加到可以从侦听器访问的类中
现在,当我单击移除窗格的按钮时,它只是停留在单击位置,什么也没有发生
将组件移除(或添加)到可见GUI时,基本代码为:
panel.remove();
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // sometimes needed to force a repaint of the panel
不要使用静态变量和方法。这不是设计GUI的方法
可以从上的Swing教程中的按钮demo
这样的简单示例开始。然后将instance
变量添加到可以从侦听器访问的类中
现在,当我单击移除窗格的按钮时,它只是停留在单击位置,什么也没有发生
将组件移除(或添加)到可见GUI时,基本代码为:
panel.remove();
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // sometimes needed to force a repaint of the panel
如果pane1为null,并且如果调用pane1.somemethod(),则其OBVIUO将引发NullPointerException如果pane1为null,并且如果调用pane1.somemethod(),则其OBVIUO将引发NullPointerException,这是有意义的。现在,当我单击移除窗格的按钮时,它只是停留在单击位置,什么也没有发生。我猜,因为它是在窗格上被删除,一个问题正在发生。有什么解决方案吗?@Cole,应该是revalidate()
,不要使用静态变量和方法。这也许可以回答您的问题,但这不是设计GUI的好方法。如果一开始没有静态声明,我如何制作一个可移动窗格?请原谅,我一直在学习java,这是有道理的。现在,当我单击移除窗格的按钮时,它只是停留在单击位置,什么也没有发生。我猜,因为它是在窗格上被删除,一个问题正在发生。有什么解决方案吗?@Cole,应该是revalidate()
,不要使用静态变量和方法。这也许可以回答您的问题,但这不是设计GUI的好方法。如果一开始没有静态声明,我如何制作一个可移动窗格?恕我直言,我正在学习java。谢谢,我将尝试修复它。如何在开始时制作一个没有静态声明的可移动窗格?
-先看一下教程。该类扩展了一个JPanel,因此您可以创建和添加任意数量的面板。您可以将每个面板定义为一个实例变量,就像类当前对每个按钮所做的那样。谢谢,我将研究它。谢谢,我将尝试修复它。如何在开始时创建一个没有静态声明的可移动窗格?
-先看教程。该类扩展了一个JPanel,因此您可以创建和添加任意数量的面板。您可以将每个面板定义为一个实例变量,就像类当前对每个按钮所做的那样。谢谢,我将研究它。