2012-02-23 102 views
0

我有一個名爲Ball的類,我想調用名爲MagicBallImage的類中的update方法。下面是方法IsVisible()在Ball類,從中我想調用的方法更新,但我得到一個錯誤說:調用另一個類的方法

Ball.java:58: non-static method update() cannot be referenced from a static context. 
MagicBallImage.update(); 

Ball Class 

public boolean isVisible() 
{ 
    if (magicBallState != 1) 
    { 
    return true; 
    MagicBallImage.update(); 
    } 
} 

有誰知道如何解決這個問題?

+0

你能向我們展示lcass MagicBallImage – Jorge 2012-02-23 16:13:03

+0

類不可看起來健康,將MagicBallImage曾經得到被稱爲它在返回聲明之後。嘗試創建一個MagicBallImage類的實例,然後調用更新 – 2012-02-23 16:15:44

+0

btw,因爲在MagicBallImage.update()之上有return語句,如果magicBallState!= 1,update()永遠不會運行。所以你應該將'MagicBallImage.update()'下方的return語句。編輯:剛剛看到肖恩的評論,我同意他的看法。 – 2012-02-23 16:17:37

回答

3

它告訴你,你正試圖調用一個沒有類實例的非靜態方法。您需要使用MagicBallImage實例來調用該方法,否則您需要將該方法轉換爲static

1

此錯誤告訴您,如果未指定實例MagicBallImage,則無法調用更新。

兩件事情可能發生:

  • 你忘了做MagicBallImage.update()方法static,或
  • 你需要做的是你創建的地方使用可用的new操作您isVisible()MagicBallImage實例方法。

注1:現在編碼的方式,MagicBallImage.update()不可訪問,因爲它在return語句之後。注2:吸氣劑isVisible有副作用,例如在另一類的實例中更新某些東西,這是非常不理想的。幾乎100%表明您的設計有問題。

0

如果您想調用此方法,則必須將方法聲明爲static。如果不是必須聲明的MagicBallImage實例訪問update()

MagicBallImage mbi = new MagicBallImage(); 
mbi.update(); 
+0

我試過你給的代碼,但現在我得到這個錯誤:MagicBall。java:52:找不到符號 symbol:構造函數MagicBallImage() location:class MagicBallImage MagicBallImage mbi = new MagicBallImage(); – AkshaiShah 2012-02-23 16:19:08

+0

嗯,你的MagicBallImage構造函數是什麼樣的? – talnicolas 2012-02-23 16:20:09

+0

public MagicBallImage(MagicBall paramMagicBall) { super(paramMagicBall); this.magicBall = paramMagicBall; addMouseListener(this);} – AkshaiShah 2012-02-23 16:21:40

2
if (magicBallState != 1) 
    { 
    return true; 
    MagicBallImage.update(); 
    } 
  1. 你返回調用Update之前,所以它不會有任何效果

  2. update()是不是static method,所以你不能從靜態上下文中調用它。如果您已經在對象範圍內,則可以簡單地致電update()this.update(),或致電o.update(),其中o是您的對象。

+0

+1回覆聲明中的評論的唯一答案! – VirtualTroll 2012-02-23 16:14:37

0

進行更新()方法靜態或創建MagicBallImage的一個實例,並調用update()