我正在从主类调用另一个线程。在该线程中,我想显示具有不确定模式的JProgressBar但是当我调用For该类时,空框出现并且不显示进度条
线程代码在这里
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class Verify extends JFrame implements Runnable
{
JProgressBar bar;
public Verify(long ID,String path)
{
}
@Override
public void run()
{
bar =new JProgressBar();
bar.setIndeterminate(true);
bar.setStringPainted(true);
bar.setVisible(true);
frame.add(bar);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
//Do some work here
if(flag==true)
{
//call for another thread
frame.dispose();
}
else
{
frame.dispose();
}
}
}
来自主要课程的这个主题的调用在这里
private void Process_ContactActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String Id=Id_Field.getText().toString().trim();
if(Id.isEmpty())
{
//job
}
else
{
if(path==null)
{
//Job
}
else
{
long id=Long.parseLong(Id);
Verify verify=new Verify(id,path);
verify.run();
}
}
}
答案 0 :(得分:2)
您的类名为Verify
,但您所谓的构造函数称为Verify_Contact
。我可以看到导致问题。
JFrame
。无需创建另一个JFrame
。只需将进度条添加到课程JFrame
所以在run()
中只需执行此操作
add(bar);
pack();
// setSize(300, 300); <--- why pack AND setSize?
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
在你的构造函数中
public Verify(long ID,String path)
{
Local_cid=ID;
local_path=path;
// frame=new JFrame("Processing Contact"); <-- leave this out
setLayout(new FlowLayout());
}
Local_cid
,local_path
视为类中的字段,但您尝试在构造函数中访问它们。也许你只是把它从代码中删除了,谁知道呢。答案 1 :(得分:2)
您应该更改代码
long id=Long.parseLong(Contact_Id);
Verify verify=new Verify(id,path);
new Thread(verify).start();
我们在任何地方都看不到任何Verify_Contact
类或引用。除此之外,Verify是一个Runnable
对象。所以,你需要将它提供给Thread
实例来执行它。您应该使用start()
方法而不是直接调用run()
方法