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.
180 lines
5.5 KiB
180 lines
5.5 KiB
7 years ago
|
package com.fr.start.server;
|
||
|
|
||
7 years ago
|
import com.fr.base.BaseUtils;
|
||
|
import com.fr.base.FRContext;
|
||
7 years ago
|
import com.fr.event.Event;
|
||
|
import com.fr.event.EventDispatcher;
|
||
|
import com.fr.event.ListenerAdaptor;
|
||
7 years ago
|
import com.fr.general.Inter;
|
||
|
|
||
|
import java.awt.*;
|
||
7 years ago
|
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 {
|
||
7 years ago
|
|
||
|
private static ServerTray INSTANCE;
|
||
|
|
||
|
private MenuItem startMenu;
|
||
|
|
||
|
private MenuItem stopMenu;
|
||
|
|
||
|
private Image trayStartedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStarted.png");
|
||
|
|
||
|
private Image trayStoppedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStopped.png");
|
||
|
|
||
|
private ServerManageFrame serverManageFrame;
|
||
|
|
||
|
private TrayIcon trayIcon;
|
||
7 years ago
|
|
||
|
|
||
|
private ServerTray() {
|
||
|
|
||
|
listen();
|
||
|
//p:首先构建右键菜单
|
||
|
PopupMenu popup = new PopupMenu();
|
||
7 years ago
|
MenuItem manangeMenu = new MenuItem(Inter.getLocText("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:到第一个.
|
||
|
}
|
||
|
});
|
||
7 years ago
|
startMenu = new MenuItem(Inter.getLocText("FR-Server_Embedded_Server_Start"));
|
||
|
stopMenu = new MenuItem(Inter.getLocText("FR-Server_Embedded_Server_Stop"));
|
||
7 years ago
|
MenuItem exitMenu = new MenuItem(Inter.getLocText("Exit"));
|
||
|
//创建打开监听器
|
||
|
ActionListener startListener = new ActionListener() {
|
||
|
|
||
|
public void actionPerformed(ActionEvent e) {
|
||
|
|
||
|
try {
|
||
|
FineEmbedServer.start();
|
||
|
} catch (Exception exp) {
|
||
|
FRContext.getLogger().error(exp.getMessage(), exp);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
ActionListener stopListener = new ActionListener() {
|
||
|
|
||
|
public void actionPerformed(ActionEvent e) {
|
||
|
|
||
|
try {
|
||
|
FineEmbedServer.stop();
|
||
|
} catch (Throwable exp) {
|
||
|
FRContext.getLogger().error(exp.getMessage(), exp);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
startMenu.addActionListener(startListener);
|
||
|
stopMenu.addActionListener(stopListener);
|
||
|
//创建退出菜单监听器
|
||
|
ActionListener exitListener = new ActionListener() {
|
||
|
|
||
|
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, Inter.getLocText("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();
|
||
|
}
|
||
7 years ago
|
|
||
|
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() {
|
||
7 years ago
|
|
||
|
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) {
|
||
7 years ago
|
FRContext.getLogger().error(exp.getMessage(), exp);
|
||
7 years ago
|
}
|
||
|
}
|
||
7 years ago
|
|
||
7 years ago
|
public static void init() {
|
||
|
|
||
|
INSTANCE = new ServerTray();
|
||
|
|
||
7 years ago
|
}
|
||
9 years ago
|
}
|