Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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
当行大于80时引发异常(java)_Java_Exception_Try Catch - Fatal编程技术网

当行大于80时引发异常(java)

当行大于80时引发异常(java),java,exception,try-catch,Java,Exception,Try Catch,我正在尝试编写一个程序,它将一个java文件作为输入(在程序中指定),并逐行读取它。如果一行长度超过80个字符,则抛出异常;如果抛出异常,则程序将打印过长的行,并继续处理程序的其余部分 import java.io.*; import java.util.*; public class LinePolice { public static void main(String[] args) throws LinePoliceTooLongException { try

我正在尝试编写一个程序,它将一个java文件作为输入(在程序中指定),并逐行读取它。如果一行长度超过80个字符,则抛出异常;如果抛出异常,则程序将打印过长的行,并继续处理程序的其余部分

import java.io.*;
import java.util.*;

public class LinePolice
{
   public static void main(String[] args) throws LinePoliceTooLongException
   {
      try
      {
         File file = new File("NameOrientation.java");
         FileReader fileReader = new FileReader(file);
         BufferedReader bufferedReader = new BufferedReader(fileReader);
         StringBuffer stringBuffer = new StringBuffer();
         String line;
         while ((line = bufferedReader.readLine()) != null)
         {
            LinePoliceTooLongException x = new LinePoliceTooLongException(line); 
            if (line.length() > 80)
               throw x;
         }
         fileReader.close();
      }
      catch (IOException e)
      {

      }
   }
}


public class LinePoliceTooLongException extends Exception
{
   LinePoliceTooLongException(String message)
   {
      super(message);
   }
}
当我使用以下文件运行它时,它会拾取长度超过80的第一行,但不会继续遍历该文件

import java.awt.*;
import javax.swing.*;

public class NameOrientation
{
   public static void main(String[] args)
   {
      JFrame frame = new JFrame("NameOrientation");

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      JPanel primary = new JPanel();
      primary.setBackground(Color.green);
      primary.setPreferredSize(new Dimension(250, 250));

      JLabel label1 = new JLabel("********************************************************");
      JLabel label2 = new JLabel("**************************************************************");

      primary.add(label1);
      primary.add(label2);

      frame.getContentPane().add(primary);
      frame.pack();
      frame.setVisible(true);
   }
}   
如果可能的话,有人能告诉我哪里出了问题,我能做些什么来尝试让这一切正常运作。谢谢你的帮助

            while ((line = bufferedReader.readLine()) != null)
            {
                LinePoliceTooLongException x = new LinePoliceTooLongException(line); 
                try{
                    if (line.length() > 80)
                       throw x;
                }catch(LinePoliceTooLongException le){
                    System.out.println("Line:"+line);
                }
             }

由于您正在从while循环中抛出LinePolicyToolOngException而未捕获它,所以无法继续执行其余的行。必须在while循环本身中捕获异常。

在代码中创建异常

 LinePoliceTooLongException x = new LinePoliceTooLongException(line); 
扔了它你就抓不到了。这就是为什么你的计划没有正确完成。我想你现在应该已经明白了

为了解决这个问题,您可以添加
catch
块来捕获刚才抛出的异常。如果您这样做,那将是非常可怕的,抛出异常并在抛出后立即捕获它是没有意义的。无论您想在
catch块中执行什么操作
都要在
if
中执行,并且不要抛出任何异常

 while ((line = bufferedReader.readLine()) != null)
     {
       if (line.length() > 80){
          System.out.println("Line is more than 80 characters and can not be processed: " + line);
     }
 }

如果抛出异常,您将如何继续循环?异常被抛出,因此您的主方法停止,程序退出。如果可以使用if/else语句,为什么要这样做呢?像这里这样“主动”创建
Exception
对象也是个坏主意,因为堆栈跟踪非常昂贵。