Java一直给我一个错误,即使没有红线

Java一直给我一个错误,即使没有红线,java,Java,此程序用于在用户输入的指定目录中创建文件。用户还可以指定名称和文件扩展名。将标记代码的最新更改。我最近做的一件事是编写代码,这样程序就可以判断用户添加的扩展名或扩展名的有效性 java.lang.ExceptionInInitializerError Caused by: java.lang.NullPointerException at filecreator.coolversion.FileCreatorCoolversion.<clinit> (FileCreatorC

此程序用于在用户输入的指定目录中创建文件。用户还可以指定名称和文件扩展名。将标记代码的最新更改。我最近做的一件事是编写代码,这样程序就可以判断用户添加的扩展名或扩展名的有效性

java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
    at filecreator.coolversion.FileCreatorCoolversion.<clinit>
(FileCreatorCoolversion.java:13)
Exception in thread "main" 
C:\Users\deadm\AppData\Local\NetBeans\Cache\8.2\executor-
snippets\run.xml:53: Java returned: 1
java.lang.ExceptionInInitializeError
原因:java.lang.NullPointerException
位于filecreator.coolversion.FileCreatorCoolversion。
(FileCreatorCoolversion.java:13)
线程“main”中出现异常
C:\Users\deadm\AppData\Local\NetBeans\Cache\8.2\executor-
snippets\run.xml:53:Java返回:1
^错误

代码:

package filecreator.coolversion;
导入java.io.File;
导入java.io.IOException;
导入java.util.*;
公共类FileCreatorCoolversion{
公共静态扫描仪sc=新扫描仪(System.in);
公共静态布尔成功=false;
公共静态字符串文件名;
公共静态字符串filedir;
公共静态字符串fileext=filename.substring(filename.lastIndexOf(“.”+1);//此处最近的更改
公共静态文件;
公共静态文件目录;
公共静态void main(字符串[]args)引发IOException{
System.out.println(“****************************************”);
System.out.println(“*欢迎使用File Creator 2.0!*”);
System.out.println(“****************************************”);
System.out.println(“”);
而(!成功){
System.out.println(“是否要创建文件?是/否?”);
字符串usrans=sc.nextLine();
如果(usrans.equalsIgnoreCase(“y”)){
System.out.println(“继续创建文件…”);
打破
}否则如果(usrans.equalsIgnoreCase(“n”)){
System.out.println(“退出程序…”);
系统出口(0);
}如果(!usrans.equalsIgnoreCase(“y”)| |!usrans.equalsIgnoreCase(“n”)){
System.out.println(“这不是有效答案!请重试!”);
System.out.println(“”);
}
}
而(!成功){
System.out.println(“”);
System.out.println(“请输入有效的文件名:”);
filename=sc.nextLine();
if(filename.isEmpty()){
System.out.println(“请输入文件名!”);
打破
}如果(filename.contains(“/”)|| filename.contains(“:”)|124;
filename.contains(“*”)|| filename.contains(“?”)||
filename.contains(“”)||
filename.contains(“|”)filename.contains(“\”)||
文件名。包含(“\\”){
System.out.println(“请不要包括/\\:*?\”<>|);
}如果(!filename.contains(“.”),则为else{
System.out.println(“请添加适当的文件扩展名”);
}如果(!fileext.isEmpty()| | fileext.contains(“[^\\p{IsDigit}\\p{IsAlphabetic}]”)包含(//
System.out.println(“请指定有效的文件扩展名!”);
}否则{
System.out.println(“”);
System.out.println(“文件名\”+文件名+”所选“\”);
打破
}
}
System.out.println(“”);
System.out.println(“您希望将文件保存在哪里?”);
System.out.println(“请输入有效目录”);
而(!成功){
filedir=sc.nextLine();
如果(!filename.contains(“:”){
System.out.println(“”);
System.out.println(“请输入有效目录!”);
}如果(!filename.contains(\\”),则为else{
System.out.println(“”);
System.out.println(“请输入有效目录!”);
}否则{
System.out.println(“文件目录\”+filedir+“\”已选择”);
打破
}
}
System.out.println(“”);
System.out.println(“创建文件…”);
}
}

我不知道错误是从哪里来的,请帮帮我。到目前为止,我还不太擅长调试程序,这是我需要做的事情之一。请帮帮我。

你不能这样做:

public static String fileexten = filename.substring(filename.lastIndexOf(".") + 1);

您的文件名为空。填充文件名后在方法内执行此操作。

文件名仍然为空。因此,首先要这样做:

public static String fileexten;
然后在给filename一个值后立即初始化:

while(!success) { 
System.out.println(" ");
 System.out.println("Please enter a valid filename:"); 
filename = sc.nextLine();
fileexten = filename.substring(filename.lastIndexOf(".") + 1);
while(!success) { 
System.out.println(" ");
 System.out.println("Please enter a valid filename:"); 
filename = sc.nextLine();
fileexten = filename.substring(filename.lastIndexOf(".") + 1);