2013-12-30 4 views
0

Я вызываю другой поток из основного класса. В этой теме я хотел показать JProgressBar с неопределенным режимом, но когда я называю для класса появляется пустой кадр и не показывая прогрессбарJProgressbar, не отображающийся в кадре

код нити здесь

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

Вы должны изменить код

long id=Long.parseLong(Contact_Id); 
Verify verify=new Verify(id,path); 
new Thread(verify).start(); 

Мы не видим ни Verify_Contact класса или ссылки в любом месте. Добавляя к этому, Verify является объектом Runnable. поэтому вам нужно предоставить экземпляр Thread для его выполнения. Вы должны использовать метод start() вместо вызова метода run() напрямую

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 как поля в классе, но вы пытаетесь получить к ним доступ в своем конструкторе. Может быть, вы просто оставили это вне своего кода, кто знает.

  • Также, разместить SSCCE для лучшей помощи.
+0

Nice catch, Как он не создает каких-либо проблем с компиляцией? – Keerthivasan

+0

@Octopus не уверен. Я надеюсь, что это Typo by OP –

+0

. Моя ошибка: я оставил часть и прокомментировал ее часть, поэтому она создает путаницу – MandarCT

Смежные вопросы