2016-04-14 99 views
0

Burada yeni bir kullanıcı beni affet. Ben çalışırken çocuk sınıf çalışmalarındaTepsi simgesini kullanarak alt sınıfın üst sınıf yöntemini çağıramazsınız

public class Tray extends Home { 

    static TrayIcon trayIcon; 

    private static void ShowTrayIcon(String status) { 

     if (!SystemTray.isSupported()) { 
      System.out.println("Tray not supported"); 
      System.exit(0); 
      return; 
     } 

     final PopupMenu popup = new PopupMenu(); 

     final SystemTray tray = SystemTray.getSystemTray(); 
     trayIcon = new TrayIcon(CreateIcon("/Images/off.png", "desc")); 

     MenuItem StartItem = new MenuItem("Start"); 
     popup.add(StartItem); 

     trayIcon.setPopupMenu(popup); 

     // open from tray 
     StartItem.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       start(); 
      } 
     }); 

     try { 
      tray.add(trayIcon); 
     } catch (AWTException e) { 
     } 
    } 

    protected static Image CreateIcon(String path, String desc) { 
     URL ImageURL = Tray.class.getResource(path); 
     if (ImageURL == null) { 
      System.err.println("Resource not found: " + path); 
      return null; 
     } else { 
      // System.err.println("Resource found: " + path); 
      return (new ImageIcon(ImageURL, desc)).getImage(); 
     } 
    } 

    public void start() { 
     super.start(); 
    } 
} 

start() yöntemi, ancak:

Ebeveyn/ana/JFrame:

public class Home extends javax.swing.JFrame { 
    public Home() { 
     initComponents(); 
     setIcon("icon"); // set the taskbar icon 
    } 

    public static void main(String args[]) { 
     // main code here, including tray initialization 
     new Home().setVisible(true); 
    } 

    public void start() { 
     // code here 
    } 
} 

Çocuk sınıfı

Bu

benim kodudur Bunu trayicon'un actionlistener'ından çağırmak için, "statik olmayan yöntem start() 'ın statik içerikten referans alınamadığını" söylemeye devam ediyor.

actionlistener yönteminde super.start() kullanılarak denendi, ancak bu da çalışmıyor.

Yapmaya çalışıyorum; Ev sınıfı benim JFrame ve ana sınıfım, benim tepsi ikonlarımı idare eden başka bir sınıfım var ve tablonun içinde bazı metodları çağrıldığında ana sınıftan bazı yöntemleri çağırıyor.

Herhangi bir yardım için teşekkür ederiz. Eğer yanılmıyorsam

cevap

0

, bu hata görünür nerede:

Yukarıdaki kod statik yöntemde olduğu için, var
StartItem.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 

     start(); 
    } 
}); 

. Yalnızca Tray sınıfı için Tray örneğine herhangi bir başvuru yoktur. Ve start() yöntemi, sınıf için değil, bir Tray örneğine aittir. Tray örneği (değişken) için bir başvuru yapmanız gerekir.

  • Bu durumda
    , ShowTrayIcon yöntem örneğine ait olacaktır yönteminden önce statik anahtar kelimeyi kaldırmak ve start yöntem
  • bir Tray eklemek diyebiliriz:

    Bunun iki yolu var yöntem için parametre. Bu durumda
    , yöntem bu

Kanunu

private static void ShowTrayIcon(String status, Tray tray) { 
    // some code here 
    tray.start(); 
} 

Umut gibi bir şey olacaktır, bu yardımcı olur.