A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈志强 中级黑马   /  2013-5-15 22:52  /  2009 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈志强 于 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

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

8 个回复

倒序浏览
没有代码啊
回复 使用道具 举报
从网上搜的,希望对你有帮助~

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。
回复 使用道具 举报
IDE可能对线程的输入流/输出流调用的时候会跟JVM内部的线程冲突,导致错误,但是应该不多见,你用cmd命令行执行就不会出错了
回复 使用道具 举报
许智敏 发表于 2013-5-16 06:59
从网上搜的,希望对你有帮助~

eclipse 3.4+jdk1.6

你英语6级?
回复 使用道具 举报
汪平乐 发表于 2013-5-16 12:32
你英语6级?

没有没有,出了第一句是我的,别的都来源于网络。。。
回复 使用道具 举报
呵呵...{:soso_e181:}
回复 使用道具 举报
我还真没遇到过这样的问题. 呵呵 , 也许是你运行环境的问题吧.  
回复 使用道具 举报
xiewen 中级黑马 2013-5-27 19:06:56
9#
我运行了一下,没有任何问题啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马