2012-04-05 48 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 
    } 

}