在java中计算成本时出现NullPointerException

在java中计算成本时出现NullPointerException,java,nullpointerexception,classnotfoundexception,Java,Nullpointerexception,Classnotfoundexception,以下方法计算成本。它可以在需要时访问其他类。Cloud类保存用于定价的信息 但是,该方法在下面一行中给了我一个nullpointer异常。 BoundaryPrice btp=cloud.getBoundaryPriceMap().get(boundaryType); totalcost的值永远不会改变。 有没有办法突出这个问题 private float getCostForConnector(Connector connector) { Cloud cloud = new Cloud

以下方法计算成本。它可以在需要时访问其他类。Cloud类保存用于定价的信息

但是,该方法在下面一行中给了我一个nullpointer异常。 BoundaryPrice btp=cloud.getBoundaryPriceMap().get(boundaryType); totalcost的值永远不会改变。
有没有办法突出这个问题

private float getCostForConnector(Connector connector)
{
    Cloud cloud = new Cloud("http://amazon.com/europeEC2Clouds#dublinEC2Cloud", dynDesInventory);
    List<Port> portList = getListOfPort(connector);
    Resource root = findCommonRoot(connector);

    Port p1 = portList.get(0);
    Port p2 = portList.get(1);
    float totalCost = 0.0f;
    try
    {
    String rootBoundaryType = getRootBoundaryType();

    Float dataProducedFromP1 = getDataCountForPort(p1);
    Float dataProducedFromP2 = getDataCountForPort(p2);

    List<String> portOnePathOut =  getListOfNetworkBoundary(p1, root);
    List<String> portTwoPathOut =  getListOfNetworkBoundary(p2, root);

        for(String boundaryType: portOnePathOut)
        {
            BoundaryPrice btp = cloud.getBoundaryPriceMap().get(boundaryType);
            if (btp != null)
            {
                totalCost += btp.getOutPrice(boundaryType) + dataProducedFromP1;
                totalCost += btp.getInPrice(boundaryType) + dataProducedFromP2;
            }
        }

        for(String boundaryType: portTwoPathOut)
        {
            BoundaryPrice btp = cloud.getBoundaryPriceMap().get(boundaryType);
            if (btp != null)
            {
                totalCost += btp.getOutPrice(boundaryType) + dataProducedFromP2;
                totalCost += btp.getInPrice(boundaryType) + dataProducedFromP1;
            }
        }

        BoundaryPrice btp = cloud.getBoundaryPriceMap().get(rootBoundaryType);
        if (btp != null)
        {
            totalCost += (dataProducedFromP1 + dataProducedFromP2) * btp.getIntraPrice(rootBoundaryType);
        }


    }catch(NullPointerException e) {
        System.err.println("Caught NullPointerException: ");
    }
    return totalCost;

}
private float getCostForConnector(连接器连接器)
{
云=新云(“http://amazon.com/europeEC2Clouds#dublinEC2Cloud“,dynDesInventory);
列表端口列表=getListOfPort(连接器);
资源根=findCommonRoot(连接器);
端口p1=portList.get(0);
端口p2=portList.get(1);
浮动总成本=0.0f;
尝试
{
字符串rootBoundaryType=getRootBoundaryType();
从p1生成的浮点数据=端口(p1)的getDataCountForPort;
Float dataProducedFromP2=getDataCountForPort(p2);
List portOnePathOut=getListOfNetworkBoundary(p1,根);
List portTwoPathOut=getListOfNetworkBoundary(p2,根);
for(字符串边界类型:portOnePathOut)
{
BoundaryPrice btp=cloud.getBoundaryPriceMap().get(boundaryType);
如果(btp!=null)
{
总成本+=btp.getOutPrice(boundaryType)+从P1生成的数据;
总成本+=btp.getInPrice(boundaryType)+从P2生成的数据;
}
}
for(字符串边界类型:portTwoPathOut)
{
BoundaryPrice btp=cloud.getBoundaryPriceMap().get(boundaryType);
如果(btp!=null)
{
总成本+=btp.getOutPrice(boundaryType)+从P2生成的数据;
总成本+=btp.getInPrice(boundaryType)+从P1生成的数据;
}
}
BoundaryPrice btp=cloud.getBoundaryPriceMap().get(rootBoundaryType);
如果(btp!=null)
{
总成本+=(从P1生成的数据+从P2生成的数据)*btp.getIntraPrice(rootBoundaryType);
}
}捕获(NullPointerException e){
System.err.println(“捕获的NullPointerException:”);
}
返回总成本;
}
  • portOnePathOut
    portTwoPathOut
    列表之一为空
  • portList
    为空
  • cloud.getBoundaryPriceMap()
    为空
  • btp.getIntraPrice(rootBoundaryType)
    是数字包装,为空
  • dataProducedFromP1
    dataProducedFromP2
    为空
  • btp.getOutPrice(boundaryType)
    btp.getInPrice(rootBoundaryType)
    btp.getInPrice(boundaryType)
    为空
  • 您调用的函数中的某些对象为null

  • 下次发布堆栈跟踪时,列表会短得多。

    catch(NullPointerException e){System.err.println(“catched IOException:”);
    。这对维护人员没有帮助。“想在这里突出显示问题吗?”NullPointerException应该足够明确。哪一行抛出NPE?e.printStackTrace()?删除
    catch
    语句(或添加代码以显示异常消息)并在此处发布异常消息(不要忘记说明示例中哪一行与异常消息行号相对应!)e.printStackTrace();//比简单地通知发生异常有用得多感谢您的帮助。在BoundaryPrice btp=cloud.getBoundaryPriceMap().get(boundaryType)处找到NPE;此行