这是我正在做的超简化代码,但结果是一样的。我可以在第1类中注释掉in.close(),它将修复错误。但是接下来我将为项目的其余部分留下一个开放的扫描仪。并且更改变量名称不是解决方法。
的Class1:
package scannerDebug;
import java.util.Scanner;
public class Class1 {
private String name_;
public Class1(String name) {
name_ = name; }
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Your name: ");
Class1 ex1 = new Class1(in.next());
System.out.println("eex1" + ex1.name_);
in.close();
}
}
的Class2
package scannerDebug;
import java.util.Scanner;
public class Class2 {
private String name_;
public Class2(String name) {
name_ = name; }
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Your name: ");
Class2 ex2 = new Class2(in.next());
System.out.println("ex2" + ex2.name_);
in.close();
}
}
驱动程序类 package scannerDebug;
public class driver {
public static void main(String[] args) {
Class1.main(args);
Class2.main(args);
}
}
答案 0 :(得分:1)
关闭Scanner
也会关闭基础流。要解决此问题,只需在Scanner
课程中使用一个driver
,并在Class1
和Class2
中使用它:
public class driver {
private static final SCANNER = new Scanner(System.in);
public static void main(String[] args) {
Class1.main(args);
Class2.main(args);
}
public static Scanner getScanner() {
return SCANNER;
}
}
public Class2(String name) {
name_ = name;
}
public static void main(String[] args) {
System.out.print("Your name: ");
Class2 ex2 = new Class2(driver.getScanner().next());
System.out.println("ex2" + ex2.name_);
}
我建议您遵循适当的约定并更改您的变量/类名。
您也可以通过各自的构造函数将Scanner
传递给每个类,但我认为您可能希望在不先运行Class1
的情况下运行Class2
或driver
。< / p>