Объект равняется NULL. Или как получить к нему доступ? - Java

Узнай цену своей работы

Формулировка задачи:

У меня есть два класса
import javax.swing.*;
 
public class Start {
    private static MainWindow gui;
    private static BanknotePanel[] panels;
 
    public static void main(String[] args) {
 
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                gui = new MainWindow();
                gui.setVisible(true);
                
            }
        });
 
        panels = gui.getPanel(); //gui = NULL
        System.out.println(panels.length);
 
    }
 
}
и
import javax.swing.*;
import java.awt.*;
 
public class MainWindow extends JFrame {
    private BanknotePanel[] panel;
    private JTextField textField = new JTextField();
 
    public BanknotePanel[] getPanel() {
        return panel;
    }
 
    public JTextField getTextField() {
        return textField;
    }
 
    public MainWindow() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
        setLayout(new GridLayout(3, 3));
        int[] n = {1, 2, 5, 10, 20, 50, 100, 200, 500};
        panel = new BanknotePanel[n.length];
        for (int i = 0; i < n.length; i++) {
            panel[i] = new BanknotePanel(n[i]);
            add(panel[i]);
        }
        pack();
        setLocationRelativeTo(null);
    }
}
Иак вот в классе Start хочу получит массив panels, а объект gui NULL. Я как то понимаю, что дело в то что он создается в отдельном потоке, но что сделать, как исправить, не знаю((

Решение задачи: «Объект равняется NULL. Или как получить к нему доступ?»

textual
Листинг программы
    public static void main(String[] args) {
 
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                gui = new MainWindow();
                gui.setVisible(true);
            }
        });
        Thread thread = new Thread(() -> {
            while (gui == null) {
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            panels = gui.getPanel(); //gui = NULL
            System.out.println(panels.length);
        });
        thread.start();
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5