我有两个Java类; mcveF1
和mcveF2
。下面的代码在运行时打开一个JFrame
,其上单数JButton
禁用。此按钮打开第二个JFrame
并禁用第一个。同样,这个框架上有一个单独的JButton
。该按钮应关闭第二帧并重新启用第一帧。但是抛出异常,java.lang.NullPointerException
。我相信这是因为我正在创建一个mcveF1
的新实例,而不是使用当前的实例。我不知道如何解决这个问题,并希望在解决它的任何帮助。使用JFrame的原始实例
mcveF1
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import net.miginfocom.swing.MigLayout;
public class mcveF1
{
public JFrame myMainWindow = new JFrame("Frame 1");
JPanel panel2 = new JPanel();
//Variables and Components
JButton openFrame = new JButton("Open new frame");
public void runGUI()
{
myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myMainWindow.setLayout(new GridLayout(1,1));
createSortTestPanel();
myMainWindow.getContentPane().add(panel2);
myMainWindow.setVisible(true);
myMainWindow.pack();
myMainWindow.setMinimumSize(new Dimension(myMainWindow.getBounds().getSize()));
myMainWindow.setLocationRelativeTo(null);
}
public void createSortTestPanel()
{
MigLayout layout = new MigLayout("", "[grow]");
panel2.setLayout(layout);
openFrame.addActionListener(new buttonAction());
panel2.add(openFrame);
}
public static void main(String[] args)
{
mcveF1 f1 = new mcveF1();
f1.runGUI();
}
class buttonAction implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
myMainWindow.setEnabled(false);
mcveF2 f2 = new mcveF2();
f2.runGUI();
}
}
}
mcveF2
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import net.miginfocom.swing.MigLayout;
public class mcveF2
{
JFrame myMainWindow = new JFrame("Frame 2");
JPanel panel2 = new JPanel();
//Variables and Components
JButton closeFrame = new JButton("Close");
mcveF1 f1;
public void runGUI()
{
myMainWindow.setLayout(new GridLayout(1,1));
createSortTestPanel();
myMainWindow.getContentPane().add(panel2);
myMainWindow.setVisible(true);
myMainWindow.pack();
myMainWindow.setMinimumSize(new Dimension(myMainWindow.getBounds().getSize()));
myMainWindow.setLocationRelativeTo(null);
}
public void createSortTestPanel()
{
MigLayout layout = new MigLayout("", "[grow]");
panel2.setLayout(layout);
closeFrame.addActionListener(new buttonAction());
panel2.add(closeFrame);
}
public static void main(String[] args)
{
mcveF2 f2 = new mcveF2();
f2.runGUI();
}
class buttonAction implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
myMainWindow.dispose();
f1.myMainWindow.setEnabled(true);
}
}
}
的空指针异常显示在这个画面按PM77-1的请求。
你在'mvceF2.java'文件中有什么在线#** 54 **? –
@ PM77-1'f1.myMainWindow.setEnabled(true);' – Dan
'f1'在'mcveF2'类中为'null'。你从来没有初始化它。 –