如何使用线程挂起java中的执行
我已经通过编程创建了一个向导。它包含3个面板。第二种是德维西潘,第三种是德维斯潘。第三个面板由一个进度条组成。我想让我的程序在显示第三个面板后启动一个函数如何使用线程挂起java中的执行,java,multithreading,swing,Java,Multithreading,Swing,我已经通过编程创建了一个向导。它包含3个面板。第二种是德维西潘,第三种是德维斯潘。第三个面板由一个进度条组成。我想让我的程序在显示第三个面板后启动一个函数process()?可以使用线程吗 else if(ParserMainDlg.this.POSITION==1){ if(sqlConnectionPane.executeProcess()==true){ devicePane.setDeviceList();
process()
?可以使用线程吗
else if(ParserMainDlg.this.POSITION==1){
if(sqlConnectionPane.executeProcess()==true){
devicePane.setDeviceList();
ParserMainDlg.this.POSITION++;
fireStateChanged(oldValue);
}
}
else if(ParserMainDlg.this.POSITION==2){
System.out.println("position:"+ParserMainDlg.this.POSITION);
if(devicePane.executeProcess()==true){
ParserMainDlg.this.POSITION++;
fireStateChanged(oldValue);
}
我想
sqlConnectionPane.executeProcess()
调用在显示devicePane面板后开始执行的函数?您可以明确使用线程执行任务,这是处理长时间运行任务的首选方法
这里有多个选项。所有选项都包括回调向导以更新进度条
您可以创建自己的任务类来完成此任务,也可以使用现有的任务类。“SwingWorker本身是一个抽象类;您必须定义一个子类才能创建SwingWorker对象;匿名内部类通常对创建非常简单的SwingWorker对象非常有用。”
使用我们刚刚了解的swing worker,您可以使用以下内容:
SwingWorker<Integer, Integer> backgroundWork = new SwingWorker<Integer, Integer>() {
@Override
protected final Integer doInBackground() throws Exception {
for (int i = 0; i < 61; i++) {
Thread.sleep(1000);
this.publish(i);
}
return 60;
}
@Override
protected final void process(final List<Integer> chunks) {
progressBar.setValue(chunks.get(0));
}
};
backgroundWork.execute();
SwingWorker backgroundWork=新SwingWorker(){
@凌驾
受保护的最终整数doInBackground()引发异常{
对于(int i=0;i<61;i++){
睡眠(1000);
本章第1节出版;
}
返回60;
}
@凌驾
受保护的最终作废流程(最终列表块){
progressBar.setValue(chunks.get(0));
}
};
backgroundWork.execute();
请注意,您必须将任务分解为更小的部分,才能真正显示进度 请格式化您的代码。如果在JOptionPane或其他模式对话框中显示devicePanel,则始终可以在代码中立即开始执行流程。否则,您必须使用某种类型的侦听器。查找一个选项以集成
SwingWorker
。没有人知道需要多长时间sqlConnectionPane.executeProcess()
+1除了一点:您可能希望将progressBar更新到最后一个块,而不是第一个块。整数列表中始终只有一项,因为每次迭代只发布一个整数:)使用第一个还是最后一个并不重要。还值得注意的是,progressBar需要在edt上更新!“出于性能目的,所有这些调用都合并到一个带有串联参数的调用中。例如:publish(“1”);publish(“2”、“3”);publish(“4”、“5”、“6”);可能导致:process(“1”、“2”、“3”、“4”、“5”、“6”)“您是对的,先生,我站在更正位置!