gpt4 book ai didi

java - Java 中的实时 MessageConsole GUI

转载 作者:行者123 更新时间:2023-11-30 03:49:49 24 4
gpt4 key购买 nike

我必须在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com