我必须在我的Java应用程序中插入GUI控制台。
我选择了MessageConsole.java课程。
在我的应用程序中,我使用此代码来使用该类:
logPanel = new JPanel();
JTextArea textArea = new JTextArea (28,90);
textArea.setEditable (false);
textArea.setFont(new Font("Consolas", Font.PLAIN, 12));
logPanel.add(new JScrollPane (
textArea,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED),
BorderLayout.CENTER);
MessageConsole mc = new MessageConsole(textArea);
mc.redirectOut();
mc.redirectErr(Color.RED, null);
mc.setMessageLines(999);
不幸的是,这并不是我想要的。当应用程序处于"暂停"时,将显示消息行。 (等待用户交互)。我想要的是像通常的控制台一样逐一出现的线条,因为目前同时出现了数千条线......
我找了一些"延迟"在MessageConsole类中,但没有找到它。
我的问题是如何实时获取消息行?
谢谢。
答案 0 :(得分:2)
我认为MessageConsole类可以检查Swing状态的这种变化
MessageConsole类将系统输出重定向到textarea(或textpane)。但是,Message Console就像任何Swing组件一样。您需要使用事件调度线程(EDT)上执行的代码更新控制台。下面是一个使用Swing Timer在EDT上执行代码的简单示例:
Timer timer = new Timer(1000, new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent e)
{
System.out.println( new java.util.Date().toString() );
}
});
timer.start();
同时出现数千行
这意味着您在EDT上执行了长时间运行的代码,因此在整个代码执行完毕之前,GUI无法重新绘制。因此,长时间运行的代码需要在单独的线程或SwingWorker中执行。有关详细信息,请阅读Concurrency in Swing上的Swing教程中的部分。