Java 应用程序停止或崩溃时的侦听器
Listener when Java application stops or crashes
我在网上搜索过,但没有找到结果。我正在寻找一个监听器,当一个 jar crashes/stops 时,它被调用。我知道它们对于 JFrame 是这样的,但我没有使用框架。
谢谢,艾弗里。
调查java.lang.Runtime,方法
void addShutdownHook(Thread hook)
它的 javadoc 中只有一句话(但请务必阅读那里的所有小字):当虚拟机开始其关闭序列时,它将启动所有已注册的关闭挂钩一些未指定的顺序并让它们 运行 同时发生。
这里是 "crash" 由堆栈溢出引起的:
static void rec(){ rec(); }
public static void main( String[] args ){
Thread thread = new Thread(){
public void run(){
System.out.println( "SHUTDOWN" );
}
};
Runtime.getRuntime().addShutdownHook( thread );
rec();
}
并打印 SHUTDOWN。
这是一个使用与之前相同的关闭钩子的应用程序,它可以休眠并且可以使用 Ctrl-C 或 Linux 风格的 kill %1
来终止 BG 作业:
Runtime.getRuntime().addShutdownHook( thread );
try {
System.out.println( "Sleeping" );
Thread.sleep( 5000);
System.out.println( "Waking" );
} catch( Exception e ){
}
并打印 SHUTDOWN。
最后,这是令人发指的 java.lang.OutOfMemoryError: Java heap space
List<Object> objs = new ArrayList<>();
while( true ){
objs.add( new byte[0x10000000] );
}
并打印 SHUTDOWN。 (大量获取堆 space 关闭挂钩甚至可以创建一些新对象。但应该这样写,以便线程已经在其内部拥有所有需要的对象,并具有预分配的内存。)
我在网上搜索过,但没有找到结果。我正在寻找一个监听器,当一个 jar crashes/stops 时,它被调用。我知道它们对于 JFrame 是这样的,但我没有使用框架。 谢谢,艾弗里。
调查java.lang.Runtime,方法
void addShutdownHook(Thread hook)
它的 javadoc 中只有一句话(但请务必阅读那里的所有小字):当虚拟机开始其关闭序列时,它将启动所有已注册的关闭挂钩一些未指定的顺序并让它们 运行 同时发生。
这里是 "crash" 由堆栈溢出引起的:
static void rec(){ rec(); }
public static void main( String[] args ){
Thread thread = new Thread(){
public void run(){
System.out.println( "SHUTDOWN" );
}
};
Runtime.getRuntime().addShutdownHook( thread );
rec();
}
并打印 SHUTDOWN。
这是一个使用与之前相同的关闭钩子的应用程序,它可以休眠并且可以使用 Ctrl-C 或 Linux 风格的 kill %1
来终止 BG 作业:
Runtime.getRuntime().addShutdownHook( thread );
try {
System.out.println( "Sleeping" );
Thread.sleep( 5000);
System.out.println( "Waking" );
} catch( Exception e ){
}
并打印 SHUTDOWN。
最后,这是令人发指的 java.lang.OutOfMemoryError: Java heap space
List<Object> objs = new ArrayList<>();
while( true ){
objs.add( new byte[0x10000000] );
}
并打印 SHUTDOWN。 (大量获取堆 space 关闭挂钩甚至可以创建一些新对象。但应该这样写,以便线程已经在其内部拥有所有需要的对象,并具有预分配的内存。)