我正在尝试编写一个程序,它将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);
}
}
如果有可能,有人可以告诉我哪里出错了,我可以做些什么来尝试让它发挥作用。感谢您的帮助
答案 0 :(得分:2)
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循环中抛出LinePoliceTooLongException而未捕获它,因此您无法继续其余的行。你必须在while循环中捕获异常。
答案 1 :(得分:0)
在您的代码中,您正在创建例外
LinePoliceTooLongException x = new LinePoliceTooLongException(line);
扔掉它而你却没有抓住它。这就是你的程序没有正确完成的原因。我想你现在已经明白了。
要解决此问题,您可以添加catch
块来捕获刚刚抛出的异常。如果你这样做,那将是一个非常可怕的事情,抛出一个异常并在它被抛出后立即捕获它没有任何意义。无论你想在catch block
做什么,都要在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);
}
}