You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
5.8 KiB
191 lines
5.8 KiB
package com.fr.start.server; |
|
|
|
import com.fr.base.BaseUtils; |
|
import com.fr.design.ui.util.UIUtil; |
|
import com.fr.event.Event; |
|
import com.fr.event.EventDispatcher; |
|
import com.fr.event.ListenerAdaptor; |
|
import com.fr.log.FineLoggerFactory; |
|
|
|
import java.awt.AWTException; |
|
import java.awt.Image; |
|
import java.awt.MenuItem; |
|
import java.awt.PopupMenu; |
|
import java.awt.SystemTray; |
|
import java.awt.TrayIcon; |
|
import java.awt.event.ActionEvent; |
|
import java.awt.event.ActionListener; |
|
import java.awt.event.MouseAdapter; |
|
import java.awt.event.MouseEvent; |
|
|
|
/** |
|
* Create server tray. |
|
*/ |
|
public class ServerTray { |
|
|
|
private static ServerTray INSTANCE; |
|
|
|
private MenuItem startMenu; |
|
|
|
private MenuItem stopMenu; |
|
|
|
private Image trayStartedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStarted@2x.png"); |
|
|
|
private Image trayStoppedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStopped@2x.png"); |
|
|
|
private ServerManageFrame serverManageFrame; |
|
|
|
private TrayIcon trayIcon; |
|
|
|
|
|
private ServerTray() { |
|
|
|
listen(); |
|
//p:首先构建右键菜单 |
|
PopupMenu popup = new PopupMenu(); |
|
MenuItem manangeMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Open_Service_Manager")); |
|
manangeMenu.addActionListener(new ActionListener() { |
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
serverManageFrame = ServerManageFrame.getServerManageFrame(); |
|
if (!serverManageFrame.isVisible()) { |
|
serverManageFrame.setVisible(true); |
|
} |
|
serverManageFrame.toFront();//p:到第一个. |
|
} |
|
}); |
|
startMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server_Start")); |
|
stopMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server_Stop")); |
|
MenuItem exitMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_M_Exit")); |
|
//创建打开监听器 |
|
ActionListener startListener = new ActionListener() { |
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
try { |
|
FineEmbedServer.start(); |
|
} catch (Exception exp) { |
|
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
|
} |
|
} |
|
}; |
|
ActionListener stopListener = new ActionListener() { |
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
try { |
|
FineEmbedServer.stop(); |
|
} catch (Throwable exp) { |
|
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
|
} |
|
} |
|
}; |
|
startMenu.addActionListener(startListener); |
|
stopMenu.addActionListener(stopListener); |
|
//创建退出菜单监听器 |
|
ActionListener exitListener = new ActionListener() { |
|
|
|
@Override |
|
public void actionPerformed(ActionEvent e) { |
|
|
|
exit(); |
|
} |
|
}; |
|
|
|
exitMenu.addActionListener(exitListener); |
|
popup.add(manangeMenu); |
|
popup.addSeparator(); |
|
popup.add(startMenu); |
|
popup.add(stopMenu); |
|
popup.addSeparator(); |
|
popup.add(exitMenu); |
|
|
|
//p:开始创建托盘. |
|
trayIcon = new TrayIcon(trayStartedImage, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server"), popup); |
|
trayIcon.setImageAutoSize(true); |
|
trayIcon.addMouseListener(new MouseAdapter() { |
|
|
|
public void mouseClicked(MouseEvent e) { |
|
|
|
if (e.getClickCount() < 2) { |
|
return; |
|
} |
|
|
|
ServerManageFrame serverManageFrame = ServerManageFrame.getServerManageFrame(); |
|
if (!serverManageFrame.isVisible()) { |
|
serverManageFrame.setVisible(true); |
|
} |
|
serverManageFrame.toFront();//p:到第一个. |
|
} |
|
}); |
|
|
|
TrayIcon[] icons = SystemTray.getSystemTray().getTrayIcons(); |
|
for (TrayIcon icon : icons) { |
|
SystemTray.getSystemTray().remove(icon); |
|
} |
|
|
|
try { |
|
SystemTray.getSystemTray().add(trayIcon); |
|
} catch (AWTException e) { |
|
System.err.println("Can not create the System Tray:" + e); |
|
} |
|
|
|
checkPopupMenuItemEnabled(); |
|
} |
|
|
|
private void listen() { |
|
|
|
ListenerAdaptor listenerAdaptor = new ListenerAdaptor() { |
|
|
|
@Override |
|
protected void on(Event event) { |
|
|
|
checkPopupMenuItemEnabled(); |
|
} |
|
}; |
|
EventDispatcher.listen(EmbedServerEvent.AfterStart, listenerAdaptor); |
|
EventDispatcher.listen(EmbedServerEvent.AfterStop, listenerAdaptor); |
|
} |
|
|
|
private void exit() { |
|
|
|
FineEmbedServer.stop(); |
|
SystemTray.getSystemTray().remove(trayIcon); |
|
} |
|
|
|
private void checkPopupMenuItemEnabled() { |
|
|
|
try { |
|
if (FineEmbedServer.isRunning()) { |
|
startMenu.setEnabled(false); |
|
stopMenu.setEnabled(true); |
|
|
|
trayIcon.setImage(trayStartedImage); |
|
} else { |
|
startMenu.setEnabled(true); |
|
stopMenu.setEnabled(false); |
|
|
|
trayIcon.setImage(trayStoppedImage); |
|
} |
|
|
|
if (serverManageFrame != null) { |
|
serverManageFrame.checkButtonEnabled(); |
|
serverManageFrame.repaint(); |
|
} |
|
} catch (Exception exp) { |
|
FineLoggerFactory.getLogger().error(exp.getMessage(), exp); |
|
} |
|
} |
|
|
|
public static void init() { |
|
UIUtil.invokeLaterIfNeeded(new Runnable() { |
|
@Override |
|
public void run() { |
|
if (INSTANCE == null) { |
|
INSTANCE = new ServerTray(); |
|
} |
|
} |
|
}); |
|
} |
|
}
|
|
|