public class Test { public static void main(String[] args) {
try {
throw new Exception();
} catch (Exception e) {
System.out.println("111111111");
e.printStackTrace();
System.out.println("999999999");
} }}在eclipse3.2中多次执行,发现有多种顺序,以调试方式执行,却只有一种结果!求解,谢谢!!
其中一种:java.lang.Exception
at com.majin.Test.main(Test.java:10)
111111111
999999999

解决方案 »

  1.   

    呵呵,奇怪,我也试了
    不过在黑窗口下就一种顺序
    111111111
    java.lang.Exception
            at Test.main(Test.java:5)
    999999999
    e.printStackTrace();调用了System.err
    所以不是程序的问题,是eclipse的console问题
      

  2.   

    嘿嘿,异常处理是一个线程,当你的异常被抛出之后,你的程序仍然继续运行,而异常处理属于另一个线程,它什么时候执行是说不准的,所以就出现了多种结果。想知道原理,请查看有关Java多线程的知识。谢谢。
      

  3.   

    刚刚试了一下, 同步System.err或者同步System.out, 并没有解决顺序出现的问题,所以, 多线程并不是决定因素, 期待楼下出现高手!public class Test { public static void main(String[] args) {
    try {
    throw new Exception();
    } catch (Exception e) {

    synchronized (System.err) {
    System.out.println("111111111");
    }

    synchronized (System.out) {
    e.printStackTrace();
    }

    synchronized (System.err) {
    System.out.println("999999999");
    }
    } }}
      

  4.   

    我觉得是对象问题。
    Exception e
    System.out.println
    是两个不同的对象执行顺序是由对象在进程时间片问题
    下面方法可以试试
    public class Test1 {
    public static void main(String[] args) {
    try {
    throw new Exception();
    } catch (Exception e) {
    try {
    Thread.sleep(100);
    System.out.println("111111111");
    } catch (InterruptedException e1) {
    e1.printStackTrace();
    }
    e.printStackTrace();
    try {
    Thread.sleep(100);
    System.out.println("999999999");
    } catch (InterruptedException e1) {
    e1.printStackTrace();
    }
    }
    }
    }
      

  5.   

    个人认为这应该不涉及多线程问题,就三个同在main线程的语句而已啊?期望可以得到更合理的答案!40分相送。
      

  6.   

    给你们一段程序,自己多跑几遍,你会发现同样有顺序问题(这是我上多线程时必讲的示例)。public class ThreadTest extends Thread {
        private String name;    public ThreadTest(String name){
            this.name=name;
        }    public void run(){
           forTest();
        }
        private void forTest(){
             for(int i=0;i<1000;i++){
                System.out.println(name+i);
            }
        }
        public static void main(String[] args) {
            new ThreadTest("a:").start();
            new ThreadTest("b:").start();
            new ThreadTest("c:").start();
        }
    }多跑几次,你就会发现,每次执行的输出顺序也是不同的。即使你加上同步,输出顺序同样在变化。你们对于线程了解的很浅呀,加强学习吧,同学们。