Java 无法使用scanner类从静态块读取输入

Java 无法使用scanner类从静态块读取输入,java,exception,static,java.util.scanner,static-initializer,Java,Exception,Static,Java.util.scanner,Static Initializer,我想从静态块中的用户那里读取数据,需要检查其中的一些条件,但是当我试图调用nextInt()时,它会导致一些错误 public class Test { static int B,H; static{ Scanner s=new Scanner(System.in); B=H=0; B=s.nextInt(); H=s.nextInt(); s.close(); } } 线程“main”ja

我想从静态块中的用户那里读取数据,需要检查其中的一些条件,但是当我试图调用nextInt()时,它会导致一些错误

public class Test {
    static int B,H;
    static{
        Scanner s=new Scanner(System.in);
        B=H=0;
        B=s.nextInt();
        H=s.nextInt();
        s.close();
    }
}
线程“main”java.lang.ExceptionInInitializeError中出现异常

原因:java.util.NoSuchElementException 位于java.util.Scanner.throwFor(Scanner.java:862) 下一步(Scanner.java:1485) 位于java.util.Scanner.nextInt(Scanner.java:2117) 位于java.util.Scanner.nextInt(Scanner.java:2076) 初始化(Solution.java:21) at解决方案。(Solution.java:15)


在Java7中,没有main方法是不可能编译程序的。在此之前,我们可以在没有main方法的情况下编译程序,但不能运行程序。以防万一,如果您正在尝试Java7之前的任何版本,请尝试在s.close()之后添加System.exit(0)(这将停止编译器搜索主要方法)。

尝试编译此版本

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Demo {
    static int B,H;
    static boolean flag=false;
    static {
        Scanner s=new Scanner(System.in);
        B=s.nextInt();
        H=s.nextInt();
        s.close();
        if (B<=0 || H<=0)
            System.out.println("java.lang.Exception: Breadth and height must be positive");
        else
            flag=true;
    }
public static void main(String[] args){
        if (flag) {
            int area = B*H;
            System.out.print(area);
        }
    }
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公开课演示{
静态int B,H;
静态布尔标志=false;
静止的{
扫描仪s=新的扫描仪(System.in);
B=s.nextInt();
H=s.nextInt();
s、 close();

如果(b不要关闭
扫描仪
读取
系统。在
中,我也无法使用给定的代码进行复制。请提供一个?您的jdk版本是什么?主要方法是jdk强制要求的8@Deadpool您可以编译该类并将其加载到应用程序中,以便调用静态init块,对吗?尽管此代码可能如果不能解决问题,一个好的答案应该解释代码的作用以及它是如何帮助的
public class App {
    static int B, H;
    static {
        Scanner s = new Scanner(System.in);
        B = H = 0;
        B = s.nextInt();
        H = s.nextInt();
        s.close();
    }

    public static void main(String[] args) {

    }
}