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);
        }
    });
}

我得到了一些我试图编译和理解的代码。高度赞赏的帮助

4

3 回答 3

4

herehere所述,构造函数的参数Runnable和字段名称的“this.val$”由编译器添加并显示在生成的字节码中。因此,这些额外的东西反映在反编译的代码中。

要获得原始的反编译代码,请在前面的调用和fromfinal的声明中添加title和删除:titleRunnablethis.val$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);
        }
    });
}
于 2012-11-27T18:21:20.893 回答
3

这一行:

myFrame.setTitle(this.val$title);

JFrame只是简单地设置一个对象的标题,使用属性的值val$title来做到这一点。val$title是当前类的实例属性,它的名称有点不寻常(因为$),但对于 Java 中的标识符有效。

于 2012-04-05T18:21:46.847 回答
2

第 5 行只是设置框架的标题(您在 windows 的窗口框架顶部看到的文本)“this.val$title”只是一个名为 val$title 的本地成员,编写代码的人存储了标题字符串在。

虽然很少看到大多数基于 C 的语言将 $ 视为字母字符,如 az 或 AZ。

于 2012-04-05T18:21:17.710 回答