弹簧启动罐双击

时间:2014-05-28 10:44:03

标签: java spring

Spring启动应用程序可以通过双击.jar开始,但不打开任何终端或其他东西,所以tomcat在端口8080上运行,我必须从任务管理器中删除它(有点烦人)当运行不同的java应用程序时)。 有没有办法强制spring / java打开终端或用新窗口创建运行上下文?

我知道我可以从java -jar application.jar的终端打开jar,当杀死终端时,服务器也会被杀死。但是对于客户需求,双击解决方案会很有趣。

由于

编辑: 现在我的主要课程看起来

public static void main(String[] args) {
  ApplicationContext ctx = SpringApplication.run(Application.class, args);
}

编辑#2 - 可能的解决方案:

通过评论,我得到了关于打开终端窗口的想法。什么是可能的,但命令因每个系统而异。因此,使用不同系统进行测试有点复杂。

所以我的实际解决方案是打开一个java窗口并将控制台输出重定向到此窗口。我找到here并且只编辑了几行,所以java窗口现在看起来像这样:

import java.awt.BorderLayout;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class TextAreaOutputStreamTest extends JPanel {

private JTextArea textArea = new JTextArea(15, 30);
private TextAreaOutputStream taOutputStream = new TextAreaOutputStream(
        textArea, "> ");

public TextAreaOutputStreamTest() {
    setLayout(new BorderLayout());
    add(new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
    System.setOut(new PrintStream(taOutputStream));

}

private static void createAndShowGui() {
    JFrame frame = new JFrame("Output");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new TextAreaOutputStreamTest());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

public static void mainRunner(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGui();
        }
    });
}
}

class TextAreaOutputStream extends OutputStream {

private final JTextArea textArea;
private final StringBuilder sb = new StringBuilder();
private String title;

public TextAreaOutputStream(final JTextArea textArea, String title) {
    this.textArea = textArea;
    this.title = title;
    sb.append(title);
}

@Override
public void flush() {
}

@Override
public void close() {
}

@Override
public void write(int b) throws IOException {

    if (b == '\r')
        return;

    if (b == '\n') {
        final String text = sb.toString() + "\n";
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                textArea.append(text);
            }
        });
        sb.setLength(0);
        sb.append(title);
        return;
    }

    sb.append((char) b);
}
}

我用

的主要方法调用它
public static void main(String[] args) throws IOException {
    if (args.length == 0) {
        TextAreaOutputStreamTest.mainRunner(args);
    }
    ApplicationContext ctx = SpringApplication.run(Application.class, args);
}

有了这个,我也可以通过命令行参数控制行为。

欢迎使用不同的解决方案,但现在这适用于我的目的。

1 个答案:

答案 0 :(得分:0)

您可以编写一个简单的.bat文件。 只需将cmd语句写入文件并将其另存为“随机”.bat

即可