private void initTray() throws Exception { tray = SystemTray.getSystemTray(); PopupMenu m = new PopupMenu(); Font f = new Font("Tahoma", 0, 11); m.setFont(f); MenuItem mi = new MenuItem(Language.getLocalizedString(getClass(), "menuopen")); mi.setFont(f); mi.setFont( new Font( mi.getFont().getName(), mi.getFont().getStyle() | Font.BOLD, mi.getFont().getSize())); mi.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { openUI(); } }); m.add(mi); m.addSeparator(); mi = new MenuItem(Language.getLocalizedString(getClass(), "menuunload")); mi.setFont(f); mi.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { unloadUI(); } }); m.add(mi); m.addSeparator(); mi = new MenuItem(Language.getLocalizedString(getClass(), "menuexit")); mi.setFont(f); mi.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { shutdown(); } }); m.add(mi); Toolkit.getDefaultToolkit().getSystemEventQueue().push(new PopupFixQueue(m)); int[] imageSizes = {16, 24, 32, 48, 64, 128}; for (int size : imageSizes) { if (size - tray.getTrayIconSize().getWidth() < 0) { continue; } else { ti = new TrayIcon( Toolkit.getDefaultToolkit() .getImage(rl.getResource("gfx/icons/alliance" + size + ".png")), "Alliance", m); break; } } ti.setImageAutoSize(true); ti.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { openUI(); } }); tray.add(ti); ti.addActionListener( new ActionListener() { private long lastClickAt; @Override public void actionPerformed(ActionEvent e) { if (System.currentTimeMillis() - lastClickAt < 1000) { openUI(); } lastClickAt = System.currentTimeMillis(); } }); // Update tooltip periodically with current transfer rates Thread t = new Thread( new Runnable() { @Override public void run() { try { while (true) { ti.setToolTip( "Alliance v" + Version.VERSION + " build " + Version.BUILD_NUMBER + "\nDownload: " + core.getNetworkManager().getBandwidthIn().getCPSHumanReadable() + "\nUpload: " + core.getNetworkManager().getBandwidthOut().getCPSHumanReadable() + "\nOnline: " + core.getFriendManager().getNFriendsConnected() + "/" + core.getFriendManager().getNFriends() + " (" + TextUtils.formatByteSize( core.getFriendManager().getTotalBytesShared()) + ")"); Thread.sleep(5000); } } catch (InterruptedException e) { } catch (NullPointerException e) { } } }); t.setDaemon(true); t.start(); }