2012-04-05 90 views
1

我有一些代码,我想重新编译和理解,但我有一个方法,不编译,我希望找到良好的工作。该方法如下。匿名类实现接口,不能有参数

private void launchEventPanel(String title) { 
    EventQueue.invokeLater(new Runnable(title) { 
     public void run() { 
     JFrame myFrame = new JFrame(); 
     myFrame.setTitle("Conference Call"); 
     myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString())); 
     myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center"); 
     myFrame.pack(); 
     myFrame.setVisible(true); } }); } 

的EventQueue.invokeLater的第二行不能编译,我得到的错误“匿名类实现接口,不能有参数”。

任何帮助和解决方法是高度赞赏。谢谢!

+0

而不是myFrame.setTitle(“电话会议”); – 2012-04-05 18:00:11

回答

0

那么,正如消息所说:java.lang.Runnable是一个接口,所以你不能将标题传递给它的构造函数。 使用:

EventQueue.invokeLater(new Runnable() { 

改为。

请注意,标题不在任何地方使用。如果你在Runnable里面需要它,你需要声明它:

private void launchEventPanel(final String title) { 
EventQueue.invokeLater(new Runnable() { 
    public void run() { 
    JFrame myFrame = new JFrame(); 
    myFrame.setTitle(title); 
1
private void launchEventPanel(final String title) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
     JFrame myFrame = new JFrame(); 
     myFrame.setTitle("Conference Call"); 
     myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString())); 
     myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center"); 
     myFrame.pack(); 
     myFrame.setVisible(true); } }); } 

你完成了。尽管据我所见,你实际上并没有在代码中的任何地方使用title的值。

8

这是因为Runnable只是一个接口,它不会将任何参数作为匿名类。要解决它,你可以分配最终到上参数:

private void launchEventPanel(final String title) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
     JFrame myFrame = new JFrame(); 
     myFrame.setTitle("Conference Call"); 
     myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString())); 
     myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center"); 
     myFrame.pack(); 
     myFrame.setVisible(true); } }); } 
+0

感谢您的帮助 – 2012-04-06 18:00:22

2

嗯,这是它说,你不能给参数传递给Runnable“构造”,因为不存在构造 - 它是一个接口。

相反,声明titlefinal,并直接在内部类中使用它。

0

Runnable是一个接口,因此它不包含它接受一个字符串,你在这行做一个构造函数:EventQueue.invokeLater(new Runnable(title) {

如果你想在public void run()使用title,只是做标题的最终参数,你可以在该方法中自由使用它。

1

你可以将你的匿名类转换成嵌套类。它将允许您将参数传递给构造函数。

private static final MyRunnable implements Runnable { 

    private final String title; 

    public MyRunnable(String title) { 
     this.title = title; 
    } 

    @Override 
    public void run() { 
     // use title here 
    } 

}