我有一个Kafka消费者的基本实现。我有它正常工作时,它是调用 poll()
方法(我们称之为v1)。
但一旦我把 poll()
方法内部 while
循环(我们称之为v2),我停止接收消息。
奇怪的是,v1仍然能够接收到新消息,但是v2仍然接收到一个空消息 ConsumerRecords
对象。
我已经确定v1和v2在不同的位置 ConsumerGroups
.
这里,v2包含如下所示的代码。
v1有 while
回路已删除。否则就没有其他区别了。
有人能告诉我发生了什么以及为什么吗?
代码如下:
btnButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0){
while(true) {
ConsumerRecords<String, String> records = consumerGroupObj.consumerObj.poll(100);
// Trying to insert into DefaultTableModel here for an existing jTable
// Some other processing code
}
}
}
更新:
我注意到这里有些东西。可能不是 poll()
导致此问题的方法。但是封闭的事件处理程序。请检查以上提供的代码以获取更新。
我注意到的是,在控件退出之前 mouseClicked()
方法时,内部代码所做的更改在gui中不可见。
那么,我的新问题是:如何让kafka消费者在一个由按钮点击事件启动的无限循环中运行?
2条答案
按热度按时间jtoj6r0c1#
我发现(通过一个非常复杂的搜索)在事件侦听器中不能有循环,原因现在看来非常明显。
也就是说,我发现我可以使用一个类来扩展
SwingWorker
班级。所以基本上,我所做的就是从
mouseClicked()
方法并将其放入doInBackground()
我的方法SwingWorker
班级。显然,这造成了很多错误。为了解决这些错误,我需要将gui组件中需要的所有信息传递给
SwingWorker
班级。我是通过使用参数化的构造函数来实现的。在那之后,我只是示例化
SwingWorker
用适当的值初始化并执行对象。瞧!gdx19jrr2#
空结果可能是由短超时参数引起的,您可以尝试增加它。
超时—如果缓冲区中没有数据,则等待轮询所用的时间(以毫秒为单位)。