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);
}
有了这个,我也可以通过命令行参数控制行为。
欢迎使用不同的解决方案,但现在这适用于我的目的。
答案 0 :(得分:0)
您可以编写一个简单的.bat文件。 只需将cmd语句写入文件并将其另存为“随机”.bat
即可