我想要想出一个概念,在GUI中我可以给出一个查询并指定起搏和持续时间。就像我给它2分钟和5小时......每2分钟翻译一次在接下来的5小时内运行给定的查询。尽管我的GUI已准备好并能够提交查询......我无法引入上述指定的时间概念。尽管我确信这可以通过线程来完成......我发现它很难编码...在这里的任何人能帮助我用一种基本的方法来解决这个问题吗?有比线程更好更简单的方法吗?请帮助..Java Swing和线程计划
回答
以您为例,如果您有一个查询需要每2分钟运行5个小时,则需要执行的操作是计算您希望查询执行的次数。
2 minutes = 120 seconds.
5 hours = 18,000 seconds.
Number of times (iterations) = 18,000/120 = 150 iterations.
因此,您需要提交查询150次,每120秒(或120,000毫秒)。
如果要使用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
查询只是这些代码示例中的占位符。
您将不得不编写一个实现Runnable
的类,并将查询结果传递回GUI。由于您不在Swing Event Dispatch线程中,因此您必须使用SwingUtilities.invokeLater()
方法来实际更改GUI。
您可以将您的类的实例传递给这些线程方法之一,以便在您传递的时间间隔和持续时间内执行。
谢谢吉尔伯特..但有一个问题..在我的代码中,我将不得不传递150个interations和120秒作为输入正确?你有一个示例代码,将这些值传递给线程..我对Java很新颖,线程是我只在过去几天探索的东西..所以更多的帮助将非常棒! –
非常感谢你......让我在提供的基础上工作,并回到我的观察结果.. –
+1 - 正如附注一样,计时器事件不会在EDT内触发,因此您需要重新同步任何UI更新 – MadProgrammer
- 1. Swing Java员工计划
- 2. Java - 线程,Swing和ServerSocket
- 3. Java Swing +线程
- 4. java swing swing与多线程
- 5. Swing:将值从计划线程传递回用户界面
- 6. 多线程Java Swing
- 7. Java Swing线程库
- 8. java swing和web start的线程问题
- 9. RxJava计划对主线程
- 10. 多线程和Swing
- 11. java swing线程问题
- 12. Java Swing到JavaFX(RMI /线程)
- 13. Swing事件线程Java
- 14. 随着Swing和Java,“Swing-Shell”线程做了什么
- 15. 多线程OpenCV计划
- 16. 课程计划 - java JApplet
- 17. Swing和处理线程
- 18. 带可更新JProgressBar的Java Swing线程
- 19. Java Swing中的线程不工作
- 20. 多线程锁定Java Swing GUI
- 21. 使用Java Swing进行线程处理
- 22. 带有Swing UI的Java线程
- 23. Java swing工作线程等待EDT
- 24. Java的可赎回线程Swing GUI的
- 25. Java Swing多线程访问JTextArea
- 26. 进度条与线程(的Java Swing)
- 27. 在打印时执行加下划线的页眉和页脚Java Swing
- 28. 并行处理Java中 - 计划任务线程
- 29. Java线程:“加入”冻结了我的计划
- 30. 使用Swing和线程设计JApplet动画
[ScheduledExecutorService javadoc](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html)用一个例子每隔10秒做一个小时一小时。你应该能够很容易地适应你的用例。 – assylias
谢谢assylias ...我正在通过教程..我试着看看这是否有帮助.. –