gpt4 book ai didi

java - 如何使用时间延迟在jtextarea中显示数据库数据?

转载 作者:行者123 更新时间:2023-11-29 13:19:01 24 4
gpt4 key购买 nike

  int time = 0;
time++; // set by 1second
int countdata = 0; // countdata queried by table shows the numbers of table values
rs = stmt.executeQuery("SELECT ID,test From Table");
StringBuilder strBuilder = new StringBuilder();
while (rs.next()) {

strBuilder.append(rs.getString(0)).append(" ").append(rs.getString(1));
strBuilder.append("\n");



if(time <= countdata){
// this is my idea but i dont know how to fetch the data each row
}

jtextarea.setText(strBuilder.toString());
}

输出如下:

//  time 1 seconds
test1
// time 2 seconds
test2
// time 3 reconds
test3
//until it reach the last data of table

请帮忙

我想每1秒获取一次数据,直到达到最后一个值。时间延迟1秒固定。每1秒显示该行数据。

最佳答案

您有两个基本选择(还有其他选择,但让我们保持简单......)

基本上,您希望在某种后台线程中执行查询,但确保 UI 的更新是在事件调度线程的上下文中执行的...

这可以确保在进行查询时,UI 仍然对用户做出响应,并且不会使应用程序看起来像是崩溃了...

你可以...

使用 Swing Timer 安排每 n 毫秒回调一次。这样做的好处是回调是在事件调度线程的上下文中触发的。

缺点是回调是在事件调度线程的上下文中触发的。

我看到的主要问题是您不想从 EDT 上下文中查询数据库,因为这将阻止它在处理过程中对 UI 执行更新并保持对用户的响应。

现在您可以在这个阶段生成另一个Thread,但问题是,完成查询所需的时间可能超过更新之间分配的时间,这意味着有可能当触发下一个查询时,上一个查询仍在运行。您还会遇到必须手动同步 UI 更新的问题,虽然不是特别困难,但为什么要让生活变得更加困难;)

看看How to Use Swing TimersConcurrency in Swing了解更多详情

你可以...

使用SwingWorker。这将允许您在后台线程中执行查询,同时为您提供将更新发送回事件调度线程的功能,以便正确更新 UI。

这样做的缺点是 SwingWorker 没有自己的计时器概念,但是,您可以简单地使用 Thread.sleep

现在,取决于您是否想要定期更新;即它们必须每秒准确地发生或延迟更新;即它们必须在最后一次更新后每秒发生一次,这取决于您如何使用它,但这意味着您获得了控制权。

这基本上意味着,您可以确保一次只执行一个查询,并控制下一个查询之前的时间量。

看看Worker Threads and SwingWorker了解更多详情

关于java - 如何使用时间延迟在jtextarea中显示数据库数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101444/

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