2012-06-12 15 views
5

Benim main(String[] args) yöntemimde, Saldırı iş parçacığı üzerinde main1 yöntemini çalıştırmak için SwingUtilities.invokeAndWait numaralı çağrıya çağrı yaptım. İplik güvenliği için her zaman buna ihtiyacım olduğunu varsaydım. GUI iş parçacığı için herhangi bir GUI kodu yapmak için ilk iş parçacığının olur çünkü bunun gerekli olmadığını söylendi. Veya başka bir şekilde söylemek gerekirse, Swing'i sadece bir iş parçacığından kullanabilirsiniz, ancak hangisi önemli değil. Ama bunun için bir kaynak bulamıyorum ve emin olmak isterim.Bir uygulamanın ana yönteminden Swing iş parçacığına geçmek gerekli mi?

+5

bakınız:

güzel bir örnek ben neden bahsettiğimi görmek için [Swing eşzamanlılık: İlk konu] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html). –

+10

Swing belgeleri, bunun yapılması gerektiğini belirtir. Buna inanmaya eğilimliydim, çünkü tavsiyeyi görmezden gelmek zamanın% 99.9'unu işe yarayabilse de, bir süre için başarısız olma şansına sahip olur ve evrenin yasalarına göre, bu başarısızlık sadece programınızı gösterdiğinizde ortaya çıkar. en büyük müşterinize veya patronunuza. –

+2

Pedantry noktası: Bu bir AWT iş parçacığı. –

cevap

7

Size anlatılanlar yanlıştır. main yöntemi başlangıçta ana iş parçacığı tarafından çağrılır. Tüm GUI ile ilgili faaliyetler Olay Sevk Konu olarak adlandırılan tamamen ayrı bir iş parçacığı üzerinde gerçekleştirilmelidir. Ana iş parçacığı , EDT değil.

public class ThreadTest { 
    public static void main(String[] args) { 
     final Thread main = Thread.currentThread(); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       Thread edt = Thread.currentThread(); 

       System.out.println(main); 
       System.out.println(edt); 
       System.out.println(main.equals(edt)); 
      } 
     }); 
    } 
} 
İlgili konular