栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

IDE风格的程序正在运行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IDE风格的程序正在运行

如果您不希望另一个程序(通过它的主要方法调用)能够关闭正在运行的JVM,那么就可以看到三个选项:

1.使用SecurityManager

设置 SecurityManager 使其阻止

System.exit
呼叫:

public class Test {    public static void main(String args[]) {        SecurityManager sm = System.getSecurityManager();        System.setSecurityManager(new SecurityManager() { @Override public void checkExit(int status) {     throw new SecurityException("Client program exited."); }        });        try { System.out.println("hello"); System.exit(0); System.out.println("world");        } catch (SecurityException se) { System.out.println(se.getMessage());        }    }}

版画

helloClient program exited.

这可能是最好的解决方案。这是应用程序服务器阻止任意servlet终止整个服务器的方式。

2.单独的JVM

例如,在单独的JVM中运行其他程序

ProcessBuilder

import java.io.*;public class Test {    public static void main(String args[]) throws IOException {        ProcessBuilder pb = new ProcessBuilder("java", "other.Program");        pb.redirectErrorStream();        Process p = pb.start();        InputStream is = p.getInputStream();        int ch;        while ((ch = is.read()) != -1) System.out.print((char) ch);        is.close();        System.out.println("Client program done.");    }}

3.改用关机钩

不要禁止终止JVM,而要添加关闭钩子,以清理“集线器”并正常退出。(只有一次运行一个“外部”程序时,此选项才有意义。)

import java.io.*;public class Test {    public static void main(String args[]) throws IOException {        Runtime.getRuntime().addShutdownHook(new Thread() { public void run() {      System.out.println("Uninitializing hub...");     System.out.println("Exiting gracefully."); }        });        // Run client program        System.out.println("Running... running... running...");        System.exit(0);     }}

印刷品:

Running... running... running...Uninitializing hub...Exiting gracefully.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号