Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
Java 为什么我的程序停止运行并且不返回错误?_Java_Io_While Loop - Fatal编程技术网

Java 为什么我的程序停止运行并且不返回错误?

Java 为什么我的程序停止运行并且不返回错误?,java,io,while-loop,Java,Io,While Loop,我将声明放在while循环中,程序不会运行,也不会返回任何错误。我怀疑while循环会变成一个无限循环 try { while (true) { inputStream = new ObjectInputStream (new FileInputStream (fil

我将声明放在while循环中,程序不会运行,也不会返回任何错误。我怀疑while循环会变成一个无限循环

                    try
                    {
                        while (true)
                        {
                            inputStream = new ObjectInputStream (new FileInputStream (fileName));
                            Ship copyObject = (Ship) inputStream.readObject();
                            String nameCompany = copyObject.getCompanyName();

                            if (compName.equalsIgnoreCase(nameCompany)){
                                listShipName += (copyObject.getShipName() + ", ");
                                numberOfShip ++;
                            }
                        }
                    }

                    catch (EOFException e)
                    {
                    }

                    catch (Exception e)
                    {
                    e.printStackTrace();
                    }
但是如果我将输入流的声明放在while循环之外,程序就会成功运行。有人能解释为什么会这样吗

                        try
                        {
                            inputStream = new ObjectInputStream (new FileInputStream (fileName));

                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                        try
                        {
                            while (true)
                            {

                                Ship copyObject = (Ship) inputStream.readObject();
                                String nameCompany = copyObject.getCompanyName();

                                if (compName.equalsIgnoreCase(nameCompany)){
                                    listShipName += (copyObject.getShipName() + ", ");
                                    numberOfShip ++;
                                }
                            }
                        }

                        catch (EOFException e)
                        {
                        }

                        catch (Exception e)
                        {
                        e.printStackTrace();
                        }

在循环的每次迭代中,您都会重新打开文件,这意味着您只能从文件中读取第一个对象。但是你一遍又一遍地读同一个物体


除了只打开一次文件外,您还应该在不引发异常的情况下检测文件的结尾。作为一种风格,异常应该在出现问题时抛出,而不是理所当然地抛出。

现在我意识到,在每次迭代中,我都会重新打开输入流,这样循环就不会到达文件的末尾,它就会变得无限大

发布完整的可运行示例plzzyeah!你的问题似乎不完整。