Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新托盘中的标签_Java_Awt - Fatal编程技术网

Java 更新托盘中的标签

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

有一个java桌面应用程序的类托盘,我必须更新打开弹出窗口时使用的磁盘配额的值

1) 托盘类

    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(“标签”);请重申你的问题。“弹出窗口中的存储状态”到底是什么?是什么阻止你展示它?我建议您编辑您的问题,提供手头问题和您的特定问题的更多细节。