Java 从另一个类访问TrayIcon
我有两个类,在第一个WoodyGui中,我实现了GUI,将ActionListener应用于唯一的JButton,并将TrayIcon添加到SystemTray。 通过响应按钮生成的ActionEvent,我希望所有的细节都在二等WoodyEng中进行,一旦完成,我希望它在TrayIcon上显示一个通知。 但是我怎样才能从二等舱进入trayIcon?我通常收到的错误消息是: 知道我遗漏了什么吗?为什么我不能像使用JButton一样从第二个类访问TrayIcon引用变量?非常感谢你的帮助Java 从另一个类访问TrayIcon,java,system-tray,trayicon,Java,System Tray,Trayicon,我有两个类,在第一个WoodyGui中,我实现了GUI,将ActionListener应用于唯一的JButton,并将TrayIcon添加到SystemTray。 通过响应按钮生成的ActionEvent,我希望所有的细节都在二等WoodyEng中进行,一旦完成,我希望它在TrayIcon上显示一个通知。 但是我怎样才能从二等舱进入trayIcon?我通常收到的错误消息是: 知道我遗漏了什么吗?为什么我不能像使用JButton一样从第二个类访问TrayIcon引用变量?非常感谢你的帮助 impo
import java.awt.*;
import java.awt.event.*;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import javax.swing.*;
public class WoodyGui extends JFrame implements ActionListener {
WoodyEng doer = new WoodyEng(this);
JPanel area = new JPanel();
JButton button = new JButton("GO!");
// constructor
public WoodyGui () {
super("woody");
setSize (150,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(doer);
area.add(button);
add(area);
setVisible(true);
if (SystemTray.isSupported()) {
final TrayIcon trayIcon = new TrayIcon(new ImageIcon("icon.png", "").getImage(), "tray icon");
final SystemTray tray = SystemTray.getSystemTray();
try {
tray.add(trayIcon);
} catch (AWTException ex) {
System.out.println("TrayIcon could not be added.");
}
}
}
public static void main(String[] arguments) {
WoodyGui pecker = new WoodyGui();
}
}
这是第二节课:
import java.awt.event.*;
import java.awt.SystemTray;
import java.awt.TrayIcon;
WoodyGui gui;
Thread quack;
public WoodyEng (WoodyGui in) {
gui = in;
}
public void actionPerformed(ActionEvent eve) {
Object who = eve.getSource();
if (who == gui.button)
{
if (quack == null) {
quack = new Thread(this);
quack.start();
}
}
}
public void run() {
Thread thisThread = Thread.currentThread();
while (quack == thisThread) {
// all elaboration would occur here
trayIcon.displayMessage("Woody","notification!!",TrayIcon.MessageType.INFO);
if (quack != null) {
quack = null;
}
}
}
}
我相信你发布的代码是不完整的。WoodyEng的run方法中的trayIcon变量是什么?我已将其更改为:gui.trayIcon.displayMessage。。。但我得到了同样的错误信息:-首先,WoodyEng需要实现Runnable,这样就可以调用quack=newthreadthis;和ActionListener,以便它可以处理按钮操作。此外,trayIcon仅在WoodyGui构造函数的if子句中可见。非常感谢您的见解。它的工作原理似乎是将SystemTray和TrayIcon TrayIcon声明为类变量。。。WoodyEng确实实现了Runnable,我只是忘了写下来,对不起,谢谢!
import java.awt.event.*;
import java.awt.SystemTray;
import java.awt.TrayIcon;
WoodyGui gui;
Thread quack;
public WoodyEng (WoodyGui in) {
gui = in;
}
public void actionPerformed(ActionEvent eve) {
Object who = eve.getSource();
if (who == gui.button)
{
if (quack == null) {
quack = new Thread(this);
quack.start();
}
}
}
public void run() {
Thread thisThread = Thread.currentThread();
while (quack == thisThread) {
// all elaboration would occur here
trayIcon.displayMessage("Woody","notification!!",TrayIcon.MessageType.INFO);
if (quack != null) {
quack = null;
}
}
}
}