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 :(得分:4)
如here和here所述,编译器添加Runnable
构造函数和字段名称“this.val $”的参数,并显示在生成的字节码中。因此,这些额外的东西会反映在反编译的代码中。
要获取原始反编译代码,请将final
添加到title
的声明中,然后从title
和Runnable
的调用中删除this.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);
}
});
}
答案 1 :(得分:3)
这一行:
myFrame.setTitle(this.val$title);
只需使用属性JFrame
的值设置val$title
对象的标题即可。 val$title
是当前类的实例属性,其名称有点不寻常(因为$
),但对Java中的标识符有效。
答案 2 :(得分:2)
第5行只是设置框架的标题(你在窗口框架顶部看到的文字)“this.val $ title”只是一个名为val $ title的本地文件,无论谁编写存储的代码。中的标题字符串。
虽然看到大多数基于C语言将$视为字母字符(如a-z或A-Z)有点不常见。