Java中的实时消息控制台GUI
我必须在Java应用程序中插入GUI控制台 我选择了班级来做这件事 在我的应用程序中,我使用以下代码来使用类:Java中的实时消息控制台GUI,java,swing,user-interface,console,jtextarea,Java,Swing,User Interface,Console,Jtextarea,我必须在Java应用程序中插入GUI控制台 我选择了班级来做这件事 在我的应用程序中,我使用以下代码来使用类: logPanel = new JPanel(); JTextArea textArea = new JTextArea (28,90); textArea.setEditable (false); textArea.setFont(new Font("Consolas", Font.PLAIN, 12)); logPanel.add(new JScrol
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类中查找了一些“延迟”,但没有找到
我的问题是如何实时获取我的消息行
多谢各位
我认为MessageConsole类可以检查Swing状态的这种变化
MessageConsole类将把系统输出重定向到textarea(或textpane)。但是,与任何Swing组件类似。您需要使用在事件分派线程(EDT)上执行的代码更新控制台。下面是一个使用Swing定时器在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中执行。有关更多信息,请阅读上Swing教程的部分。问题可能在代码的其他地方。您如何处理Swing线程问题?在后台线程中执行后台进程时小心吗?是否仅更改Swing事件线程上Swing组件的状态?这些细节非常重要。要在应用程序的主方法中使用控制台,我调用一个UI类来创建JFrame(UI window=new UI())。其余的代码都在UI类的UI方法中,仅此而已。我认为MessageConsole类可以检查Swing状态的变化。。。因此,不,我在应用程序中没有任何后台进程。