2012-04-05 110 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); 
     } 
    }); 
} 

我得到了一些代碼,我試圖編譯和理解。幫助高度讚賞

+0

http://stackoverflow.com/questions/65475/valid-characters-in-a-java-class-name,http://stackoverflow.com/questions/5845299/why-is-it-bad-to-start-a-variable-name-with-a -dollar-sign-in-c-java-and-simila,http://stackoverflow.com/questions/1987603/is-there-a-convention-when-using-java-rmi-to-use-the-dollar -sign-in-a-variab – 2012-04-05 18:29:45

+2

這是反編譯的代碼嗎?我希望反編譯代碼中的變量名稱。 – Jesper 2012-04-05 18:30:04

+0

我編輯過的標題反映了「奇怪的代碼」,'val $ title'是一個完全有效的Java標識符 - 它和'foobar'一樣有效 - 但是「規則」是不使用它的自動生成代碼)。 – 2012-04-05 18:31:34

回答

3

這條線:

myFrame.setTitle(this.val$title); 

,就是設定一個JFrame對象的標題,使用屬性val$title的價值這樣做。 val$title是當前類的一個實例屬性,其名稱有點不尋常(因爲$),但對Java中的標識符有效。

+0

它可能是一個局部變量:) – 2012-04-05 18:24:51

+0

@ Eng.Fouad在問題 – 2012-04-05 18:28:29

+0

的代碼中沒有聲明帶有該名稱的局部變量哦,你是對的。我沒有注意到這一點。 – 2012-04-05 18:30:32

2

第5行只是設置框架的標題(您在窗口窗口頂部看到的文本)「this.val $ title」只是一個名爲val $ title的本地記憶員,寫了存儲標題字符串的代碼。

雖然看到大多數基於C語言的大多數語言都將字符$視爲字母字符(如az或AZ),這種情況並不常見。

+0

語言*鬆散*基於C,或者使用C-like *語法*,也許。 C本身沒有,C++ AFAIK也沒有。實際上,JS和Java是我能想到的唯一的C-alikes。 – cHao 2012-11-27 18:23:40

4

如上所述herehere,參數到Runnable constuctor和「this.val $」字段名是由編譯器添加並在生成的字節代碼出現。因此這些額外的東西反映在反編譯的代碼中。

要獲得原始的反編譯的代碼,添加到finaltitle聲明和調用Runnable,並在前面的this.val$title刪除title

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); 
     } 
    }); 
} 
相關問題