Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-线程问题_Java_Multithreading_Thread Sleep - Fatal编程技术网

Java-线程问题

Java-线程问题,java,multithreading,thread-sleep,Java,Multithreading,Thread Sleep,好的,我只学了大约一个星期的java,决定制作一个基于文本的游戏。 在我开始使用线程之前,一切都很顺利。 我希望能够检测到用户是否在游戏的任何部分输入“inv”来检查他们的库存。 唯一的问题是当我开始游戏时,游戏机会问“你想玩游戏吗?”你必须输入两次“是”。我认为这是因为线程有一个if语句,检查它是否等于'inv',然后检查用户是否输入'yes'开始游戏 (我知道这可能是非常低效的代码,这是我的第一个游戏xD) 主课 菜单课 这是来自“游戏类”的线索 注意:我没有粘贴所有的代码 因此,当

好的,我只学了大约一个星期的java,决定制作一个基于文本的游戏。 在我开始使用线程之前,一切都很顺利。 我希望能够检测到用户是否在游戏的任何部分输入“inv”来检查他们的库存。 唯一的问题是当我开始游戏时,游戏机会问“你想玩游戏吗?”你必须输入两次“是”。我认为这是因为线程有一个if语句,检查它是否等于'inv',然后检查用户是否输入'yes'开始游戏

(我知道这可能是非常低效的代码,这是我的第一个游戏xD)
主课 菜单课
这是来自“游戏类”的线索
注意:我没有粘贴所有的代码


因此,当控制台询问“欢迎!你想玩吗?我必须先输入“是”,因为线程正在检查下一个输入是否为“inv”,然后我可以继续输入“是”,告诉程序我想玩

任何帮助都将不胜感激,这让我发疯。
如果您需要更多信息,请询问我:)

您的游戏中应该只有一个循环。您读取输入(一次),检查它是否为inv或其他类型,如果不是,则运行常规代码。我看绝对没有理由在那里放线。事实上,您必须输入两次yes是有意义的:因为您从同一输入中听到两次,可能第一次检查它是否等于inv的线程听到它,并且什么也不做,第二次正确的线程执行任务。

如果执行线程,您应该让所有控制台I/O都从单个线程执行。有两个Scanner实例彼此异步运行。即使您解决了要求启动游戏的具体问题,您仍然可能会遇到不知道哪个线程将首先获取您的输入的情况。一般来说,不同的线程不应该尝试使用相同的资源。

为什么在控制台游戏中使用线程?这是违反直觉的。正如您所发现的,除非引入某种形式的同步,否则多个线程不会互相等待。真正的解决方案是在这里不使用线程。如果您想使用线程,那么只让一个线程与用户交互,让其他线程完成其余的工作(不管是什么)会更容易。
import java.util.Scanner;

public class Game extends gameClass{

    public static void main(String[] args) throws InterruptedException{

        Scanner input = new Scanner(System.in);

        Thread t1 = new Thread(new gameClass());
        t1.start();

        Menu.menu();
        gameClass.beginning();

    }
}
import java.util.Scanner;

public class Menu{

    public static void menu() throws InterruptedException{

        Scanner input = new Scanner(System.in);//keyboard input

        boolean playingGame=false;
        String yesno;

        System.out.println("Welcome! Would you like to play?");

        while(playingGame==false){//repeats if until user input yes/no.
            yesno = input.nextLine();

        if (yesno.equalsIgnoreCase("yes")){

            playingGame = true;
            System.out.println("Great!");
public void run(){
    Scanner input = new Scanner(System.in);

    try{
        while(true){
            if (input.nextLine().equalsIgnoreCase("inv")){
                System.out.println(inventory);

            }else if ((input.nextLine().equalsIgnoreCase("help"))||(input.nextLine().equalsIgnoreCase("what do i do"))){
                help();

            }
            Thread.sleep(200);
        }
    }catch(Exception e){}
}

public static void help(){

}
}