我已经创建了一个多线程java应用程序,它输出到控制台,但我希望它输出到GUI中的文本字段。
我尝试了各种方法来启动线程并将其输出到控制台,但到目前为止没有任何效果。我有一个名为BankAccount的主方法,其中包含使用executor服务创建的线程。我尝试使用以下方法:我已经创建了一个多线程java应用程序,它输出到控制台,但我希望它输出到GUI中的文本字段。,java,multithreading,user-interface,Java,Multithreading,User Interface,我尝试了各种方法来启动线程并将其输出到控制台,但到目前为止没有任何效果。我有一个名为BankAccount的主方法,其中包含使用executor服务创建的线程。我尝试使用以下方法: public void run() { // Updating of textboxes jTextField22.setText(BankMain.executorService); } }); 但这并没有起作用,我在搜索并找到了一些关于异步和同步方法的信息,但对这个确切
public void run() {
// Updating of textboxes
jTextField22.setText(BankMain.executorService);
}
});
但这并没有起作用,我在搜索并找到了一些关于异步和同步方法的信息,但对这个确切的问题没有足够的解释。我不确定使用Executor服务而不是带有计时器的线程是否可以打印到GUI?我还希望线程在52秒后停止,当我输入52.5秒时,它不工作。我的线程代码:
final BankAccount accountBalance = new BankAccount(0);
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
//print balance - monthly
executorService.scheduleAtFixedRate(new Statement(accountBalance), 0, 4, TimeUnit.SECONDS);
//income - monthly
executorService.scheduleAtFixedRate(new Incomming("Wage", 2000, 4000, accountBalance), 0, 4, TimeUnit.SECONDS);
//
executorService.scheduleAtFixedRate(new Incomming("Interest", 10, 4000, accountBalance), 0, 4, TimeUnit.SECONDS);
//rent - monthly
executorService.scheduleAtFixedRate(new Consumables("Oil Bill", 250, 3000, accountBalance), 0, 3, TimeUnit.SECONDS);
//
//food - weekly
executorService.scheduleAtFixedRate(new Consumables("Food Bill", 60, 1000, accountBalance), 0, 1, TimeUnit.SECONDS);
executorService.scheduleAtFixedRate(new Consumables("Electricity Bill", 50, 1000, accountBalance), 0, 1, TimeUnit.SECONDS);
executorService.scheduleAtFixedRate(new Consumables("Entertainment Bill", 400, 1000, accountBalance), 0, 1, TimeUnit.SECONDS);
executorService.scheduleAtFixedRate(new Consumables("Shoppping Bill", 200, 1000, accountBalance), 0, 1, TimeUnit.SECONDS);
//shutdown after a 52 secs
executorService.schedule(new Runnable() {
@Override
public void run() {
accountBalance.getBalance();
executorService.shutdown();
}
}, 10, TimeUnit.SECONDS);
}
任何帮助都将不胜感激。谢谢 从多个线程到UI的输出应该包装在
Runnable
s中。您当前启动了Runnable
s来做一些工作,但是结果应该在单独的Runnable
s中发布,并使用SwingUtilities.invokeLater()
添加到事件调度线程(UI线程)。我会这样做
class Consumables implements Runnable /* or TimerTask or other implementor of Runnable */
{
public void run()
{
// Do your work here
String result = doTheWork();
// Post results
SwingUtilities.invokeLater(new PrintTask(result));
}
}
private class PrintTask implements Runnable
{
private final String mResult;
public PrintTask(int result)
{
mResult = result;
}
public void run()
{
jTextField22.setText(mResult);
}
}
“我不确定使用Executor服务而不是带有计时器的线程是否可以打印到GUI?”这实际上不是一个问题。OTOH我不会使用普通的
线程来更新GUI,而是使用事件调度线程。为了更快地获得更好的帮助,请发布一个。目前,我觉得你的问题难以理解。我的主要问题是如何将线程输出到GUI上的文本字段。当我说“我不确定使用Executor服务而不是带有计时器的线程是否可以打印到GUI?”时,我的意思是键入一个句号而不是问号对不起。在主要问题上你能帮我吗?