我使用下面的脚本(.sh文件)在UNIX系统中运行java代码,但即使Java在两种情况下都给出异常或成功终止,退出代码以0形式出现,如果Java运行抛出异常,则从脚本返回非零退出代码,以便添加if -然后签入脚本,打印成功或失败消息。
#!/bin/sh
echo 'processing started -->>'
LOC=/opt/appl/Mapping/
export JAVA_HOME=/usr/java6
export PATH=/usr/java6/bin
LD_LIBRARY_PATH=/opt/appl/JARS/
export LD_LIBRARY_PATH
java -classpath $LOC/ojdbc6-11.2.0.3.0.jar:$LOC/ds35-02.00.11.jar:$LOC/log4j-1.2.17.jar:$LOC/TestClasses.jar:$LOC/db2jcc_license_cisuz-3.0.0.jar:$LOC/db2jcc_license_cu-3.0.0.jar:$LOC/db2jcc-3.0.0.jar -Xms256M -Xmx512M com.home.backfill.TestRun我可以在Java文件中使用System.exit(1)并在catch块上使用System.exit(1),但是我正在寻找任何好的通用方法,因为我的代码可能很长,不确定在每个catch块中放置System.exit(1)是否是个好主意。
发布于 2016-04-11 08:56:51
如果我正确地理解了您,为什么不运行一个通用函数来决定返回哪种代码呢?
try {
//your code here
} catch(YourException e){
Handler.handle(e);
}其中,Handler.handle(e)接受异常并确定关闭系统的整数。至少在这里,您有一个集中的点,系统将关闭。
发布于 2016-04-11 09:03:52
如果你想要一些通用的东西:
interface ExceptionAction {
public void apply() throws Exception;
}
class Catcher {
public static void invoke(ExceptionAction ea) {
try{
ea.apply();
} catch(Exception e) {
System.exit(1);
}
}
}然后通过创建lambdas来调用。(必须将任何“返回”值设置为捕获的局部变量):
Catcher.invoke(() -> {
/// your code here
});我要指出的是,这与try/catch一样冗长,而后者可能更易读/更通俗。
https://stackoverflow.com/questions/36543900
复制相似问题