2013-03-23 62 views
-2

與此代碼的問題是,每當我運行此它顯示了編譯錯誤:對象被傳遞作爲參數未聲明

cannot find symbol:constructor mywindowadapter(frame1)

location:class mywindowadapter

mywindowadapter mwa=new mywindowadapter()"

import java.awt.*; 
import java.awt.event.*; 
/*<applet code=frame2 width=500 height=500> 
</applet>*/ 
class frame2 extends Frame 
{ 
    frame2(String title) 
    { 
     super(title); 
     mywindowadapter mwa=new mywindowadapter(); 
     addWindowListener(mwa);  
    } 
    public static void main(String ar[]) 
    { 
     frame2 f=new frame2("my frame"); 
     f.setVisible(true); 
     f.setSize(200,100); 

    } 
    public void paint(Graphics g) 
    { 
     g.drawString("hello frame",60,70); 
    } 
} 
class mywindowadapter extends WindowAdapter 
{ 

    mywindowadapter() 
    { 
     frame2 f=new frame2(); 
    } 
    public void windowClosing(WindowEvent we) 
    { 
     f.setVisible(false); 
     System.exit(0); 
    } 
} 

下面的代碼是上述代碼的整流版本。我無法理解在前面的代碼中產生的錯誤。請幫忙!!

import java.awt.*; 
import java.awt.event.*; 
/*<applet code=frame2 width=500 height=500> 
</applet>*/ 
class frame2 extends Frame 
{ 
    frame2(String title) 
    { 
     super(title); 
     mywindowadapter mwa=new mywindowadapter(this); 
     addWindowListener(mwa);  
    } 
    public static void main(String ar[]) 
    { 
     frame2 f=new frame2("my frame"); 
     f.setVisible(true); 
     f.setSize(200,100); 

    } 
    public void paint(Graphics g) 
    { 
     g.drawString("hello frame",60,70); 
    } 
} 
class mywindowadapter extends WindowAdapter 
{ 
    frame2 f; 
    mywindowadapter(frame2 f) 
    { 
     this.f=f; 
    } 
    public void windowClosing(WindowEvent we) 
    { 
     f.setVisible(false); 
     System.exit(0); 
    } 
} 
+0

如果您收到此錯誤消息,則不會在編譯您顯示的代碼時發生。 – 2013-03-23 07:46:22

+0

其編譯錯誤時顯示,我已檢查。 – 2013-03-23 07:55:14

+0

錯誤消息說:「mywindowadapter(frame1)」。在第一個代碼片段中,frame1的出現次數爲零。零類和零變量就是這樣命名的。您沒有編譯您認爲的代碼,或者該消息不是來自此代碼。 – 2013-03-23 08:17:34

回答

0

frame2沒有默認構造函數,並且您正試圖在您的適配器中使用它。

要麼爲frame2提供默認構造函數,要麼將適當參數傳遞給現有構造函數。

第一個代碼肯定有很多編譯錯誤,請修復它們。就像在windowClosing()中一樣,你不能引用f。

+0

srry但糾正版本正常工作。 – 2013-03-23 08:08:23

+0

thnx ..但我的問題給你我必須明確地提供默認的構造函數y它不能暗示調用jvm提供的構造函數。 – 2013-03-23 08:38:20

+0

只有當您不提供任何內容時,jvm纔會提供默認構造函數。在你的情況下,你有一個構造函數接受字符串。所以你也需要提供默認的一個,如果你想使用它。 – 2013-03-23 08:44:13

0

對我來說,它看起來像你有兩個版本的mywindowadapter類與一個構造函數有一個參數和其他與構造函數沒有參數。兩者都在同一個包中。所以編譯mywindowadapter時沒有參數的構造函數會覆蓋另一個。

此外,有構造函數具有參數的類可能不在您調用構造函數的包中。

檢查是否有其中一種情況。

+0

srry,但我不認爲你已經讀了問題..正確 – 2013-03-23 08:23:49

+0

你好,我有一個關於註冊聽衆的查詢,說我使用複選框,不寫addItemListener(),如果我現在選中或取消選中複選框其狀態不立即改變,但每當我最大化我的窗口或最小化它,並再次恢復它的變化得到反映,即它的狀態改變,我不明白這一點,因爲我們不是registring監聽器而不改變複選框的狀態。請幫忙!! – 2013-03-25 08:27:58

+0

@AkshayMehra:你能解釋一下複選框的狀態是什麼意思。這是你正在談論的複選標記嗎? 同樣的監聽器用於在狀態改變時觸發事件。你試圖解僱任何事件嗎? – 2013-03-25 09:23:59