我想使用JOptionPane
制作一个从控制台读取输入的演示。如果我先输入br.readLine()
然后使用JOption...
输入对话框没有显示,我仍然可以在控制台中写,就像有人会等待它...我想要显示输入对话框。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.swing.JOptionPane;
public class Kalkulator {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Type number");
int liczba1 = Integer.valueOf(br.readLine());
br.close();
int liczba2 = Integer.valueOf(JOptionPane.showInputDialog("Type number"));
System.out.println(liczba1 + liczba2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:4)
只是因为System.in
是一个流。键入时,提供数据。该数据存储在某种队列中。
当一个人调用br.readLine
时,会读出一部分队列(有时会阻塞直到提供数据)......
关闭流只是意味着您回收一些资源(例如,再次将文件标记为可用)。现在控制台不断接受数据。你不会再读它了。
由控制台程序(bash
,sh
,cmd.exe
,...)来处理用户输入数据的事实。然后,控制台程序将输入的值重定向到System.in
。 Java无法控制该程序...
答案 1 :(得分:2)
您始终可以在控制台中输入内容。没有人必须倾听。在控制台中键入时,字符存储在名为 stream 的缓冲区中。如果没有人正在读取流,那么该角色就会排队。调用br.readLine()
会从流中提取字符,直到看到换行符。
这些天来,大多数游戏机都会回复自己输入的字符,而且你通常无法将其关闭,所以即使你已经停止收听,用户仍然可以打字(毫无意义)。如果你不想要它们,并且你认为它们可能会这样,那么你能做的最好的就是输出一条消息告诉他们不要(礼貌地)。