运行方法,而另一个方法正在运行

时间:2016-12-23 20:08:51

标签: java eclipse multithreading methods

Hello堆栈溢出社区, 这是我第一次使用这个网站。所以请善待^^“ (对于奇怪的命令感到抱歉,这是我学校使用的图书馆。不幸的是德语)

我希望机芯if (dieTastatur.rechts()){...正在运行,而我的另一种方法this.erscheinen();正在运行。这可能吗?如果不能如何更改它才能正常工作?

问题是:当积木向我移动时,我无法移动相机

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();
        }
    }

这是“Klotz”课程中的bewege方法

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);
}

1 个答案:

答案 0 :(得分: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();
                ...
            }
        }
    });
}