我想从 netbeans 在我的代码中执行计算,并且计算的数据是从具有 onButtonClick() 操作事件和侦听器的 GUI 中检索的。我希望能够以恒定的时间间隔重复访问这些数据以帮助计算。我的问题是我的代码只允许执行一次计算,之后我的解决方案返回错误答案,因为输入到 GUI 的变量变为零。
我如何编写代码,以便我可以以固定的时间间隔不断地访问这些 GUI 输入的数字,而不必一遍又一遍地输入它们?
我想从 netbeans 在我的代码中执行计算,并且计算的数据是从具有 onButtonClick() 操作事件和侦听器的 GUI 中检索的。我希望能够以恒定的时间间隔重复访问这些数据以帮助计算。我的问题是我的代码只允许执行一次计算,之后我的解决方案返回错误答案,因为输入到 GUI 的变量变为零。
我如何编写代码,以便我可以以固定的时间间隔不断地访问这些 GUI 输入的数字,而不必一遍又一遍地输入它们?
听起来您的 GUI 与您的业务逻辑联系得太紧密了。
您有很多选择,但一种方法是将计算所需的设置存储为某个类中的字段(也许将您的计算拆分为自己的类)。然后,当按下 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
您也可以使用 setter 等,并执行以下操作:
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;
...
}
}