java - Java 中的实时 MessageConsole GUI

标签 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类中寻找一些“延迟”,但没有找到。

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

谢谢。

最佳答案

I thought the MessageConsole class could check this change of Swing state

MessageConsole 类会将系统输出重定向到文本区域(或文本 Pane )。然而,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();

a thousand of lines appear in the same time

这意味着您在 EDT 上执行了长时间运行的代码,因此在整个代码执行完毕之前 GUI 无法重新绘制自身。因此,长时间运行的代码需要在单独的线程或 SwingWorker 中执行。阅读 Swing 教程中关于 Concurrency in Swing 的部分了解更多信息。

关于java - Java 中的实时 MessageConsole GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725239/

相关文章:

java - JFrame setBackground 的目的是什么

java - 如何永久禁用操作栏/导航栏/状态栏 android 4.2.2

c++ - 如何使用 Direct2D 创建自定义窗口镶边?

java - 尝试使用 "getNextAlarmClock()"获取下一个闹钟时间,但没有得到正确的答案

java - 关于如何将大文件读取到 jtextarea 的建议

java - (Java) 在运行时更改 swing 组件的文本(资源包)

python - 在 OS-X 中使用鼠标启动 Python 脚本的简便方法

java - float 和双重混淆

java - 这些 Java 约定中哪一个具有更高的优先级?

Java RMI 和 https?