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

tôi có một số mã mà tôi đang cố gắng biên dịch và hiểu. giúp đánh giá cao

+0

http://stackoverflow.com/questions/65475/ký tự hợp lệ-trong-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-và-simila, http://stackoverflow.com/questions/1987603/is-there-a-convention-when-using-java-rmi-to-use-the-dollar -sign-in-a-variab –

+2

Mã này có được giải mã không? Tôi sẽ mong đợi các tên biến như thế trong mã được biên dịch lại. – Jesper

+0

Tôi đã chỉnh sửa tiêu đề để phản ánh "mã lẻ", 'val $ title' là một định danh Java hoàn toàn hợp lệ - nó chỉ hợp lệ là' foobar' - nhưng "quy tắc" không sử dụng nó (ngoại trừ các công cụ tạo mã tự động). –

Trả lời

3

dòng này:

myFrame.setTitle(this.val$title); 

chỉ đơn giản là thiết lập các tiêu đề của một đối tượng JFrame, sử dụng giá trị của thuộc tính val$title để làm như vậy. val$title là một thuộc tính cá thể của lớp hiện tại, tên của nó hơi khác thường (vì là $) nhưng vẫn hợp lệ cho một số nhận dạng trong Java.

+0

Có thể là biến cục bộ :) –

+0

@ Eng.Fouad không có biến cục bộ nào có tên được khai báo trong mã trong câu hỏi –

+0

oh, bạn nói đúng. Tôi không nhận ra điều đó. –

2

dòng 5 chỉ là đặt tiêu đề của khung (văn bản bạn nhìn thấy trên đầu khung cửa sổ trong cửa sổ) "this.val $ title" chỉ là một memeber địa phương có tên val $ title mà bất cứ ai đã viết mã được lưu trữ chuỗi tiêu đề.

Mặc dù hầu như không thấy hầu hết các ngôn ngữ dựa trên C coi $ là ký tự chữ cái, như az hoặc AZ.

+0

Ngôn ngữ * lỏng lẻo * dựa trên C hoặc sử dụng cú pháp * giống C *. C chính nó không, cũng không C + + AFAIK. JS và Java là những chiếc C-alikes duy nhất mà tôi có thể nghĩ đến. – cHao

4

Như được mô tả herehere, đối số cho hằng số Runnable và "this.val $" vào tên trường được trình biên dịch thêm và hiển thị trong mã byte được tạo. Do đó những điều phụ này được phản ánh trong mã được giải mã.

Để lấy mã decompiled gốc, thêm final để tuyên bố title và loại bỏ title từ cuộc gọi đến Runnablethis.val$ từ trước 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); 
     } 
    }); 
} 
Các vấn đề liên quan