我查看了Scroll JScrollPane to bottom并找到了答案=>
JScrollBar vertical = scrollPane.getVerticalScrollBar();
vertical.setValue( vertical.getMaximum() );
工作得非常好。
然而,当有大量输出时,它不会直接到底。 p>
我现在添加了一个延迟(不是来自EWT),然后是EWT中的另一个更新,它可以解决问题。
Thread thread = Thread.currentThread();
try {
thread.sleep(99);
} catch (InterruptedException ex) {
}
SwingUtilities.invokeLater(new Runnable() {
public void run() { log(""); }
});
答案 0 :(得分:0)
是否有一种简单的方法可以等待所有输出调用完成?
不知道你到底在做什么,但通常你不想使用Thread.sleep(...)。
相反,您可以将代码包装在SwingUtilities.invokeLater(...)
中。这将把代码放在Event Dispatch Thread(EDT)的末尾,这样它就可以在其他处理完成后执行。
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
JScrollBar vertical = scrollPane.getVerticalScrollBar();
vertical.setValue( vertical.getMaximum() );
}
});
阅读Concurrency in Swing上Swing教程中的部分,了解有关EDT及其重要性的更多信息。
对于您的代码,更好的解决方案是使用教程中描述的SwingWorker
。