Java中的实时MessageConsole GUI

时间:2014-07-13 17:14:49

标签: java swing user-interface console jtextarea

我必须在我的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类中,但没有找到它。

我的问题是如何实时获取消息行?

谢谢。

1 个答案:

答案 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教程中的部分。