public static void main() {
String fileName = "cardNumbers.txt";
String line = null;
try {
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null)
{
CreditCard card = new CreditCard(line);
if (card.creditCardType().equalsIgnoreCase("Unknown"))
{
System.out.println("Card number " + card.getCardNumber() + "is an unknown credit card type.");
}
else if (card.isValid())
{
System.out.println(card.creditCardType() + " number" + card.getCardNumber() + " is valid.");
}
else if (!card.isValid())
{
System.out.println(card.creditCardType() + " number " + card.getCardNumber() + " is not valid.");
}
}
}
catch (FileNotFoundException ex)
{
System.out.println("file not found exception thrown");
}
catch (IOException ex)
{
System.out.println("error while reading the file");
}
finally
{
System.exit(0);
}
}
当我运行此方法时,它只是说ProcessCardNumbers.main(); VM Terminated.
而不是实际打印出内容。
如果我在功能的最开始或finally
块中添加打印件,则会打印出来。
我不确定为什么会这样或者我如何解决它。
答案 0 :(得分:0)
这似乎在您的文本文件 cardNumbers.txt 中没有数据。当此程序在while循环 bufferedReader.readLine())内执行时。将返回 null 。所以循环将终止。终止后,你在finally块中写了 System.exit(0); 函数,当场终止JVM。因此,JVM现在终止,这就是为什么在使用此代码后您无法看到任何内容的原因。
如果要检查工作,请在finally块中写一个SOP语句。可能会在没有终止JVM的情况下执行。
答案 1 :(得分:0)
正如你告诉我们的那样:
打印开头添加println
和
在finally中添加println也适用
我们可以推断出您的代码正在运行。只是当你到达while((line = bufferedReader.readLine()) != null)
时,行保持null
,所以你永远不会输入你的。
为什么?好吧,你的文件可能是空的开始。如果不是,请仔细检查文件的编码:它可能没有使用正确的返回符号,因此没有“完成的行”。
答案 2 :(得分:0)
这里的问题不是代码中的错误,而是设计问题,不会让你看到错误。
您可能会收到未声明的异常(RuntimeException
)并且VM无法打印它,因为您之前已在finally
中将其删除。
您有几种选择:
删除System.exit(0);
并让它正常死亡。如果有另一个非守护程序线程在运行,则可能会失败。你可以尝试阻止它。例如,您可以cancel a Timer。
在catch (RuntimeException e) {
之前添加finally
部分,然后打印捕获的错误。 e.printStackTrace();
应该做到这一点。
对于其中任何一个,您应该在控制台上看到异常,以便您可以修复它。
答案 3 :(得分:-1)
您的主要方法签名必须如下所示:
public static void main(String[] args)
而不是
public static void main()