Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用代码终止eclipse(在java中)_Java_Eclipse_Process - Fatal编程技术网

使用代码终止eclipse(在java中)

使用代码终止eclipse(在java中),java,eclipse,process,Java,Eclipse,Process,我一直在使用while(scanner.hasNext()){}方法 读取文件,然后一直执行程序。但是我注意到,即使当程序(Eclipse)完成这个过程时,CPU的使用率也在急剧增加,而且在我按下这个按钮之前,它不会完全停止。 我还使用了这个函数System.exit(0)来停止程序,但我仍然必须按下按钮 我的代码中是否存在使程序无法停止的缺陷 public class HW3 { /* Description */ public static void

我一直在使用while(scanner.hasNext()){}方法 读取文件,然后一直执行程序。但是我注意到,即使当程序(Eclipse)完成这个过程时,CPU的使用率也在急剧增加,而且在我按下这个按钮之前,它不会完全停止。

我还使用了这个函数System.exit(0)来停止程序,但我仍然必须按下按钮

我的代码中是否存在使程序无法停止的缺陷

public class HW3
{

    /*
      Description
    */
    public static void main(String[] args) throws FileNotFoundException 
    {
        final File file1 = new File(args[0]);
        final File file2 = new File(args[1]);
        final Scanner sc1 = new Scanner(file1);
        HW3 instance = new HW3 ();
        while (sc1.hasNext()) {
            print(instance.splitSentence(sc1.nextLine()));
        }
        sc1.close();
        final Scanner sc2 = new Scanner(file2);
        while (sc2.hasNext()) {

        }
        System.exit(1);
    }
    public void constructTreeNode(String[] stringArray) {

    }
    private String[] splitSentence (String sentence) {
        int wordCount = 1;
        for (int i = 0; i < sentence.length(); i++) {
            if (sentence.charAt(i) == ' ') {
                wordCount++;
            }
        }
        String[] arr = new String[wordCount];
        wordCount = 0;
        String temp = "";
        for (int i = 0; i < sentence.length(); i++) {
            if (sentence.charAt(i) == ' ' || i == sentence.length() - 1) {
                arr[wordCount] = temp;
                wordCount++;
                temp = "";
            } else {
                temp += sentence.charAt(i);
            }
        }
        return arr;
    }
    private static void print (String[] arr) {
        for(String e : arr) {
            System.out.println(e);
        }
    }
}
公共类HW3
{
/*
描述
*/
公共静态void main(字符串[]args)引发FileNotFoundException
{
最终文件file1=新文件(args[0]);
最终文件file2=新文件(args[1]);
最终扫描仪sc1=新扫描仪(文件1);
HW3实例=新HW3();
while(sc1.hasNext()){
打印(instance.splitsense(sc1.nextLine());
}
sc1.close();
最终扫描仪sc2=新扫描仪(文件2);
while(sc2.hasNext()){
}
系统出口(1);
}
公共void构造函数节点(字符串[]字符串数组){
}
私有字符串[]拆分语句(字符串语句){
int-wordCount=1;
for(int i=0;i<句子长度();i++){
如果(句子字符(i)=''){
字数++;
}
}
String[]arr=新字符串[wordCount];
字数=0;
字符串temp=“”;
for(int i=0;i<句子长度();i++){
if(句子.charAt(i)=''| | i==句子.length()-1){
arr[wordCount]=temp;
字数++;
温度=”;
}否则{
temp+=句子字符(i);
}
}
返回arr;
}
私有静态无效打印(字符串[]arr){
用于(字符串e:arr){
系统输出打印ln(e);
}
}
}

您遇到的问题是这段代码

final Scanner sc2 = new Scanner(file2);
while (sc2.hasNext()) {

}
System.exit(1);
创建扫描仪并输入循环,直到扫描仪没有新数据;但你不会从扫描仪上读取任何数据。只要文件file2不是空的,您就会进入一个无限循环,并且System.exit(1);代码将无法访问

这也是代码永远无法完成的原因,因为它被困在这个循环中。如果代码到达程序的main()方法入口点的末尾,则代码将完成(也就是说,除非您特别希望指示错误,否则不需要调用System.exit(int n))

修复方法:

final Scanner sc2 = new Scanner(file2);
while (sc2.hasNext()) {
    String line = sc2.nextLine();
}
System.exit(1);

而没有实体的(sc2.hasNext())肯定是一个无限循环?您没有从扫描仪读取任何信息。您需要实际从扫描仪读取数据(next()或nextLine()可能是您想要的),否则文件将永远不会读取任何行,因此总是从hasNext()返回true。我认为hasNext()本身有一个函数可以跳到下一行。因为,我以前从来没有遇到过这个问题,这对我来说是一个前所未有的错误:(.无论如何,谢谢。我以前也犯过类似的错误。不过,如果它跳到下一行,你将无法阅读当前行(或者尝试阅读一行将跳过另一行)。是的。是的。这是有意义的