当前位置: 首页 > 面试题库 >

从不同的地方向Swing JTextArea发送消息

逄俊力
2023-03-14
问题内容

我有一个JTextArea在我的主应用程序窗口中始终可见(如果需要,则为Log),并且我想使用它来显示系统中正在进行的活动(如您将对System.out.println(
)(如果有条件或其他条件)

我指的是用户所做的高级操作(例如“成功加载文件”或“写入磁盘”,“完成”等)

这样的消息可以在我的系统中的任何地方生成,主要是在另一个包中,这些包的类处理数据和计算,并且它们不知道GUI。

也许将消息保存到临时文件中,然后将textarea“监视器”保存到该文件中以进行更改,该怎么做?


问题答案:

最简单的方法是定义记录器接口:

package com.example.logging;
public interface ActivityLogger {
    void logAction(String message);
}

然后将其传递给您的非GUI组件,这样它们就不会与特定的实现挂钩:

public class FileLoader {

    private ActivityLogger logger;
    public FileLoader(ActivityLogger logger){
        this.logger = logger;
    }

    public void loadFile(){
        // load stuff from file
        logger.logAction("File loaded successfully");
    }

}

现在,进行写入文本组件的实现很简单:

public class TextComponentLogger implements ActivityLogger{
    private final JTextComponent target;
    public TextComponentLogger(JTextComponent target) {
        this.target = target;
    }

    public void logAction(final String message){
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                target.setText(String.format("%s%s%n", 
                                             target.getText(),
                                             message));
            }
        });
    }
}
// Usage:
JTextArea logView = new JTextArea();
TextComponentLogger logger = new TextComponentLogger(logView);
FileLoader fileLoader = new FileLoader(logger);
fileLoader.loadFile();

当然,您也可以使用标准的日志记录框架(java.util.logging,slf4j,log4j等),并编写一个“写入”文本组件的附加程序。



 类似资料:
  • 我使用quartz调度程序在不同的时间段向不同的报告发送错误消息。我创建了一个每小时运行一次的调度器,它将执行第二个调度器(此处显示的代码)。必须发送消息的时间是从数据库中获取的,并在exp变量中传递。我只能获取数据库中第一行的值,还可以获取一个org。石英ObjectAlreadyExistsException:无法存储作业:“q3Job”。cronJob3',因为已经存在一个具有此标识的。”错

  • 主要内容:1 invokeOneway单向发送,1.1 invokeOnewayImpl单向调用,2 sendMessageSync同步发送,2.1 invokeSync同步调用,3 sendMessageAsync异步发送消息,3.1 invokeAsync异步调用,3.2 onExceptionImpl异常处理,4 NettyClientHandler处理服务端消息,4.1 processResponseCommand处理响应,基于RocketMQ release-4.9.3,深入的介绍了P

  • 我有以下配置: 一个具有 2 个分区的 kafka 主题 一个动物园管理员实例 一个 kafka 实例 具有相同组 ID 的两个使用者 Flink 作业片段: 方案 1: 我在eclipse上写了一个flink job (Producer ),它从一个文件夹中读取一个文件,并在kafka主题上放置msgs。 所以当我使用eclipse运行这段代码时,它工作得很好。 例如:如果我放置一个有100条记

  • 我一直试图通过按钮单击(mRescue)在我的数据库(Emergency_Contact)中发送自定义消息,当单击按钮时,它将检查在签入之后按下按钮的人的对于每个拥有作为他们的孩子的人,如果他们拥有作为他们的孩子,它会向他们发送消息,否则它会返回Toast消息。我试图运行我的代码,但它崩溃了,我不知道为什么。这是我的活动,执行此操作。 如何发送此消息? 这是我的logcat

  • 我有一个应用程序,它定期生成原始JSON消息数组。我能够使用avro-tools将其转换为Avro。我这样做是因为由于Kafka-Connect JDBC接收器的限制,我需要消息包含模式。我可以在记事本上打开这个文件,看到它包括模式和几行数据。 现在,我想将其发送到我的中央Kafka代理,然后使用Kafka Connect JDBC接收器将数据放入数据库。我很难理解我应该如何将这些Avro文件发送

  • 所以我不确定如何做到这一点。我已经使用Qukus和MicroProfile反应式消息传递框架以及javax.websocket库的东西做到了这一点,但我不确定如何将其移植到使用Kafka Streams。使用MP反应式消息传递,我可以在其他类中的一个通道上有一个@外出注释,然后使用我的WebSocket服务,我可以像这样从该通道注入。 Kafka流有可能做到这一点吗?