使用 JFrame 的原始实例
Using the original instance of a JFrame
我有两个Java类; mcveF1
和 mcveF2
。当 运行 打开带有单数 JButton
的 JFrame
时,下面的代码将禁用。此按钮打开第二个 JFrame
并禁用第一个。类似地,这个框架上有一个单数 JButton
。此按钮应关闭第二帧并重新启用第一帧。但是抛出异常,java.lang.NullPointerException
。我相信这是因为我正在创建 mcveF1
的新实例而不是使用当前实例。我不知道如何解决这个问题,如果能帮我解决这个问题,我将不胜感激。
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的要求,此图中显示了空指针异常。
在 class mcveF2
中创建构造函数
public class mcveF2() {
public mcveF2(mcveF1 f1) {
this.f1 = f1;
}
然后将 mcveF1 的实例传递给按钮动作侦听器中的此构造函数。
class buttonAction implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
myMainWindow.setEnabled(false);
mcveF2 f2 = new mcveF2(mcveF1.this);
f2.runGUI();
}
}
我有两个Java类; mcveF1
和 mcveF2
。当 运行 打开带有单数 JButton
的 JFrame
时,下面的代码将禁用。此按钮打开第二个 JFrame
并禁用第一个。类似地,这个框架上有一个单数 JButton
。此按钮应关闭第二帧并重新启用第一帧。但是抛出异常,java.lang.NullPointerException
。我相信这是因为我正在创建 mcveF1
的新实例而不是使用当前实例。我不知道如何解决这个问题,如果能帮我解决这个问题,我将不胜感激。
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的要求,此图中显示了空指针异常。
在 class mcveF2
public class mcveF2() {
public mcveF2(mcveF1 f1) {
this.f1 = f1;
}
然后将 mcveF1 的实例传递给按钮动作侦听器中的此构造函数。
class buttonAction implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
myMainWindow.setEnabled(false);
mcveF2 f2 = new mcveF2(mcveF1.this);
f2.runGUI();
}
}