[英]Java Swing and Threads to schedule
我正在尝试提出一个概念,其中在GUI中我可以给出一个查询并指定起搏和持续时间,就像我给它2分钟5小时一样。它的翻译方式像是每2分钟在接下来的5小时内运行给定的查询。尽管我的GUI已经准备就绪并且能够提交查询...我无法引入上述指定的时间概念。尽管我确信这可以通过线程实现...但是我发现很难编写代码。 ..在座的人可以用一种基本的方法来帮助我解决这个问题吗? 有没有比穿线更好更好的方法? 请帮忙..
以您的示例为例,如果您有一个查询,希望每2分钟运行5小时,那么您需要做的就是计算查询执行的次数。
2 minutes = 120 seconds.
5 hours = 18,000 seconds.
Number of times (iterations) = 18,000 / 120 = 150 iterations.
因此,您将需要每120秒(或120,000毫秒)提交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);
}
仅使用Thread,这是另一个版本。
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
查询只是一个占位符。
您将必须编写一个实现Runnable
的类,并将查询结果传递回GUI。 由于您不在Swing Event Dispatch线程上,因此必须使用SwingUtilities.invokeLater()
方法实际进行GUI更改。
您可以将类的实例传递给这些线程方法之一,以在传递的间隔和持续时间内执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.