2016-05-03 5 views
0

Я пытаюсь выполнить два задания одновременно. Одна из вещей, которую я пытаюсь сделать, - показать таймер подсчета, а другой - перемещать мяч.Java одновременное выполнение

Здесь я создаю таймер, а также вызвать метод moveBall

button.addChangeListener(new ChangeListener() { 

     int start = 0; 

     public void stateChanged(ChangeEvent e) { 

      ActionListener taskPerformer = new ActionListener() { 
       public void actionPerformed(ActionEvent evt) { 
        timeValue.setText(++start + " sec"); 
       } 
      }; 

      timer = new Timer(1000, taskPerformer); 
      timer.start(); 

      ball.moveBall(); 

     } 
    }); 

Это мой метод moveBall

public void moveBall() { 

    Thread ball = new Thread() { 

     double counter = 0; 

     int t = (int) (2 * Vy/9.8); 

     public void run() { 
      try { 
       while (t >= 0) { 
        // calculate Vx and Vy 

        Ball.this.setX(Ball.this.getX() + Vx); 
        Ball.this.setY(Ball.this.getY() - Vy); 

        counter += 50; 

        if (counter == 1000) { 
         t--; 
         counter = 0; 
        } 

        paintingComponent.repaint(); 

        Thread.sleep(20); 
       } 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    ball.start(); 
} 

Когда я выполнить приведенный выше код этикетки для отображения времени, прошедшего именно не меняется вообще во время шара, и когда движение закончено, он принимает последний номер, который он должен принять.

+0

Вы должны использовать качели таймер для обновления оба. Вы можете создать несколько таймеров Swing, если вам это проще – ControlAltDel

+0

Является ли метка изменением своего значения, если вы не запустили «шаровую нить»? – Supahupe

+0

Да, он меняет свое значение, когда я не запускаю шаровую нить. – Hunk

ответ

0

Это пример два расстрелы двух потоков, Java одновременного выполнение

public class ThreadExecutor extends Thread { 

    private String name; 

    private int executionCount; 

    public ThreadExecutor(final String name, final int executionCount) { 
     this.name = name; 
     this.executionCount = executionCount; 
    } 

    @Override 
    public void run() { 

     int count = 1; 

     while (count <= executionCount) { 
      System.out.println("Executing thread ".concat(name).concat(" : ") + count); 
      count++; 
     } 

    } 
} 

    public class Main { 

     public static void main(String args[]) { 

      final ThreadExecutor one = new ThreadExecutor("One", 1); 
      final ThreadExecutor two = new ThreadExecutor("Two", 2); 

      one.start(); 
      two.start(); 
     } 
} 
+0

Он увеличивает значение второго параметра конструктора до 100 и 10 соответственно и видит совпадение. –

+0

Выполнение резьбы Один: 1 Выполнение резьбы Два: 1 Выполнение резьбы Один: 2 Выполнение резьбы Два: 2 Выполнение резьбы Один: 3 Выполнение резьбы Два: 3 Выполнение резьбы Один: 4 Выполнение резьбы Два: 4 Выполнение Тема первая: 5 Выполнение резьбы Два: 5 Выполнение резьбы Один: 6 Выполнение резьбы Один: 7 Выполнение резьбы Один: 8 Выполнение резьбы Один: 9 Выполнение резьбы Один: 10 Выполнение резьбы Один: 11 Выполнение резьбы Один : 12 Выполняющая резьба Одна: 13 Исполняющая нить One: 14 Исполняющая нить One: 15 ... –

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