我现在正在执行java这样的java程序:
package com.test;
public class Test {
public static void main(String[] args){
execute();
}
public static String execute(){
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "a";
}
}
我想在linux shell脚本中执行Test.execute()方法,等到方法返回并获取返回代码。但是main()方法的返回是无效的,那么我可以做什么来获取返回代码或从中返回消息?
有什么建议吗?
我找到了解决方案:
package com.test;
public class Test {
public static void main(String[] args){
execute();
}
public static String execute(){
try {
System.out.println("sleeping");;
Thread.sleep(5000);
Runtime.getRuntime().exit(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "a";
}
}
然后我的shell:
#!/bin/bash
java -cp test.jar com.test.Test
echo "The return code of the java application is $?"
我可以得到Runtime.getRuntime().exit(n)
;
答案 0 :(得分:0)
shell脚本必须调用java com.test.Test
。这将调用inturn当前正在调用execute的main方法。
从shell脚本开始,您必须启动JVM,JVM始终以Main方法启动。
至于返回代码,您可以使用$?
shell变量访问它。
所以基本上你的shell脚本就是这样的:
#!/bin/bash
java -cp . com.test.Test
echo "The return code of the java application is $?"
此外,您还需要指定所有相关类所在的类路径。在上面的例子中,我将当前目录作为类路径。
在完成所有非守护程序线程后,JVM将以退出代码0终止。如果要在出现错误时返回特定的退出代码,可以使用System.exit(<codehere>)
。请注意,即使存在正在运行的其他非守护程序线程,调用System.exit()
也会导致JVM关闭。
编辑: 添加&#34; -cp。&#34;基于评论的命令。 添加了一些退出代码详细信息
答案 1 :(得分:0)
首先在代码示例中更改main
方法的签名:
public static void main()
至public static void main(String[] args)
然后,不要只从execute
调用main
方法,而是尝试使用System.out.println
打印结果:
System.out.println(execute());
然后在linux shell中你可以使用以下来获取返回值:
> set out = `java com.test.Test`
> echo $out