Java 更新托盘中的标签
有一个java桌面应用程序的类托盘,我必须更新打开弹出窗口时使用的磁盘配额的值 1) 托盘类Java 更新托盘中的标签,java,awt,Java,Awt,有一个java桌面应用程序的类托盘,我必须更新打开弹出窗口时使用的磁盘配额的值 1) 托盘类 public class Tray implements Observer { static Logger log = Logger.getLogger(Tray.class); static WDServer wds; static StatusWindow sw; boolean connected; Tray
public class Tray implements Observer {
static Logger log = Logger.getLogger(Tray.class);
static WDServer wds;
static StatusWindow sw;
boolean connected;
TrayIcon trayIcon;
String volSize = "";
public Tray() {
log.info("installing system tray menu");
if (SystemTray.isSupported()) {
TrayUtils tu = new TrayUtils(1000);
final SystemTray sysTray = SystemTray.getSystemTray();
final PopupMenu popup = new PopupMenu();
MenuItem quotaDisk = new MenuItem(tu.getLabelDisk());
popup.add(quotaDisk);
popup.addSeparator();
...
2) 具有可运行接口的嵌套TrayUtils类
public class TrayUtils extends Thread implements Runnable {
long delay;
long bytes;
String labelDisk = "";
public TrayUtils(long delay) {
this.delay = delay;
}
@Override
public void run() {
while (true) {
try {
setBytes(FileUtils.sizeOfDirectory(new File(System.getProperty("user.home") + "/.ubi/data")));
Thread.sleep(this.delay);
} catch (InterruptedException e) {
log.error("error checking disk space used");
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
setLabelDisk("Storage Used: " + FileUtils.byteCountToDisplaySize(getBytes()));
}
});
}
}
<getters & setters here>
}
public类TrayUtils扩展线程实现可运行{
长延时;
长字节;
字符串labelDisk=“”;
公共交通工具(长时间延误){
延迟=延迟;
}
@凌驾
公开募捐{
while(true){
试一试{
setBytes(FileUtils.sizeOfDirectory(新文件(System.getProperty(“user.home”)+“/.ubi/data”));
Thread.sleep(这个延迟);
}捕捉(中断异常e){
log.error(“检查所用磁盘空间时出错”);
}
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
setLabelDisk(“使用的存储:+FileUtils.byteCountToDisplaySize(getBytes()));
}
});
}
}
}
为什么我不能在弹出窗口中显示存储状态?实现这些功能的正确设计是什么
我必须使用
awt
,因此这里不欢迎使用JLabel
。多亏了PM,javax.swing.Timer完成了以下工作:
// Update space used every 1s
ActionListener taskQuota = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
quotaDisk.setLabel("Storage used: " + checkVolSize());
}
};
new Timer(1000, taskQuota).start();
setLabelDisk
中有什么?源自apache.common.io:将字节转换为人类可读值的方法;setter public void setLabelDisk(String labelDisk){this.labelDisk=labelDisk;}那么GUI的其余部分在哪里?您在哪里创建您的或您使用的任何awt
组件??标签是使用java.awt.MenuItem实例创建的:MenuItem quotaDisk=new MenuItem(“标签”);请重申你的问题。“弹出窗口中的存储状态”到底是什么?是什么阻止你展示它?我建议您编辑您的问题,提供手头问题和您的特定问题的更多细节。