📄 launcher.java
字号:
frame.setResizable(true);
GraphicUtils.centerWindowOnScreen(frame);
frame.setVisible(true);
// Setup command area
final ImageIcon icon = new ImageIcon(getClass().getClassLoader().getResource("splash2.gif"));
pane = new DroppableTextPane() {
public void paintComponent(Graphics g) {
final Dimension size = pane.getSize();
int x = (size.width - icon.getIconWidth()) / 2;
int y = (size.height - icon.getIconHeight()) / 2;
// Approach 1: Dispaly image at at full size
g.setColor(Color.white);
g.fillRect(0, 0, size.width, size.height);
g.drawImage(icon.getImage(), x, y, null);
setOpaque(false);
super.paintComponent(g);
}
public void fileDropped(File file) {
String fileName = file.getName();
if (fileName.endsWith(".jar") || fileName.endsWith(".war")) {
installPlugin(file);
}
}
};
pane.setEditable(false);
final JPanel bevelPanel = new JPanel();
bevelPanel.setBackground(Color.white);
bevelPanel.setLayout(new BorderLayout());
bevelPanel.setBorder(BorderFactory.createLoweredBevelBorder());
bevelPanel.add(new JScrollPane(pane), BorderLayout.CENTER);
cardPanel.add("running", bevelPanel);
// Start the app.
startButton.doClick();
}
/**
* Creates a new GUI launcher instance.
*/
public static void main(String[] args) {
new Launcher();
}
private synchronized void startApplication() {
if (wildfired == null) {
try {
File windowsExe = new File(binDir, "wildfired.exe");
File unixExe = new File(binDir, "wildfired");
if (windowsExe.exists()) {
wildfired = Runtime.getRuntime().exec(new String[]{windowsExe.toString()});
}
else if (unixExe.exists()) {
wildfired = Runtime.getRuntime().exec(new String[]{unixExe.toString()});
}
else {
throw new FileNotFoundException();
}
}
catch (Exception e) {
// Try one more time using the jar and hope java is on the path
try {
File libDir = new File(binDir.getParentFile(), "lib").getAbsoluteFile();
wildfired = Runtime.getRuntime().exec(new String[]{
"java", "-jar", new File(libDir, "startup.jar").toString()
});
}
catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null,
"Launcher could not start,\n" + appName,
"File not found", JOptionPane.ERROR_MESSAGE);
}
}
final SimpleAttributeSet styles = new SimpleAttributeSet();
SwingWorker inputWorker = new SwingWorker() {
public Object construct() {
if (wildfired != null) {
try {
// Get the input stream and read from it
InputStream in = wildfired.getInputStream();
int c;
while ((c = in.read()) != -1) {
try {
StyleConstants.setFontFamily(styles, "courier new");
pane.getDocument().insertString(pane.getDocument().getLength(),
"" + (char)c, styles);
}
catch (BadLocationException e) {
// Ignore.
}
}
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return "ok";
}
};
inputWorker.start();
SwingWorker errorWorker = new SwingWorker() {
public Object construct() {
if (wildfired != null) {
try {
// Get the input stream and read from it
InputStream in = wildfired.getErrorStream();
int c;
while ((c = in.read()) != -1) {
try {
StyleConstants.setForeground(styles, Color.red);
pane.getDocument().insertString(pane.getDocument().getLength(), "" + (char)c, styles);
}
catch (BadLocationException e) {
// Ignore.
}
}
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return "ok";
}
};
errorWorker.start();
if (freshStart) {
try {
Thread.sleep(1000);
cardLayout.show(cardPanel, "running");
}
catch (Exception ex) {
// Ignore.
}
freshStart = false;
}
else {
// Clear Text
pane.setText("");
cardLayout.show(cardPanel, "running");
}
}
}
private synchronized void stopApplication() {
if (wildfired != null) {
try {
wildfired.destroy();
wildfired.waitFor();
cardLayout.show(cardPanel, "main");
}
catch (Exception e) {
e.printStackTrace();
}
}
wildfired = null;
}
private synchronized void launchBrowser() {
try {
// Note, we use standard DOM to read in the XML. This is necessary so that
// Launcher has fewer dependencies.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = factory.newDocumentBuilder().parse(configFile);
Element rootElement = document.getDocumentElement();
Element adminElement = (Element)rootElement.getElementsByTagName("adminConsole").item(0);
String port = "-1";
String securePort = "-1";
Element portElement = (Element)adminElement.getElementsByTagName("port").item(0);
if (portElement != null) {
port = portElement.getTextContent();
}
Element securePortElement = (Element)adminElement.getElementsByTagName("securePort").item(0);
if (securePortElement != null) {
securePort = securePortElement.getTextContent();
}
if ("-1".equals(port)) {
BrowserLauncher.openURL("https://127.0.0.1:" + securePort + "/index.html");
}
else {
BrowserLauncher.openURL("http://127.0.0.1:" + port + "/index.html");
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(new JFrame(), configFile + " " + e.getMessage());
}
}
private void installPlugin(final File plugin) {
final JDialog dialog = new JDialog(frame, "Installing Plugin", true);
dialog.getContentPane().setLayout(new BorderLayout());
JProgressBar bar = new JProgressBar();
bar.setIndeterminate(true);
bar.setString("Installing Plugin. Please wait...");
bar.setStringPainted(true);
dialog.getContentPane().add(bar, BorderLayout.CENTER);
dialog.pack();
dialog.setSize(225, 55);
final SwingWorker installerThread = new SwingWorker() {
public Object construct() {
File pluginsDir = new File(binDir.getParentFile(), "plugins");
String tempName = plugin.getName() + ".part";
File tempPluginsFile = new File(pluginsDir, tempName);
File realPluginsFile = new File(pluginsDir, plugin.getName());
// Copy Plugin into Dir.
try {
// Just for fun. Show no matter what for two seconds.
Thread.sleep(2000);
copy(plugin.toURL(), tempPluginsFile);
// If successfull, rename to real plugin name.
tempPluginsFile.renameTo(realPluginsFile);
}
catch (Exception e) {
e.printStackTrace();
}
return realPluginsFile;
}
public void finished() {
dialog.setVisible(false);
}
};
// Start installation
installerThread.start();
dialog.setLocationRelativeTo(frame);
dialog.setVisible(true);
}
private static void copy(URL src, File dst) throws IOException {
InputStream in = null;
OutputStream out = null;
try {
in = src.openStream();
out = new FileOutputStream(dst);
dst.mkdirs();
copy(in, out);
}
finally {
try {
if (in != null) {
in.close();
}
}
catch (IOException e) {
// Ignore.
}
try {
if (out != null) {
out.close();
}
}
catch (IOException e) {
// Ignore.
}
}
}
/**
* Common code for copy routines. By convention, the streams are
* closed in the same method in which they were opened. Thus,
* this method does not close the streams when the copying is done.
*/
private static void copy(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[4096];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead < 0) {
break;
}
out.write(buffer, 0, bytesRead);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -