怎样处理非正常退出,如ctrl+c 点击退出按钮等,像tomcat那样。

孙亖
博客专家认证
2004-07-29 02:34:03
rt
...全文
1170 33 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
孙亖 2004-08-02
  • 打赏
  • 举报
回复
报最后一线希望顶。
http://community.csdn.net/Expert/TopicView.asp?id=3227231
孙亖 2004-07-30
  • 打赏
  • 举报
回复
TinyJimmy(Jimmy) tomcat 也可以不是服务的阿?
http://community.csdn.net/Expert/TopicView1.asp?id=3226025
lEFTmOON 2004-07-30
  • 打赏
  • 举报
回复
是不是在destory()中处理?
关注!
TinyJimmy 2004-07-30
  • 打赏
  • 举报
回复
不想要界面, 象tomcat那样, 在服务中启动?
孙亖 2004-07-30
  • 打赏
  • 举报
回复
ding
孙亖 2004-07-30
  • 打赏
  • 举报
回复
to qqbz(qqbz)
like addShutdownHook but compatible with jdk 1.2, thanks
qqbz 2004-07-30
  • 打赏
  • 举报
回复
你的非正常退出指什么样的退出?是象突然断电那种吗?如果是这样,程序没有办法处理,即使你接受到了这个异常,也来不及处理。
孙亖 2004-07-30
  • 打赏
  • 举报
回复
to TinyJimmy(Jimmy) 不懂
救命阿
cbhyk 2004-07-30
  • 打赏
  • 举报
回复
如果是桌面应用的话,用c写一个程序,在这个程序里面启动JVM来运行你的应用,这样让用户看不到控制台,让他没法按Ctrl + C,如Eclipse
孙亖 2004-07-30
  • 打赏
  • 举报
回复
to cbhyk()
非常感谢,可是我不可能修改客户的环境。
孙亖 2004-07-30
  • 打赏
  • 举报
回复
to TinyJimmy(Jimmy)
我不是要驻留,我是要关闭,所谓优雅地关闭程序,用户通过ctrl+c时我也能处理。
cbhyk 2004-07-30
  • 打赏
  • 举报
回复
jdk1.3及以后版本用addShutdownHook

如果只能用jdk 1.2的话,看这样是否可以(我也没有试过):
在jdk目录下有一个src.jar,展开后,在launcher目录下有个java.c,运行java程序时使用的那个java.exe就是这个代码编译产生的。修改这个java.c,在调用Main Class的main方法的代码后面加入你的代码,编译产生java.exe,替换jdk目录下的java.exe。
在jdk1.3.1_01的java.c中,调用Main Class的main方法及之后的代码是这个样子的:

/* Invoke main method. */
(*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs);
if ((*env)->ExceptionOccurred(env)) {
/* Formerly, we used to call the "uncaughtException" method of the
main thread group, but this was later shown to be unnecessary
since the default definition merely printed out the same exception
stack trace as ExceptionDescribe and could never actually be
overridden by application programs. */
(*env)->ExceptionDescribe(env);
goto leave;
}

/*
* Detach the current thread so that it appears to have exited when
* the application's main method exits.
*/
if ((*vm)->DetachCurrentThread(vm) != 0) {
fprintf(stderr, "Could not detach main thread.\n");
goto leave;
}
ret = 0;

leave:
(*vm)->DestroyJavaVM(vm);
return ret;


(*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs);
之后加入你的代码
TinyJimmy 2004-07-30
  • 打赏
  • 举报
回复
没有consol窗口呀.
在unix只能用kill才能kill掉; window就是不带窗口的运行程序, 任务管理器才能停.
如果这样也不行, 你恐怕只能用病毒那用的驻留程序了
孙亖 2004-07-30
  • 打赏
  • 举报
回复
to TinyJimmy(Jimmy)
做成服务的话,关闭consol窗口程序正常运行,我需要的是程序知道user interrupt,
虚拟机停了,catch Throwable 应该没用了。
TinyJimmy 2004-07-30
  • 打赏
  • 举报
回复
调电是没办法了, 做成服务应该能满足你其他要求. 来个健壮点的. catch Throwable
孙亖 2004-07-30
  • 打赏
  • 举报
回复
有人知道吗?
孙亖 2004-07-30
  • 打赏
  • 举报
回复
回复人: qqbz(qqbz)
我想不是突然关机,可能是突然关闭程序,非正常途径。
The virtual machine is terminated in response to a user interrupt, such as typing ^C, or a system-wide event, such as user logoff or system shutdown.
qqbz 2004-07-30
  • 打赏
  • 举报
回复
不懂addShutdownHook
孙亖 2004-07-30
  • 打赏
  • 举报
回复
哎。。。
agen10120216 2004-07-29
  • 打赏
  • 举报
回复
好,学习了!
加载更多回复(13)

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧