【问题标题】:Run a method while another one is running在另一个方法运行时运行一个方法
【发布时间】:2016-12-23 20:08:51
【问题描述】:

你好堆栈溢出社区, 这是我第一次使用这个网站。所以请善待^^" (对不起,奇怪的命令,这是我学校使用的图书馆。不幸的是德语)

我想让运动 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);
}

【问题讨论】:

标签: java eclipse multithreading methods


【解决方案1】:

首先,必要的导入:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2012-03-10
    • 2015-06-29
    • 2019-01-15
    • 1970-01-01
    相关资源
    最近更新 更多