黑马程序员技术交流社区

标题: 谁有遇到这样的情况的,解释下…… [打印本页]

作者: 陈志强    时间: 2013-5-15 22:52
标题: 谁有遇到这样的情况的,解释下……
本帖最后由 陈志强 于 2013-5-27 21:44 编辑
  1. package Thread;

  2. public class ThreadDemo1{
  3. public static void main(String[] args) {
  4. show s=new show("张三");
  5. show s1=new show("李四");
  6. s.start();
  7. s1.start();
  8. }


  9. }
  10. class show extends Thread{

  11. String name;
  12. show(String name){
  13. this.name=name;
  14. }
  15. @Override
  16. public void run(){
  17. for(int i=0;i<100;i++){
  18. System.out.println("线程运行+"+"=="+name+i);
  19. }
  20. }
  21. }

复制代码
今天在学习的时候突然遇到这样的一个问题,是关于线程的,代码在第一遍运行的时候没有出错,但是多运行几遍,就会出错,之后再运行,有时候没报错,有时候又会报同样的一个错误,有哪位大神知晓,麻烦解答一下谢谢!!!!

这是什么问题?.png (89.32 KB, 下载次数: 3)

这是什么问题?.png

作者: rosv    时间: 2013-5-15 23:23
没有代码啊
作者: 许智敏    时间: 2013-5-16 06:59
从网上搜的,希望对你有帮助~

eclipse 3.4+jdk1.6

编译正常通过,运行debug模式时报错

ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [../../../src/share/back/util.c:820]

查找该错误原因。发现是重定向输出的问题。

以下是网络资料原文

装jdk1.6了把,呵呵~ 我也碰到过这问题。
这是我以前在网上找到的,希望对你有帮助。
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [../../../src/share/back/util.c:820]

这是怎么回事呢?现在的Java SE 6已经到了RC的阶段了啊?这样的错误SUN不会有吧~~

经过我仔细的查阅Java Doc,发现其中有这么一段话:

http://download.java.net/jdk6/docs/api/java/io/Console.html

"Whether a virtual machine has a console is dependent upon the underlying platform and also upon the manner in which the virtual machine is invoked. If the virtual machine is started from an interactive command line without redirecting the standard input and output streams then its console will exist and will typically be connected to the keyboard and display from which the virtual machine was launched. If the virtual machine is started automatically, for example by a background job scheduler, then it will typically not have a console." ">http://download.java.net/jdk6/docs/api/java/io/Con..."

翻译一下:

虚拟机是否有一个控制台Console取决于所依赖的平台和虚拟机解析该方法的方式。如果虚拟机是从一个交互式的命令行中启动的,而没有重定向标准输入和输出流,那么虚拟机会自动的连接到键盘作为标准输入,并且把启动虚拟机的地方作为标准输出。如果虚拟机是自动启动的,例如通过后台的一个任务计划,那么典型的情况就是没有Console控制台......。

于是,思考一下我们运行上面程序的地点&mdash;&mdash;Eclipse等集成开发环境,这对于上面描述中的把启动虚拟机的地方作为标准输出来说是不合适的,这里的Console()返回的默认情况下是Null,于是就产生了上面的出错信息。(也许未来Eclipse会有所改进吧)

怎么解决该问题呢?这里提供两条思路给大家(已经实际操作过,可以实现功能的正常运作)

1、使用命令行进行运行,编译可以使用集成开发环境。这样可以完成标准输出。
2、在程序中重定向标准输出到其他的设备或者方式(例如写到文本文件),这样也可以"比较不方便的"完成该功能。

3、在main函数结束时,添加system.exit(0);

补充说明:

return 和 system.exit()有什么区别:

1.return是返回程序上一层,system.exit()是返回程序最上层

2.return中断当前方法,system.exit()中断整个程序,应该是关闭JVM了

总结:
重申!!文档很重要,特别是官方文档和一些说明书性质的文献资料。预期看什么XX天精通YY技术,还不如首先把官方的文档通读一遍。推荐Java Doc和MSDN Library。
作者: liuelxiwd    时间: 2013-5-16 08:50
IDE可能对线程的输入流/输出流调用的时候会跟JVM内部的线程冲突,导致错误,但是应该不多见,你用cmd命令行执行就不会出错了
作者: 汪平乐    时间: 2013-5-16 12:32
许智敏 发表于 2013-5-16 06:59
从网上搜的,希望对你有帮助~

eclipse 3.4+jdk1.6

你英语6级?
作者: 许智敏    时间: 2013-5-16 14:23
汪平乐 发表于 2013-5-16 12:32
你英语6级?

没有没有,出了第一句是我的,别的都来源于网络。。。
作者: 汪平乐    时间: 2013-5-16 23:57
呵呵...{:soso_e181:}
作者: shiweiCao    时间: 2013-5-17 00:31
我还真没遇到过这样的问题. 呵呵 , 也许是你运行环境的问题吧.  
作者: xiewen    时间: 2013-5-27 19:06
我运行了一下,没有任何问题啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2