Java运行报java.lang.NoSuchMethodException: Virual.main错误如何解决?
问题原因&修复方案
1. 直接报错的核心原因
你当前启动类选错了:
java.lang.NoSuchMethodException: Practice.Virual.main [class [Ljava.lang.String;]
这个错误表示JVM在你指定的启动类Virual里找不到入口方法main,你的main方法实际写在residentinfo类里,运行时选择residentinfo作为启动类即可解决该报错。
2. 代码其他语法/逻辑问题
- 你贴出的代码片段缺少
Virual类的定义开头,需要在属性定义最上方补上:
public class Virual {
- 缺少
Scanner的导入语句,在代码最开头加上:
import java.util.Scanner;
- Scanner输入逻辑存在换行残留问题:调用
nextInt()读取整数后,输入缓冲区会残留换行符,后续的nextLine()会直接读取到空字符串,不会等待用户输入。需要在每次nextInt()后额外调用一次nextLine()吃掉残留的换行:
System.out.println("Enter Street No: "); rsd.streetno = in.nextInt(); in.nextLine(); // 吃掉nextInt残留的换行符,保证后续nextLine正常读取 ... System.out.println("Enter Zip Code: "); rsd.zipcode = in.nextInt(); in.nextLine(); // 同理需要补充
- 按照Java类名大驼峰的通用编码规范,建议将
residentinfo修改为ResidentInfo。
3. 修复后完整可运行代码
import java.util.Scanner; public class Virual { String name, streetname, barangay, city, region; int zipcode, streetno; void display() { System.out.println("Name: " + this.name); System.out.println("Street No: " + this.streetno); System.out.println("Street: " + this.streetname); System.out.println("Barangay: " + this.barangay); System.out.println("City : " + this.city); System.out.println("Region: " + this.region); System.out.println("Zip Code : " + this.zipcode); } } class ResidentInfo { public static void main(String[] args) { Scanner in = new Scanner(System.in); Virual rsd = new Virual(); System.out.println("Enter Name: "); rsd.name = in.nextLine(); System.out.println("Enter Street No: "); rsd.streetno = in.nextInt(); in.nextLine(); System.out.println("Enter Street Name: "); rsd.streetname = in.nextLine(); System.out.println("Enter Barangay: "); rsd.barangay = in.nextLine(); System.out.println("Enter City: "); rsd.city = in.nextLine(); System.out.println("Enter Region: "); rsd.region = in.nextLine(); System.out.println("Enter Zip Code: "); rsd.zipcode = in.nextInt(); in.nextLine(); rsd.display(); in.close(); } }
运行时选择ResidentInfo作为启动类即可正常执行。
内容的提问来源于stack exchange,提问作者Alain Lado
相关产品推荐
相关产品推荐

