这里的新手原谅我。
这是我的代码:
父/主/ 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
}
}
儿童班:
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()方法有效,但是当我尝试从trayicon的actionlistener调用它时,它一直说'非静态方法start()不能从静态上下文中引用'。
尝试在actionlistener方法中使用super.start(),但这也不起作用。
我正在努力做什么; Home类是我的JFrame和主类,我有另一个类设置来处理我的托盘图标,并在托盘中有一些按钮,在调用时会调用主类中的一些方法。
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果我是对的,这就是出现错误的地方:
StartItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
start();
}
});
那是因为上面的代码是静态方法。它没有Tray
实例的任何引用,仅适用于Tray
类。 start()
方法属于Tray
实例,不属于该类。您应该有一个Tray
实例(变量)的参考。
有两种方法:
ShowTrayIcon
方法属于实例,可以调用start
方法Tray
参数
在这种情况下,该方法将类似于此代码
private static void ShowTrayIcon(String status, Tray tray) {
// some code here
tray.start();
}
希望,这有帮助。