Java Swing和要调度的线程
我试图提出一个概念,在GUI中我可以给出一个查询并指定步调和持续时间。就像我给它2分钟和5小时。这意味着每2分钟运行一次给定的查询,在接下来的5小时。虽然我的GUI已经准备好并能够提交查询…但我无法引入上述指定的时间概念。尽管我确信这可以通过线程来完成…我发现很难编写代码…这里有人能帮我解决这个问题的基本方法吗?有没有比线程更好、更简单的方法?请帮助..以您的示例为例,如果您有一个查询需要每2分钟运行5小时,您需要做的是计算您希望查询执行的次数Java Swing和要调度的线程,java,multithreading,swing,Java,Multithreading,Swing,我试图提出一个概念,在GUI中我可以给出一个查询并指定步调和持续时间。就像我给它2分钟和5小时。这意味着每2分钟运行一次给定的查询,在接下来的5小时。虽然我的GUI已经准备好并能够提交查询…但我无法引入上述指定的时间概念。尽管我确信这可以通过线程来完成…我发现很难编写代码…这里有人能帮我解决这个问题的基本方法吗?有没有比线程更好、更简单的方法?请帮助..以您的示例为例,如果您有一个查询需要每2分钟运行5小时,您需要做的是计算您希望查询执行的次数 2 minutes = 120 seconds.
2 minutes = 120 seconds.
5 hours = 18,000 seconds.
Number of times (iterations) = 18,000 / 120 = 150 iterations.
因此,您需要每120秒或120000毫秒提交150次查询
如果您想在GUI中提交多个查询,则必须使用线程
编辑添加:根据assylias的评论,这里有一些代码
public void runQuery(int interval, int duration) {
final Runnable query = new Runnable() {
@Override
public void run() {
// Run query
}
};
ScheduledExecutorService scheduler = Executors
.newScheduledThreadPool(1);
final ScheduledFuture<?> queryHandle = scheduler.scheduleAtFixedRate(
query, 0, interval, TimeUnit.SECONDS);
scheduler.schedule(new Runnable() {
@Override
public void run() {
queryHandle.cancel(true);
}
}, duration, TimeUnit.SECONDS);
}
仅使用线程,这里是另一个版本
public void runQuery(int interval, int duration) {
final Runnable query = new Runnable() {
@Override
public void run() {
// Run query
}
};
int iterations = duration / interval;
for (int i = 0; i < iterations; i++) {
new Thread(query).start();
for (int j = 0; j < interval; j++) {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
}
}
}
}
在这些代码示例中,可运行查询只是一个占位符
您必须编写一个实现Runnable的类,并将查询结果传递回GUI。由于您不在Swing事件调度线程上,因此必须使用SwingUtilities.invokeLater方法来实际进行GUI更改
您可以将类的实例传递给其中一个线程化方法,在传递的时间间隔和持续时间内执行。举个例子,每10秒执行一次,持续一小时。你应该能够很容易地将其适应你的用例。谢谢assylias…我正在阅读教程。让我试试看这是否有帮助。谢谢Gilbert。但是有一个问题。在我的代码中,我必须传递150次迭代和120秒作为输入,对吗?你有没有一个示例代码可以将这样的值传递给线程..我对Java非常陌生,线程是我在过去几天才研究的东西..所以没有更多的帮助会非常好!!非常感谢您…让我在提供的基础上工作,然后返回我的观察结果..+1-作为旁注,计时器事件不会在EDT内触发,因此您需要重新同步任何UIupdates@MadProgrammer:是的。我们也没有处理来自查询的任何响应。