这是我的问题。我已经制作了简单的输入类,其中包含从用户键盘中获取原始值的方法。问题是每当我在其他类中使用此类时,我面临的问题是我做了这个课程的多个实例,我得到了关于"关闭流的问题"。为什么会发生这种情况?
例如:我有一个主要的方法,我得到用户的输入并决定要制作哪个对象,比如我可以制作4个不同的对象(4个类),在我调用对象"设置状态& #34;方法,其中我实际设置此对象的所有状态与输入类的第二个实例,然后,当我尝试再次读取我的主方法中的用户输入时,我得到一个异常"溪流关闭"。 以下是输入类的代码:
public class UserInput {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));;
public int getInt() {
try {
String line;
line = reader.readLine();
return Integer.parseInt(line);
} catch (Exception ex) {
ex.printStackTrace();
return -1;
}
}
public double getDouble() {
try {
String line = reader.readLine();
return Double.parseDouble(line);
} catch (Exception ex) {
return -1;
}
}
public float getFloat() {
try {
String line = reader.readLine();
return Float.parseFloat(line);
} catch (Exception ex) {
return -1;
}
}
public long getLong() {
try {
String line = reader.readLine();
return Long.parseLong(line);
} catch (Exception ex) {
return -1;
}
}
public short getShort() {
try {
String line = reader.readLine();
return Short.parseShort(line);
} catch (Exception ex) {
return -1;
}
}
public String getString() {
try {
String line = reader.readLine();
return line;
} catch (Exception ex) {
return " ";
}
}
public char getChar() {
try {
return (char) reader.read();
} catch (Exception ex) {
return (' ');
}
}
public void close() {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
用户输入的标准方法是使用已包含读取不同类型输入的方法的Scanner
。
你不应该关闭reader
,因为这会关闭System.in
,这不是你想要的。
答案 1 :(得分:0)
通过调用reader.close();
,您不仅自己关闭了读者,因为调用会调用close()
的{{1}}方法,因此关闭InputStreamReader
(您不能重新打开)。
一个可能的解决方案是使用System.in
作为Kayaman在his answer中指出的,或者像这样覆盖Scanner
方法:
close()