java如何从java内部捕获退出代码?
Posted
技术标签:
【中文标题】java如何从java内部捕获退出代码?【英文标题】:how can java catch exit code from inside java? 【发布时间】:2017-06-13 14:39:35 【问题描述】:我的 java 代码运行一个抛出退出代码的 main 方法。
如何捕获退出代码而不停止运行时?
ConfigValidator.main(new String[] "-dirs", SdkServiceConfig.s.PROPERTIES_FILE_PATH);
我想用
ProcessBuilder builder = new ProcessBuilder(commands);
Process process = builder.start();
int waitFor = process.waitFor();
int a = process.exitCode()
但是我怎样才能运行它来运行 java 代码呢?
我无法更改“main”方法中的代码
【问题讨论】:
您提供的信息似乎不完整。您是否考虑将这些东西包装在 main() 中的 try catch 中? 找到这篇文章:***.com/questions/5549720/… 【参考方案1】:java 代码不会抛出退出代码。
那是因为退出码是整数,不能抛出整数,只能抛出异常。
Java 代码exits 带有退出代码。
(我希望我可以说java代码返回退出代码,但不幸的是,java语言的设计者决定让main()
函数返回void
而不是退出代码,这让事情变得有点困难。)
以下 *** 答案建议使用防止调用 System.exit()
的安全管理器。因此,尝试调用System.exit()
将导致SecurityException
,然后您可以从调用main()
函数的位置捕获该异常。
堆栈溢出:Java: How to test methods that call System.exit()?
当然,做事的正确方法是重组main()
,使其不会调用System.exit()
,这样您就不必做这样的骇人听闻的事情了。
【讨论】:
感谢您的链接。但是如何从非 JUNIT 代码中使用它? 该答案由两部分组成,一个是我上面提到的,另一个是特定于junit的。您可以忽略特定于 junit 的第二部分。此外,junit 并没有什么神奇之处:如果您需要在非测试代码中使用它,您可以。而且,如果您正在执行诸如从生产代码中调用main()
之类的非常骇人听闻的事情,那么包含 junit 应该是您遇到的最少问题。
我使用了 java securityManager,但是每当我尝试打开任何文件时都会被拒绝访问权限
对不起,我不知道该说什么。我之前没有故意启用安全管理器的经验。如果我的回答对您没有帮助,请不要“接受”它。其他人可能会发布一个可能更有用的答案。【参考方案2】:
请尝试使用 Thread.sleep() 方法来避免程序退出,但我不确定它是否适合您。可能您需要通过系统输入或其他方式中断应用程序的执行。像这样。
【讨论】:
以上是关于java如何从java内部捕获退出代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 中的 powershell 脚本中捕获退出代码