当行大于80时引发异常(java)
我正在尝试编写一个程序,它将一个java文件作为输入(在程序中指定),并逐行读取它。如果一行长度超过80个字符,则抛出异常;如果抛出异常,则程序将打印过长的行,并继续处理程序的其余部分当行大于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
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
对象也是个坏主意,因为堆栈跟踪非常昂贵。