2016-03-23 16 views
0

Küçük bir uygulama için GUI oluşturmak için javax.swing kullanıyorum. Her şey yolunda gidiyor, ama sadece biraz şüphem var. İşlem dışa aktarmanın çalıştığını belirtmek için JProgressBar kullanmak istiyorum. Post sınıfının kendisi Runnable'u uygularsa, setIndeterminate()'u run()'dan hemen sonra arayarak, export()'dan önce gerçekleştirilir, çünkü Java başka bir Thread'a koydu.Bir JProgressBar Ayarı

Bunu çözmenin bir fikri var mı?

this.jProgressBar2.setIndeterminate(true); 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 

      Post post = new Post(); 
      post.export(); 
     } 
    }); 

    this.jProgressBar2.setIndeterminate(true); 

cevap

4

Senin sorunun ardından kod bloke etmeyen post.export() bir arka plan iş parçacığı çalıştırılıyor beri (ı varsayalım) olması ve çalışma yöntemine sonra kod hemen çağrılır.

Öneriler:

  • kodu olarak SwingUtilities.invokeLater(new Runnable() { deyimi kurtulun zaten Salıncak olay parçacığı üzerinde çalıştığı ve bu nedenle bu hiçbir şey yapmaz.
  • Gönderme işlemi bittiğinde bazı bildirim mekanizmalarına ihtiyacınız var. SwingPropertyChangeSupport nesnesinin yanı sıra, dış sınıflara (burada GUI) PropertyChangeListeners eklemesine ve işlemenin yapıldığı sırada GUI'yi bildirmek için bunu fasulye bağlayıcı ve PropertyChangeListeners ile kullanmasına izin veren bir addPropertyChangeListener(...) yöntemi verin. Bu, dışa aktarma yapılırken destek nesnesine uygun firePropertyChange(...) numaralı telefon çağrılarak yapılır.