Я испытываю очень серьезные проблемы в Java, что мешает мне реализовать и протестировать проект. Проблема в том, что, хотя я использую шаблон MVC после нажатия кнопки, мне нужно открыть новый JFrame, где я рисую N красных прямоугольников. В соответствии с шаблоном MVC входное значение N считывается из текстового поля в классе Control, где я тестировал и правильно считывал значение. Однако, когда я попадаю в новый фрейм, значение исчезает, и я получаю исключение nullPointerException.Переменная от другого класса не получает значения в JFrame
Я также попробовал аналогичные вопросы отсюда (вот так: Using paintComponent() to draw rectangle in JFrame), но никто из них, похоже, не работал.
Соответствующая часть класса управления является:
private void readInput()
{
numberOfQueues = Integer.parseInt(v_view.field1.getText());
}
public int getNumberOfQueues()
{
return numberOfQueues;
}
class StartListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
if(m_model.validateInput(v_view.field1.getText()) && m_model.validateInput(v_view.field2.getText()) &&
m_model.validateInput(v_view.field3.getText()) && m_model.validateInput(v_view.field4.getText()) &&
m_model.validateInput(v_view.field5.getText()) && m_model.validateInput(v_view.field6.getText()))
{
if(Integer.parseInt(v_view.field3.getText()) <= Integer.parseInt(v_view.field4.getText()) &&
Integer.parseInt(v_view.field5.getText()) <= Integer.parseInt(v_view.field6.getText()))
{
readInput();
SimulationFrame simulationFrame = new SimulationFrame(m_model);
simulationFrame.setVisible(true);
simulationFrame.repaint();
}
else
{
JOptionPane.showMessageDialog(null,"Invalid input range! Please try again!");
}
}
}
}
Проверка ввода, безусловно, хорошо, и если я пытаюсь здесь, чтобы распечатать значения numberOfQueues делает это хорошо.
Класс, который расширяет JFrame выглядит следующим образом:
public class SimulationFrame extends JFrame{
Control control;
private int numberOfQueues;
public SimulationFrame(Model model)
{
setPreferredSize(new Dimension(1000, 550));
this.pack();
this.setTitle("Simulator Frame");
this.setLayout(new FlowLayout());
this.setVisible(true);
this.setLocation(100, 100);
numberOfQueues=control.getNumberOfQueues();
System.out.println(numberOfQueues);
repaint();
}
protected void paintComponent(Graphics g)
{
g.setColor(Color.red);
for(int i=0; i<numberOfQueues; i++)
{
System.out.println(control.numberOfQueues);
g.fill3DRect(50+20, 20, 50, 50, true);
}
}
Я также пытался вызвать метод перекрашивать в обоих местах, я также попытался не использовать поглотитель, просто получить значение непосредственно через экземпляр класса , Я также пробовал внутри конструктора вне конструктора, где бы он ни находился, но где-то я продолжаю делать ту же очевидную ошибку, которую я не мог найти.
См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/q/9554636/418556) –