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

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

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

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

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

textual
Листинг программы
  1.     public static void main(String[] args) {
  2.  
  3.         SwingUtilities.invokeLater(new Runnable() {
  4.             @Override
  5.             public void run() {
  6.                 gui = new MainWindow();
  7.                 gui.setVisible(true);
  8.             }
  9.         });
  10.         Thread thread = new Thread(() -> {
  11.             while (gui == null) {
  12.                 try {
  13.                     Thread.sleep(1);
  14.                 } catch (InterruptedException e) {
  15.                     e.printStackTrace();
  16.                 }
  17.             }
  18.             panels = gui.getPanel(); //gui = NULL
  19.             System.out.println(panels.length);
  20.         });
  21.         thread.start();
  22.     }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут