Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/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 - Fatal编程技术网

Java 线程程序,键入输入并停止;“你好,世界”;输入并一直输入另一个输入,直到您输入";退出;?

Java 线程程序,键入输入并停止;“你好,世界”;输入并一直输入另一个输入,直到您输入";退出;?,java,Java,这是一个每三秒钟打印一次“Hello world!”的程序。您将获得一个输入框来写入消息,但是当我键入新的输入时,如何停止消息“Hello world!”?而每次我写一条新消息之前,消息也会停止写吗? 例如: 控制台输出: 你好,世界! 你好,世界! 你好,世界! 赢(然后我输入Win!并停止Hello world!) 赢(Win每三秒钟继续一次,直到我键入另一个输入文本)。 微笑!(新输入:微笑和“赢!”停止 过去,除其他方法外,还有一个停止线程的stop()方法。这种方法不安全,已经被弃用。

这是一个每三秒钟打印一次“Hello world!”的程序。您将获得一个输入框来写入消息,但是当我键入新的输入时,如何停止消息“Hello world!”?而每次我写一条新消息之前,消息也会停止写吗? 例如: 控制台输出: 你好,世界! 你好,世界! 你好,世界! 赢(然后我输入Win!并停止Hello world!) 赢(Win每三秒钟继续一次,直到我键入另一个输入文本)。 微笑!(新输入:微笑和“赢!”停止


过去,除其他方法外,还有一个停止线程的
stop()
方法。这种方法不安全,已经被弃用。解释了为什么以及应该使用什么来代替它。

那么,我的编码示例看起来如何?@justanotherdeveloper如何使用一个最初设置为
的全局
消息
字符串“你好,世界!"
并确定由
myThread
打印的内容。然后,您的输入线程将
message
设置为新值,然后这将是每3秒打印一次的内容。如果您想停止原始
myThread
。您可以将
t1
中对它的引用传递给constructor的
inputThread
,然后当您想要停止线程时,可以在该引用上调用
stop
public class Main {

    public static void main(String[] args) throws InterruptedException {
        
        Thread t1 = new Thread(new myThread());
        Thread t2 = new Thread(new inputThread());
        
        t1.start();
        t2.start();

        t1.join();
        t2.join();
    }
}

public class myThread implements Runnable {
    
    private boolean stop = false;

    public synchronized void stop() {
        this.stop = true;
    }

    private synchronized boolean continues() {
        return this.stop == false;
    }

    @Override
    public void run() {
        while(continues()) {
            System.out.println("Hello world!");

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
               
            }
        }
    }
} 


public class inputThread implements Runnable {
    
    private boolean stop = false;

    public synchronized void stop() {
        this.stop = true;
    }

    private synchronized boolean continues() {
        return this.stop == false;
    }
      
    @Override
    public void run() {
        
        while(continues()) {
            String message = showInputDialog("Write your message, type quit to shut down!");
            
            if(message.equals("quit")) {
                break;
            }

            else {
                System.out.println(message);
                 try {
                     Thread.sleep(3000);
                 } catch (InterruptedException e) {
                    
                 }
            }
        }
    }
}