2012-04-05 13 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の2行目には、コンパイルされません、私はエラーが「匿名クラスがインタフェースを実装し、引数を持つことができません」を取得。

ありがとうございました。ありがとう!

+0

myFrame.setTitle( "会議通話")の代わりに。 –

答えて

0

メッセージのとおり、java.lang.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

助けてくれてありがとう –

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 
    } 

}  
関連する問題