Java 无法在方法内关闭扫描仪?非静态方法Close()

Java 无法在方法内关闭扫描仪?非静态方法Close(),java,compiler-errors,java.util.scanner,Java,Compiler Errors,Java.util.scanner,我认为这是一个非常简单的问题,但在过去的几个月里,我已经多次遇到这个问题。我在一个方法中创建了一个扫描器,然后尝试关闭它,它总是给我一个错误。这次错误是: 错误:无法从静态上下文扫描程序引用非静态方法关闭。关闭 现在我读到这是因为我试图从一个静态的方法中调用scanner类?所以扫描器看不到扫描器类?如果是这样的话,我将来应该如何妥善处理这样的事情呢?我应该在创建scanner类的方法中导入scanner类,还是需要执行其他操作 谢谢它应该是input.close,而不是Scanner.clos

我认为这是一个非常简单的问题,但在过去的几个月里,我已经多次遇到这个问题。我在一个方法中创建了一个扫描器,然后尝试关闭它,它总是给我一个错误。这次错误是:

错误:无法从静态上下文扫描程序引用非静态方法关闭。关闭

现在我读到这是因为我试图从一个静态的方法中调用scanner类?所以扫描器看不到扫描器类?如果是这样的话,我将来应该如何妥善处理这样的事情呢?我应该在创建scanner类的方法中导入scanner类,还是需要执行其他操作


谢谢

它应该是input.close,而不是Scanner.close。

好吧,你不想只关闭任何一台扫描仪,而是要关闭名为input的扫描仪。因此,正如Izruo所说,它是input.close。但是请注意,在整个程序中,只有一个系统。在其中,您没有打开自己,并且一旦关闭,就不能重新打开,因此您不应该在程序中间关闭它。这意味着,它的扫描仪只能构建一次,永远不能关闭。它应该建立在整个程序的一开始,使程序的其余部分可以访问,并用于读取控制台输入。你不应该在System.in的辅助方法上创建扫描仪。我不认为这是你引用的@D.B的副本。这与扫描仪的内容更相关。@LAD-实际上,这是一个副本,但是。。。dup树有点混乱,因为有些人已经标记非静态方法不能被引用。。。因为非静态变量不能被引用…@Stephen C好的,这是有意义的。如果你能准确地理解静态对方法或字段的意义,这将非常有帮助。如果我弄错了,请告诉我。。静态意味着只能看到方法之外标记为静态的变量,对吗?默认情况下,在main方法中创建的变量是静态的吗?当静态方法调用这些主变量时,它们使用的是变量的实例,因此实例被方法中的变量隐藏。当一个变量是静态的,这意味着每个类只有一个变量实例。静态变量属于类而不是类的实例。查看投票率最高的答案,了解静态字段和方法如何工作的详细说明。此外,还有一些关于静态方法和字段的详细信息@反编码
public static void readArray(char[] arr){
    String myMessage;
    System.out.print("Input Message: ");
    Scanner input = new Scanner(System.in);
    myMessage = input.nextLine();// Read a line of message

    for(int i = 0; i < myMessage.length(); i++){
        arr[i] = myMessage.charAt(i);
    }

    Scanner.close();
}