Я хочу выполнить вычисление в моем коде из netbeans, а вычисленные данные извлекаются из графического интерфейса, в котором есть событие action и прослушиватель onButtonClick(). Я хочу иметь возможность регулярно обращаться к этим данным с постоянными интервалами, чтобы помочь в вычислении. Моя проблема заключается в том, что мой код позволяет выполнять вычисления только один раз и после этого мое решение возвращает ложный ответ, так как переменные, введенные в GUI, становятся нулями.
Как кодировать, чтобы я мог постоянно обращаться к этим введенным графическим данным с фиксированными интервалами времени, не вводя их снова и снова?
Похоже, ваш GUI слишком тесно связан с вашей бизнес-логикой.
У вас есть много вариантов, но один из них заключается в том, чтобы сохранить настройки, необходимые для вычисления, как поля в каком-либо классе (возможно, разделить ваш расчет на свой класс). Затем, когда нажата кнопка GUI, конфигурация берется из графического интерфейса пользователя, анализируется и копируется в объект вычисления до выполнения вычисления.
Это автоматически дает вам несколько преимуществ:
Возможно, вы не захотите делать все эти вещи, но дело в том, что вы автоматически получаете возможность делать это, просто отделяя свою бизнес-логику от своего графического интерфейса.
Пример:
class Calculation {
final int input1;
final int input2;
Calculation (int input1, int input2) {
if (input1 < 0 || input2 < 0)
throw new IllegalArgumentException("Inputs can't be negative."); // for example
this.input1 = input1;
this.input2 = input2;
}
void begin () {
...
}
}
Затем, когда нажата кнопка GUI:
int input1 = ...; // get value from gui
int input2 = ...; // get value from gui
calculation = new Calculation(input1, input2);
calculation.begin();
// now the actual settings are preserved in 'calculation' regardless of gui changes.
Конечно, есть много способов организовать это (и пример кнопки GUI выше оставляет желать лучшего), например, вы хотите получать периодические обновления и т.д., Но все это можно сделать легко в этой структуре.
Также вам не нужно иметь отдельный экземпляр Calculation
для расчета; вы можете использовать сеттеры и т.д. и делать такие вещи, как:
class Calculation {
final int input1;
final int input2;
boolean running;
Calculation (int input1, int input2) {
setInput1(input1);
setInput2(input2);
}
void setInput1 (int input1) {
if (running)
throw new IllegalStateException("Inputs can't be changed while calculation running.");
if (input1 < 0)
throw new IllegalArgumentException("Input 1 can't be negative.");
this.input1 = input1;
}
void setInput2 (int input2) {
if (running)
throw new IllegalStateException("Inputs can't be changed while calculation running.");
if (input2 < 0)
throw new IllegalArgumentException("Input 2 can't be negative.");
this.input2 = input2;
}
void begin () {
if (running)
throw new IllegalStateException("Calculation is already running.");
running = true;
...
}
}