2016-04-21 2 views
-2

Рассмотрите следующие два класса в приложении Java NetBeans. Основной класс:Java с NetBeans 7.2.1 - Ошибка порядка выполнения

public class ExcecutionOrder { 
    public static void main(String[] args) { 

     Worker worker = new Worker(); 

     worker.init(); 
     worker.doProcessing(); 
     worker.stop(); 
    } 
} 

А класс рабочий, как это:

public class Worker { 

    public void init() { 
     System.out.println("\n-------------------------------------------------"); 
     System.out.println("Worker initialized."); 
     System.out.println("-------------------------------------------------\n"); 
    } 

    public void doProcessing() { 
     printNTimes(2000); 
    } 

    public void doProcess(int n) { 
     printNTimes(n); 
    } 

    public void printNTimes(int n) { 
     System.out.println(); 
     for (int i = 0; i < n; i++) { 
      System.err.println("Output by Worker: " + i); 
     } 
     System.out.println(); 
    } 

    public void stop() { 

     System.out.println("\n-------------------------------------------------"); 
     System.out.println("Worker stopped."); 
     System.out.println("-------------------------------------------------\n"); 
    } 
} 

Как ни странно, результаты Ouput в следующем порядке:

Output from Worker: 0 
------------------------------------------------- 
Output from Worker: 1 
Worker initialized. 
Output from Worker: 2 
------------------------------------------------- 
Output from Worker: 3 
[...] 

Где он должен быть:

------------------------------------------------- 
Worker initialized. 
------------------------------------------------- 
Output from Worker: 0 
Output from Worker: 1 
Output from Worker: 3 
[...] 

Если я установил процессор сродство netbeans к использованию только одного ядра процессора, тогда, по крайней мере, начальная часть прекрасна, а другое сообщение controll (Worker stopped.) все еще фрагментировано соответственно. помешали выходные сообщения.

Выполнение этой же функции с использованием Eclipse приводит к ожидаемому исполнению.

Есть ли у кого-нибудь идеи, что здесь происходит? - Большое спасибо за любой совет заранее!

PS: NetBeans 7.2.1 использует jdk1.7.0_03, версия Eclipse - выпуск Mars.2 (4.5.2). Проблема возникает даже при переключении кода из рабочего класса на основной метод основного класса без использования других методов, чем основной метод.

+0

Использование среды IDE ID NetBeans 7.4 с помощью jdk1.8.0_05 также предоставляет порядок выполнения, как ожидалось. –

+0

проверить мой ответ – haifzhan

ответ

0

Вы используете System.out для вашего Worker initialized и System.err для вашего Output by Worker...

System.out и System.err являются различные выходные потоки, они сбрасываются в разное время, поэтому выход из строя на консоли.

Используйте System.out.println() для всех ваших выходных линий, все выходы будут в ожидаемом порядке.

+0

Большое спасибо за ваш отзыв! Я собираюсь попробовать это в понедельник и дать вам обратную связь. –

+0

Вы были правы. Изменение всех выходов в System.out.println() решило проблему. Большое спасибо! :-) –

Смежные вопросы