-2

次のメソッドは、コストを計算します。必要に応じて他のクラスにアクセスします。クラウド クラスには、価格に関する情報が保持されます。

ただし、メソッドは次の行で 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;

}
4

1 に答える 1

1
  1. portOnePathOut リストの1 つportTwoPathOut が null です
  2. portList無効です
  3. cloud.getBoundaryPriceMap()無効です
  4. btp.getIntraPrice(rootBoundaryType)数値ラッパーで、null です
  5. dataProducedFromP1 またはdataProducedFromP2nullです
  6. btp.getOutPrice(boundaryType)btp.getIntraPrice(rootBoundaryType)またはbtp.getInPrice(boundaryType)ヌル
  7. 呼び出す関数内の一部のオブジェクトが null です

次にスタック トレースを投稿すると、リストはずっと短くなります。

于 2012-06-21T14:49:58.573 に答える