如何使 Java 应用程序打开控制台/终端窗口?

有没有办法制作一个可执行.jar,双击时会打开命令行?

我正在制作一个基于文本的冒险游戏。截至目前,它只是一个有房间的迷宫。最终,它将变得更大,更深入,但现在我只想把基本结构弄下来。无论如何,为了完成这项工作,我一直在从System.out.printf命令和java.util.Scanner获得输出和输入。到目前为止,一切都运行得很好,但是我意识到当我尝试将其发送给其他不知道如何操作或只是不想从命令行运行程序的人时,我会遇到问题。


答案 1

我在自己寻找答案时发现了这一点,我最终写了这一点:

/**
 * This opens a command line and runs some other class in the jar
 * @author Brandon Barajas
 */
import java.io.*;
import java.awt.GraphicsEnvironment;
import java.net.URISyntaxException;
public class Main{
    public static void main (String [] args) throws IOException, InterruptedException, URISyntaxException{
        Console console = System.console();
        if(console == null && !GraphicsEnvironment.isHeadless()){
            String filename = Main.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6);
            Runtime.getRuntime().exec(new String[]{"cmd","/c","start","cmd","/k","java -jar \"" + filename + "\""});
        }else{
            THEMAINCLASSNAMEGOESHERE.main(new String[0]);
            System.out.println("Program has ended, please type 'exit' to close the console");
        }
    }
}

不确定我的答案是否仍然相关,但请随时将其与保存在o/ 中的评论一起使用

我能想到的唯一缺陷是它在程序完成后使cmd窗口保持打开状态。

用法:将此类放在与主类相同的包中,并将其设置为主类,如果没有打开,它将打开命令提示符窗口,或者如果一个打开,则启动主类。jar文件的名称/位置是自动的。专为Windows设计,但如果你想要它用于另一个系统,只需给我发消息,我会修复它。(我可以做操作系统检测,但我很懒,只是这样做,这样我就可以把一个双击jar文件交给我使用Windows的教授)。


答案 2

如果你想要完全控制,你可以在 Swing 中实现一个 Console 窗口,它可以完成你现在拥有的功能。

如果您无法打开所述窗口(如果无头窗口)或用户在命令行上要求它,则默认为当前行为。


推荐