2012-04-05 12 views
5
private void launchEventPanel(String title) { 
    EventQueue.invokeLater(new Runnable(title) { 
     public void run() { 
      JFrame myFrame = new JFrame(); 
      myFrame.setTitle(this.val$title); 
      myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString())); 
      myFrame.getContentPane().add(Conference.this.myEventPanel, "Center"); 
      myFrame.pack(); 
      myFrame.setVisible(true); 
     } 
    }); 
} 
. yardım son derece değer takdir
+0

http://stackoverflow.com/questions/65475/geçerli-karakterleri-java sınıfı adı, http://stackoverflow.com/questions/5845299/why-is-it-bad-to-start-a-variable-name-with-a -dollar-oturum-c-java-ve-simila, http://stackoverflow.com/questions/1987603/is-there-a-convention-when-using-java-rmi-to-use-the-dollar -sign-in-a-variab –

+2

Bu decompiled kodu mu? Ben decompiled kodu gibi değişken isimleri beklerdim. – Jesper

+0

Başlığı "garip kod", "val $ title" değerini tam olarak geçerli bir Java tanımlayıcısını yansıtacak şekilde düzenledim - bu sadece foobar gibi geçerli - ancak "kural" bunu kullanmamaktır. otomatik olarak kod oluştur). –

cevap

3

Bu hat:

myFrame.setTitle(this.val$title); 

sadece bunun için özelliğin val$title değerini kullanarak, bir JFrame nesnenin başlığını ayarlama mı. val$title, geçerli sınıfın örnek niteliğidir, adı biraz sıra dışıdır ($ nedeniyle), ancak yine de, Java'daki bir tanımlayıcı için geçerlidir.

+0

Yerel bir değişken olabilir :) –

+0

@ Eng.Fouad –

+0

sorudaki kodda bu ada sahip yerel değişkenler açıklanmadı, haklısınız. Bunu fark etmedim. –

2

hat 5 sadece çerçevenin başlığını ayarlıyor (pencere çerçevesinin üst kısmında gördüğünüz metinler pencerede) "this.val $ title" sadece bir ad vericidir. başlık dizesini,

içinde sakladığınız kodu yazdığınızda, C ya da AZ gibi AZ gibi bir alfabetik karakter olarak, çoğu dili görmeye alışmak biraz nadirdir.

+0

Diller * gevşek olarak * C'ye dayanır veya C-gibi * sözdizimi * kullanabilir. C'nin kendisi de C++ AFAIK'ı da yapmaz. JS ve Java, aslında bunun hakkında düşünebildiğim tek C-alikes. – cHao

4

olarak here ve here açıklanan, alan adı için Runnable constuctor argüman ve "this.val $" derleyici tarafından eklenmiş ve oluşturulan byte kadar gösterir. Bu yüzden bu ekstra şeyler, decompiled koduna yansıtılır.

, orijinal bozulamaz kodu almak title beyanına final ekleyip Runnable için çağrı ve title önünden this.val$ den title kaldırmak için:

private void launchEventPanel(final String title) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      JFrame myFrame = new JFrame(); 
      myFrame.setTitle(title); 
      myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString())); 
      myFrame.getContentPane().add(Conference.this.myEventPanel, "Center"); 
      myFrame.pack(); 
      myFrame.setVisible(true); 
     } 
    }); 
} 
İlgili konular