Объект равняется NULL. Или как получить к нему доступ? - Java
Формулировка задачи:
У меня есть два класса
и
Иак вот в классе Start хочу получит массив panels, а объект gui NULL.
Я как то понимаю, что дело в то что он создается в отдельном потоке, но что сделать, как исправить, не знаю((
Листинг программы
- 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);
- }
- }
Решение задачи: «Объект равняется 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д