多线程同机和javafx实现难点
Multithreading with a machine and javafx implementation difficulties
我需要构建一些东西,但我不知道如何构建。我希望有人能指导我走上正确的道路或告诉我如何去做。
我正在使用一台机器工作,这台机器产生了一些输出。此输出通过另一个程序读取。我正在通过我在任务中使用流程构建器创建的流程来读取此输出。此输出需要处理,并且必须更新屏幕上的多个值。它们都包含不同的消息,但消息取决于进程的输出。
(我需要从秤上读取输出,它给出了产品的重量和当前时间。产品的重量、当前时间和价格需要 substracted/calculated 来自这个并且需要在屏幕上显示)。
我不能使用观察者模式,因为那样屏幕会从另一个线程更新,这会触发错误。我也不能使用任务的 updateMessage 函数并将标签绑定到消息 属性 因为所有标签都会有不同的输出。
我做什么could/should?能否让我走上正轨?
你基本上可以这样构造它:
Thread machineReadThread = new Thread(() -> {
boolean finished = false ;
Process process = null ;
InputStream in = null ;
try {
process = new ProcessBuilder(...).start();
in = process.getInputStream();
while (! finished) {
double weight = readWeightFromStream(in);
Instant timestamp = readTimestampFromStream(in);
Platform.runLater(() -> updateUI(weight, timestamp));
finished = checkFinished();
}
} catch (Exception exc) {
log(exc);
} finally {
if (in != null) in.close();
if (process != null) process.destroy();
}
});
machineReadThread.setDaemon(true);
machineReadThread.start();
我需要构建一些东西,但我不知道如何构建。我希望有人能指导我走上正确的道路或告诉我如何去做。
我正在使用一台机器工作,这台机器产生了一些输出。此输出通过另一个程序读取。我正在通过我在任务中使用流程构建器创建的流程来读取此输出。此输出需要处理,并且必须更新屏幕上的多个值。它们都包含不同的消息,但消息取决于进程的输出。
(我需要从秤上读取输出,它给出了产品的重量和当前时间。产品的重量、当前时间和价格需要 substracted/calculated 来自这个并且需要在屏幕上显示)。
我不能使用观察者模式,因为那样屏幕会从另一个线程更新,这会触发错误。我也不能使用任务的 updateMessage 函数并将标签绑定到消息 属性 因为所有标签都会有不同的输出。
我做什么could/should?能否让我走上正轨?
你基本上可以这样构造它:
Thread machineReadThread = new Thread(() -> {
boolean finished = false ;
Process process = null ;
InputStream in = null ;
try {
process = new ProcessBuilder(...).start();
in = process.getInputStream();
while (! finished) {
double weight = readWeightFromStream(in);
Instant timestamp = readTimestampFromStream(in);
Platform.runLater(() -> updateUI(weight, timestamp));
finished = checkFinished();
}
} catch (Exception exc) {
log(exc);
} finally {
if (in != null) in.close();
if (process != null) process.destroy();
}
});
machineReadThread.setDaemon(true);
machineReadThread.start();