代码之家  ›  专栏  ›  技术社区  ›  szark

2个JFrame之间的java通信

  •  0
  • szark  · 技术社区  · 6 年前

    我在下面的代码中得到一个AWT-EventQueue-0空指针异常,我无法修复它。

    我想要一个主框架,按下按钮 我打开第二个框架,在那里我可以选择创建新的玩家, 这将显示在主框架中。 我将引用传递给构造函数,但仍然不断收到错误。

    我很高兴能得到一些帮助,谢谢!

    public class Main { 
       public static void main(String[] args) {
              SwingUtilities.invokeLater(new Runnable() {                     
                     @Override
                     public void run() {
                           new App();
                     }
              });
       }
    }
    
    public class App extends JFrame {
       private MainPanel mainPanel;
       private SecondPanel secondPanel;
    
       public App() {
              setVisible(true);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setSize(800, 600);
    
              secondPanel = new SecondPanel(mainPanel);
              mainPanel = new MainPanel(secondPanel);
    
              add(mainPanel);
       }
    
    }
    
    public class MainPanel extends JPanel {
       private JTextArea textArea;
       private JScrollPane scrollPane;
       private JButton options;          
    
    
       public MainPanel(SecondPanel secondPanel) {
              textArea = new JTextArea();
              textArea.setColumns(20);
              textArea.setRows(5);
              textArea.setSize(300, 300);
              textArea.setVisible(true);
              textArea.setEditable(false);
    
              scrollPane = new JScrollPane(textArea);
              scrollPane.setSize(new Dimension(400, 400));
    
    
              options = new JButton("Options");
              options.addActionListener(new ActionListener() {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                          secondPanel.setVisible(true);
                     }
              });
    
    
              add(scrollPane);
              add(options);
    
       }
    
    
       public JTextArea getTextArea() {
              return textArea;
       }
    
    
       public void setTextArea(JTextArea textArea) {
              this.textArea = textArea;
       }
    }
    
    public class SecondPanel extends JFrame {
       private JButton create, remove;
       private JPanel panel;
    
       public SecondPanel(MainPanel mainPanel) {
              setVisible(false);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setSize(400, 400);
    
              panel = new JPanel();
              panel.setLayout(new BorderLayout());
    
              create = new JButton("create");
              create.addActionListener(new ActionListener() {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                          mainPanel.getTextArea().append("New Player Created");
    
                     }
              });
    
              remove = new JButton("remove");
              remove.addActionListener(new ActionListener() {
                     @Override
                     public void actionPerformed(ActionEvent e) {
                           mp.getTextArea().setText("Player removed");
                     }
              });
    
              add(panel);
    
              panel.add(create, BorderLayout.EAST);
              panel.add(remove, BorderLayout.WEST);
       }
    
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   watchme    6 年前

    嗯,它必须是“null”,因为在将主面板移交给第二个面板之前,您没有初始化主面板。

    相反,请创建自己的方法,在secondPanel上设置MainPanel,并在MainPanel上设置secondPanel。

    我发现您需要在构造函数中使用secondPanel来设置ActionListener。在“setSecondPanel(SecondPanel sPanel)”中执行此操作,正如我前面提到的,您应该创建此方法。