我有编写具有适用于多个平台的本机控制台行为的Java应用程序的实际任务。 我设法检测平台和环境软件就好了。
我使用Netbeans原生包装为每个平台创建带有consoleapp二进制文件的包。
public class ConnTrol {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Console c = System.console();
if (c == null) {
if (System.getProperty("os.name").contains("Linux")) {
try {
Runtime.getRuntime().exec(new String[]{"konsole","--noclose","-e",AppPath.getPath()+"/../consoleapp"});
} catch (IOException ex) {
}
} else if (System.getProperty("os.name").contains("Windows")) {
try {
Runtime.getRuntime().exec(new String[]{"cmd","/c","start",AppPath.getPath()+"\\..\\consoleapp.exe"});
} catch (IOException ex) {
}
}
System.exit(0);
}
c.printf("Hello world!%n");
}
}
扩展版本检查* nix系统上的不同控制台版本。
我看到的棘手部分是让它在Windows上运行。 问题是在Windows上创建的“consoleapp.exe”始终是Windows应用程序(不是控制台应用程序),因此如果应用程序未在控制台中运行并尝试在控制台中运行其副本,则该副本的I / O也未连接到调用控制台,应用程序最终在死循环中重新启动。
非常感谢任何帮助!