📄 launcher.java
字号:
/**
* $RCSfile$
* $Revision: 3054 $
* $Date: 2005-11-10 21:08:33 -0300 (Thu, 10 Nov 2005) $
*
* Copyright (C) 2004 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.wildfire.launcher;
import org.jdesktop.jdic.tray.SystemTray;
import org.jdesktop.jdic.tray.TrayIcon;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.URL;
/**
* Graphical launcher for Wildfire.
*
* @author Matt Tucker
*/
public class Launcher {
private String appName;
private File binDir;
private Process wildfired;
private String configFile;
private JPanel toolbar = new JPanel();
private ImageIcon offIcon;
private ImageIcon onIcon;
private TrayIcon trayIcon;
private JFrame frame;
private JPanel cardPanel = new JPanel();
private CardLayout cardLayout = new CardLayout();
private JTextPane pane;
private boolean freshStart = true;
/**
* Creates a new Launcher object.
*/
public Launcher() {
// Initialize the SystemTray now (to avoid a bug!)
SystemTray tray = null;
try {
tray = SystemTray.getDefaultSystemTray();
}
catch (Throwable e) {
// Log to System error instead of standard error log.
System.err.println("Error loading system tray library, system tray support disabled.");
}
// Use the native look and feel.
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
e.printStackTrace();
}
if (System.getProperty("app.name") != null) {
appName = System.getProperty("app.name");
}
else {
appName = "Wildfire";
}
binDir = new File("").getAbsoluteFile();
// See if the appdir property is set. If so, use it to find the executable.
if (System.getProperty("appdir") != null) {
binDir = new File(System.getProperty("appdir"));
}
configFile = new File(new File(binDir.getParent(), "conf"),
"wildfire.xml").getAbsolutePath();
frame = new DroppableFrame() {
public void fileDropped(File file) {
String fileName = file.getName();
if (fileName.endsWith(".jar") || fileName.endsWith(".war")) {
installPlugin(file);
}
}
};
frame.setTitle(appName);
ImageIcon splash;
JPanel mainPanel = new JPanel();
JLabel splashLabel = null;
cardPanel.setLayout(cardLayout);
// Set the icon.
try {
splash = new ImageIcon(getClass().getClassLoader().getResource("splash.gif"));
splashLabel = new JLabel("", splash, JLabel.CENTER);
onIcon = new ImageIcon(getClass().getClassLoader().getResource("wildfire_on-16x16.gif"));
offIcon = new ImageIcon(getClass().getClassLoader().getResource("wildfire_off-16x16.gif"));
frame.setIconImage(offIcon.getImage());
}
catch (Exception e) {
e.printStackTrace();
}
mainPanel.setLayout(new BorderLayout());
cardPanel.setBackground(Color.white);
// Add buttons
final JButton startButton = new JButton("Start");
startButton.setActionCommand("Start");
final JButton stopButton = new JButton("Stop");
stopButton.setActionCommand("Stop");
final JButton browserButton = new JButton("Launch Admin");
browserButton.setActionCommand("Launch Admin");
final JButton quitButton = new JButton("Quit");
quitButton.setActionCommand("Quit");
toolbar.setLayout(new GridBagLayout());
toolbar.add(startButton, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
toolbar.add(stopButton, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
toolbar.add(browserButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
toolbar.add(quitButton, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
mainPanel.add(cardPanel, BorderLayout.CENTER);
mainPanel.add(toolbar, BorderLayout.SOUTH);
// create the main menu of the system tray icon
JPopupMenu menu = new JPopupMenu(appName + " Menu");
final JMenuItem showMenuItem = new JMenuItem("Hide");
showMenuItem.setActionCommand("Hide/Show");
menu.add(showMenuItem);
final JMenuItem startMenuItem = new JMenuItem("Start");
startMenuItem.setActionCommand("Start");
menu.add(startMenuItem);
final JMenuItem stopMenuItem = new JMenuItem("Stop");
stopMenuItem.setActionCommand("Stop");
menu.add(stopMenuItem);
final JMenuItem browserMenuItem = new JMenuItem("Launch Admin");
browserMenuItem.setActionCommand("Launch Admin");
menu.add(browserMenuItem);
menu.addSeparator();
final JMenuItem quitMenuItem = new JMenuItem("Quit");
quitMenuItem.setActionCommand("Quit");
menu.add(quitMenuItem);
browserButton.setEnabled(false);
stopButton.setEnabled(false);
browserMenuItem.setEnabled(false);
stopMenuItem.setEnabled(false);
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if ("Start".equals(e.getActionCommand())) {
frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
// Adjust button and menu items.
startButton.setEnabled(false);
stopButton.setEnabled(true);
startMenuItem.setEnabled(false);
stopMenuItem.setEnabled(true);
// Startup Application
startApplication();
// Change to the "on" icon.
frame.setIconImage(onIcon.getImage());
trayIcon.setIcon(onIcon);
// Start a thread to enable the admin button after 8 seconds.
Thread thread = new Thread() {
public void run() {
try {
sleep(8000);
}
catch (InterruptedException ie) {
// Ignore.
}
// Enable the Launch Admin button/menu item only if the
// server has started.
if (stopButton.isEnabled()) {
browserButton.setEnabled(true);
browserMenuItem.setEnabled(true);
frame.setCursor(Cursor.getDefaultCursor());
}
}
};
thread.start();
}
else if ("Stop".equals(e.getActionCommand())) {
stopApplication();
// Change to the "off" button.
frame.setIconImage(offIcon.getImage());
trayIcon.setIcon(offIcon);
// Adjust buttons and menu items.
frame.setCursor(Cursor.getDefaultCursor());
browserButton.setEnabled(false);
startButton.setEnabled(true);
stopButton.setEnabled(false);
browserMenuItem.setEnabled(false);
startMenuItem.setEnabled(true);
stopMenuItem.setEnabled(false);
}
else if ("Launch Admin".equals(e.getActionCommand())) {
launchBrowser();
}
else if ("Quit".equals(e.getActionCommand())) {
stopApplication();
System.exit(0);
}
else if ("Hide/Show".equals(e.getActionCommand()) || "PressAction".equals(e.getActionCommand())) {
// Hide/Unhide the window if the user clicked in the system tray icon or
// selected the menu option
if (frame.isVisible()) {
frame.setVisible(false);
frame.setState(Frame.ICONIFIED);
showMenuItem.setText("Show");
}
else {
frame.setVisible(true);
frame.setState(Frame.NORMAL);
showMenuItem.setText("Hide");
}
}
}
};
// Register a listener for the radio buttons.
startButton.addActionListener(actionListener);
stopButton.addActionListener(actionListener);
browserButton.addActionListener(actionListener);
quitButton.addActionListener(actionListener);
// Register a listener for the menu items.
quitMenuItem.addActionListener(actionListener);
browserMenuItem.addActionListener(actionListener);
stopMenuItem.addActionListener(actionListener);
startMenuItem.addActionListener(actionListener);
showMenuItem.addActionListener(actionListener);
// Set the system tray icon with the menu
trayIcon = new TrayIcon(offIcon, appName, menu);
trayIcon.setIconAutoSize(true);
trayIcon.addActionListener(actionListener);
if (tray != null) {
tray.addTrayIcon(trayIcon);
}
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
stopApplication();
System.exit(0);
}
public void windowIconified(WindowEvent e) {
// Make the window disappear when minimized
frame.setVisible(false);
showMenuItem.setText("Show");
}
});
cardPanel.add("main", splashLabel);
frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
frame.pack();
frame.setSize(400, 300);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -