java程序编译时不会出错,但不会运行

java程序编译时不会出错,但不会运行,java,Java,这是stackoverflow成员建议更改后的代码。代码编译时没有错误,但是当我运行“JavaRealtor11”时,我得到以下错误。我正在导入正确的库,因此不确定问题是什么 该程序的目标是读取两个值(第一行是字符串(John),第二行是double(100)),并通过一些计算将它们输出到JOption消息 线程“main”java.lang.NullPointerException中出现异常 位于sun.misc.FloatingDecimal.readJavaFormatString(未知源

这是stackoverflow成员建议更改后的代码。代码编译时没有错误,但是当我运行“JavaRealtor11”时,我得到以下错误。我正在导入正确的库,因此不确定问题是什么

该程序的目标是读取两个值(第一行是字符串(John),第二行是double(100)),并通过一些计算将它们输出到JOption消息

线程“main”java.lang.NullPointerException中出现异常 位于sun.misc.FloatingDecimal.readJavaFormatString(未知源) 位于java.lang.Double.parseDouble(未知源) 在Realtor11.main(Realtor11.java:49)


}

编译错误和运行时错误之间存在差异(这是事实)

试试这个,而不是while循环

String line = in.readLine();
if(line != null) {
    seller = line;
}
line = in.readLine();
if(line != null) {
    price = Double.parseDouble(line);
}
in.close();

编译错误和运行时错误之间存在差异(这是事实)

试试这个,而不是while循环

String line = in.readLine();
if(line != null) {
    seller = line;
}
line = in.readLine();
if(line != null) {
    price = Double.parseDouble(line);
}
in.close();

问题是这条线

while (in.read()!= -1);

这是一种“退化循环”,因为末尾有分号。它将继续从文件中读取,直到没有剩余内容可读取为止。在这之后,没有要解析的
值。

问题是这一行

while (in.read()!= -1);
这是一种“退化循环”,因为末尾有分号。它将继续从文件中读取,直到没有剩余内容可读取为止。在此之后,没有要分析的
值。

请查看以下代码:

while (in.read()!= -1);
seller = in.readLine();
price = Double.parseDouble(in.readLine());
in.close();
第一行从读者那里读取所有内容,而不做任何处理。然后,当所有的东西都读过之后,你又在试着读一行。这显然会返回null,因为您已经阅读了所有内容。然后您尝试再次读取一行(当然会继续返回null),并将该null解析为double

最后,你关闭了阅读器,但是因为你没有在finally块中完成,所以之前抛出的NPE阻止了它的关闭

我认为是时候让您阅读您正在使用的方法的javadoc和JavaIO教程了

此外,要避免类似瘟疫的情况:

catch (IOException e) {}
您只是对自己隐藏异常,如果发生IOException,则无法进行任何诊断。

请查看以下代码:

while (in.read()!= -1);
seller = in.readLine();
price = Double.parseDouble(in.readLine());
in.close();
第一行从读者那里读取所有内容,而不做任何处理。然后,当所有的东西都读过之后,你又在试着读一行。这显然会返回null,因为您已经阅读了所有内容。然后您尝试再次读取一行(当然会继续返回null),并将该null解析为double

最后,你关闭了阅读器,但是因为你没有在finally块中完成,所以之前抛出的NPE阻止了它的关闭

我认为是时候让您阅读您正在使用的方法的javadoc和JavaIO教程了

此外,要避免类似瘟疫的情况:

catch (IOException e) {}

您只是对自己隐藏异常,如果发生IOException,则无法进行任何诊断。

这三行代码会导致错误:

    while (in.read()!= -1);           // this reads until EOF
    seller = in.readLine();           // this gets a null-pointer since we're behind EOF
    price = Double.parseDouble(in.readLine()); // same as above, This is the printed error.
这可能是:

    seller = in.readLine();  // first line: seller
    price = Double.parseDouble(in.readLine()); // second line: price
这是可以改进的:

    seller = in.readLine();  // first line: seller
    String sPrice = in.readLine(); // second line: price
    if ( sPrice != null )
        price = Double.parseDouble(sPrice); 

这三行导致错误:

    while (in.read()!= -1);           // this reads until EOF
    seller = in.readLine();           // this gets a null-pointer since we're behind EOF
    price = Double.parseDouble(in.readLine()); // same as above, This is the printed error.
这可能是:

    seller = in.readLine();  // first line: seller
    price = Double.parseDouble(in.readLine()); // second line: price
这是可以改进的:

    seller = in.readLine();  // first line: seller
    String sPrice = in.readLine(); // second line: price
    if ( sPrice != null )
        price = Double.parseDouble(sPrice); 


错误指向哪一行?是时候做一点调试了。考虑使用调试器或用大量的PrtLNS来喷洒代码。FYI—我从编译错误中显式地声明变量“价格”和“卖方”。但我认为这不重要,因为变量将根据文本文件的内容进行更新。当应用程序在需要对象的情况下尝试使用null时,会引发NullPointerException:正如@HoverCraftFullOfels建议的那样,您应该调试应用程序。错误不是自我解释的吗?你知道错误,你知道行号,你可以检查是什么导致了这种类型的错误。尝试调试。错误指向哪一行?是时候进行一点调试了。考虑使用调试器或用大量的PrtLNS来喷洒代码。FYI—我从编译错误中显式地声明变量“价格”和“卖方”。但我认为这不重要,因为变量将根据文本文件的内容进行更新。当应用程序在需要对象的情况下尝试使用null时,会引发NullPointerException:正如@HoverCraftFullOfels建议的那样,您应该调试应用程序。错误不是自我解释的吗?你知道错误,你知道行号,你可以检查是什么导致了这种类型的错误。尝试调试。为True,我修复了此问题。还是一样的错误。我正在整理其他评论。我是新来的,所以会继续研究的。大卫,好眼力。我不会意识到的。好吧,你是怎么修好的?您现在对
Double.parseDouble
的调用是什么?调试部分修复的代码有点困难,不知道修复是什么;这意味着他读“sellers”,直到EOF和Double.parseDouble仍然为空,因为EOF已经达到了…是的,这似乎很有可能。是的,我解决了这个问题。还是一样的错误。我正在整理其他评论。我是新来的,所以会继续研究的。大卫,好眼力。我不会意识到的。好吧,你是怎么修好的?您现在对
Double.parseDouble
的调用是什么?调试部分修复的代码有点困难,不知道修复是什么;这意味着他读“sellers”,直到EOF和Double.parseDouble仍然为空,因为EOF已经达到…是的,这似乎很有可能。谢谢Axel的EOF声明。现在我明白了为什么在第一行之后这些值不会被处理。谢谢Axel的EOF声明。现在我明白了为什么在第一行之后这些值不会被处理。我会说实话。我甚至没有研究“例外”部分。我在集中精力