2016-12-23 1 views
0

안녕하세요 스택 오버플로 커뮤니티, 이것은이 사이트를 처음 사용하는 시간입니다. 내 다른 방법 this.erscheinen(); 그 일을하는 동안 그래서 는다른 하나가 실행되는 동안 메서드 실행

내가 운동 if (dieTastatur.rechts()){... 실행을 얻고 싶었다 (그리고 이상한 명령 죄송합니다, 그. 불행하게도 독일어로 우리 학교가 사용하는 라이브러리) "^^ 친절하십시오 . 블록이 나를 향해

public void fuehreAus(){ 

    while(true){ 

     Klotz_Array[0].unsichtbar(); 
     Klotz_Array[1].unsichtbar(); 
     Klotz_Array[2].unsichtbar(); 
     Klotz_Array[3].unsichtbar(); 
     this.erscheinen(); 



     if(dieTastatur.rechts()){ 
      this.bewege_rechts(); 
      Sys.warte(3); 
     } 
     if(dieTastatur.links()){ 
      this.bewege_links(); 
      Sys.warte(15); 
     } 
     if(dieTastatur.oben()){ 
      this.bewege_oben(); 
      Sys.warte(3); 
     } 
     if(dieTastatur.unten()){ 
      this.bewege_unten(); 
      Sys.warte(3); 
     } 
    } 

} 


public void bewege_links(){ 
    if(dieTastatur.links()){ 
     dieKamera.setzePosition(-150,250,3000); 
     for(int a=0;a<=100;a++){ 
     } 
     Sys.warte(400); 
     dieKamera.setzePosition(0,250,3000); 
    } 
} 

public void bewege_rechts(){ 
    if(dieTastatur.rechts()){ 
     dieKamera.setzePosition(150, 250, 3000); 
     for(int a=0;a<=100;a++){ 
     } 
     Sys.warte(400); 
     dieKamera.setzePosition(0,250,3000);  
    } 
} 

public void bewege_oben(){ 
    if(dieTastatur.oben()){ 
     dieKamera.setzePosition(0,400,3000); 
     dieKamera.setzeBlickpunkt(0,400,-10); 
     for(int a=0;a<=100;a++){ 
     } 
     Sys.warte(400); 
     dieKamera.setzePosition(0,250,3000); 
     dieKamera.setzeBlickpunkt(0,250,-10); 
    } 
} 

public void bewege_unten(){ 
    if(dieTastatur.unten()){ 
     dieKamera.setzePosition(0,100,3000); 
     for(int a=0;a<=100;a++){ 
     } 
     Sys.warte(400); 
     dieKamera.setzePosition(0,250,3000); 
    } 
} 

    public void erscheinen(){ 
     while(!Klotz_Stack.isEmpty()){ 
      Klotz_Stack.top().bewege(); 
      Klotz_Stack.pop(); 
     } 
    } 

를 이동하는 동안 카메라를 이동할 수 없습니다 그리고 여기 bewege 방법입니다 :?

문제는 내가 제대로 작동하도록 변경하는 방법을 그렇지 않다면이 가능 "Klotz"클래스에서

public void bewege(){ 

    int a = (int)(Math.random() * 4) + 1; 

    if(a==1){ 
     Block1.setzeSichtbarkeit(true); 
     for(int b=0;b<=1000;b++){ 
      Block1.verschiebe(0,0,5); 
      Sys.warte(3); 
     } 
     Block1.loesche(); 
    } 
    if(a==2){ 
     Block3.setzeSichtbarkeit(true); 
     for(int b=0;b<=1000;b++){ 
      Block3.verschiebe(0,0,5); 
      Sys.warte(3); 
     } 
     Block3.loesche(); 
    } 
    if(a==3){ 
     Block2.setzeSichtbarkeit(true); 
     for(int b=0;b<=1000;b++){ 
      Block2.verschiebe(0,0,5); 
      Sys.warte(3); 
     } 
     Block2.loesche(); 
    } 
    if(a==4){ 
     Block4.setzeSichtbarkeit(true); 
     for(int b=0;b<=1000;b++){ 
      Block4.verschiebe(0,0,5); 
      Sys.warte(3); 
     } 
     Block4.loesche(); 
    } 


} 
public void unsichtbar(){ 
    Block1.setzeSichtbarkeit(false); 
    Block2.setzeSichtbarkeit(false); 
    Block3.setzeSichtbarkeit(false); 
    Block4.setzeSichtbarkeit(false); 
} 
+4

http://docs.oracle.com/javase/tutorial/essential/concurrency/

답변

0

첫째, 필요한 수입 :

import java.util.concurrent.Executors; 

그런 다음 당신은 당신의 feuhreAus 방법과 같이 새 스레드를 시작하고 즉시 반환 할 수 있습니다.

public void fuehreAus(){ 
    Executors.newSingleThreadExecutor().submit(new Runnable() { 
     @Override 
     public void run() { 
      while(true) { 
       Klotz_Array[0].unsichtbar(); 
       Klotz_Array[1].unsichtbar(); 
       Klotz_Array[2].unsichtbar(); 
       ... 
      } 
     } 
    }); 
} 
+0

고맙습니다. 완벽하게 작동했습니다! – Trynchen

관련 문제