JProgressbar没有出现在Frame中

时间:2013-12-30 12:34:01

标签: java multithreading swing jframe

我正在从主类调用另一个线程。在该线程中,我想显示具有不确定模式的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();


        }
    }   

}   

2 个答案:

答案 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_cidlocal_path视为类中的字段,但您尝试在构造函数中访问它们。也许你只是把它从代码中删除了,谁知道呢。

  • ,发布SSCCE以获得更好的帮助。

答案 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()方法