当按下JButton时,我的Swing应用程序将文本行打印到JScrollPane中的JTextPane。对于快速操作,没有问题。但是,某些JButtons会调用可能需要几分钟时间的操作。在此期间,该按钮将呈灰色显示。
当前发生的情况是文本被“批处理”,然后在操作结束的同时按钮变灰的同时,我得到了数百行代码。问题是,我希望追加到JTextPane中显示的文档的文本更早(在追加时)出现,而不是在整个操作完成时出现。这将创造更好的用户体验。
我做错了什么?
发布于 2012-02-10 16:07:33
使用SwingWorker执行后台操作。
// Your button handler
public void actionPerformed(ActionEvent e) {
(new SwingWorker<Void, String>() {
public Void doInBackground() {
// perform your operation
// invoke publish("your string");
}
protected void process(List<String> chunks) {
// append your string to the scroll pane
}
}).execute();
}发布于 2012-02-10 16:05:18
您直接从阻塞每个事件的AWT-Thread中调用代码。解决方案是将长时间运行的代码放在单独的Thread中。当您的代码被执行并获得结果时,您将通知您的视图(使用观察者/可观察模式).As您的视图将被通知,您将更新滚动窗格的内容。
您还必须验证是否在AWT线程中运行(SwingUtilities.isEventDispatchThread())。如果不是,则需要使用SwingUtilities.invokeLater()分派AWT-Thread中的视图更新,因为Swing不是线程安全的。
https://stackoverflow.com/questions/9224508
复制相似问题