使用Scanner和next()与println错误

时间:2016-08-20 02:18:54

标签: java java.util.scanner

import java.util.Scanner;

import static java.lang.Thread.sleep;

class RunnableDemo implements Runnable {
    private Thread t;
    private String threadName;

    RunnableDemo( String name){
        threadName = name;
    }
    public void run() {
        System.out.println("asd");
    }

    public void start ()
    {
        if (t == null)
        {
            t = new Thread (this, threadName);
            t.start ();
        }
    }

}

class RunnableDemo1 implements Runnable {
    private Thread t;
    private String threadName;

    RunnableDemo1( String name){
        threadName = name;
    }
    public void run() {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter here:");
        String x = in.nextLine();
        System.out.println(x);
    }

    public void start ()
    {
        if (t == null)
        {
            t = new Thread (this, threadName);
            t.start ();
        }
    }

}


public class Main {

    public static void main(String[] args) throws InterruptedException {
        RunnableDemo1 R1 = new RunnableDemo1( "Thread-1");
        R1.start();
        sleep(1000);
        RunnableDemo R2 = new RunnableDemo( "Thread-2");
        R2.start();


    }
}

Println会在命令提示符下打印一行,但in.nexLine()(也尝试in.next()无法识别它。有没有办法我能够在命令提示符下打印一个字符串并拥有扫描仪认识它?或类似的东西?

1 个答案:

答案 0 :(得分:0)

System.out.println不应该向服务器发送任何内容,因为它只将String发送到标准输出,通常是控制台,除非你重新发布了标准输出,我不建议这样做你做。相反,您需要实际向服务器发送内容,可能在您的notifyObservers方法中,但很难说没有mcve

在你改进之前,这一切仍然是一个非常不完整的问题。

编辑:是的Observable API显示public void notifyObservers(Object arg)有一个接受Object参数的重载。为什么不在那里传递你的字符串?

编辑2:好的,你很困惑,因为这不是你让一个班级与另一个班级沟通的方式。将某些东西打印到控制台不会触发System.in在另一个线程中更新。再说一次,做我上面所说的。