2010-07-11 49 views
0
public final class BrowserTopComponent extends TopComponent implements ActionListener, ChangeListener, LookupListener{ 

    public BrowserTopComponent() { 
     initComponents(); 
     setName(NbBundle.getMessage(BrowserTopComponent.class, "CTL_BrowserTopComponent")); 
     setToolTipText(NbBundle.getMessage(BrowserTopComponent.class, "HINT_BrowserTopComponent")); 
//  setIcon(ImageUtilities.loadImage(ICON_PATH, true)); 

     Browser1 fff = new Browser1(); 
     associateLookup(Lookups.singleton(fff)); 
    } 

    private Lookup.Result result = null; 

    @Override 
    public void componentOpened() { 
     result = Utilities.actionsGlobalContext().lookupResult(Browser1.class); 
     result.addLookupListener (this); 
    } 

    @Override 
    public void componentClosed() { 
     result.removeLookupListener (this); 
     result = null; 
    } 

    private void navButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    fff.navgiateTo(); // NET BEAN COMPLAINS AT THIS LINE. 
    } 

爲什麼我不能使用fff.navigateTo();但是,當fff.navigateTo()在BrowserTopComponent的構造函數中時,它工作正常!那麼,爲什麼我不能在構造函數之外擁有它?無法訪問提供者類的方法

在我的瀏覽器模塊(其中加載第三方JAR),我有下面的類:

package my.app.browser 
import bunch.of.3rd.party.stuff 
public class Browser1 { 

    private String url; 

    public void navigateTo() { 

     System.out.println(url); 
    } 
} 

回答

1

這看起來像一個作用域的問題。 fff在構造函數中是在本地聲明的。在navButtonActionPerformed中,它沒有被聲明。這可能是由於你如何縮小了代碼,但如果錯誤消息暗示fff未被聲明,請嘗試在類級別聲明「Browser fff」。例如,

class BrowserTopComponent ... { 

    Browswer fff = new Browser(); 

    BrowserTopComponent() { 
    initComponents(); 
    } 

    private void navButtonActionPerformed(ActionEvent evt) { 
    fff.navigateTo(); 
    } 

}