1

このコードを修正しようとすると大きな問題が発生し、大きなエラーが発生し続けます。

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at com.allcare.arfile.CloudStoreInfo.getStoreInfoFromProvider(CloudStoreInfo.java:62)
at com.allcare.arfile.ArFileJApplet.listBlobStoreContents(ArFileJApplet.java:959)
at com.allcare.arfile.ArFileJApplet.uploadFile(ArFileJApplet.java:938)
at com.allcare.arfile.ArFileJApplet.sendCloud_buttonActionPerformed(ArFileJApplet.java:807)
at com.allcare.arfile.ArFileJApplet.access$1400(ArFileJApplet.java:26)
at com.allcare.arfile.ArFileJApplet$14.actionPerformed(ArFileJApplet.java:445)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

問題は私の割り当てにあると思います。私が取得しているリストから、少なくとも1つの完全なパーツ変数があることを知っています。要素変数の各要素を出力しようとしましたが、それらはすべてそこにあります(ただし、割り当てを開始する前にこれを実行する必要があります。そうしないと、関数に到達しません)、printステートメントに到達しません(それも原因ではありません、私はそれをコメントアウトしようとしました)。正確にnullが何であるかを見つけることができません:

public void getStoreInfoFromProvider(BlobStore blobStore)
{
    ListContainerOptions listOptions = new ListContainerOptions();
    String temp = blobStore.list("", listOptions.recursive()).toString(); // returns a string containing all info of the filesystem on the cloud

    // remove the [ and ] characters as well as split whenever encounters [t
    temp = temp.replaceFirst("\\[\\[", "");
    temp = temp.replaceFirst("\\]\\]", "");
    String[] parts = temp.split("\\[t"); 

    for (int x = 0; x < 1; x++)
    {
        String[] elements = parts[x].split(", ");

        System.out.println(elements.length);
        System.out.println(elements[x]);

// this line below is where the code breaks, if i comment it out, then the next line breaks and so on and so forth
        type[x] = elements[0];
        providerId[x] = elements[1];
        name[x] = elements[2];
        location[x] = elements[3];
        scope[x] = elements[4];
        description[x] = elements[5];
        parent[x] = elements[6];
        isoCodes[x] = elements[7];
        metadata[x] = elements[8];
        uri[x] = elements[9];
        userMetadata[x] = elements[10];

        printSingleCloudStoreInfo(x);
    }
}

どんな助けや提案も大歓迎です!

4

1 に答える 1

2

単純化された for ループについて聞いたことがありますか? まあ、それを単純化したと呼ぶのには理由があります...

public void getStoreInfoFromProvider (BlobStore blobStore)
{
    ListContainerOptions listOptions = new ListContainerOptions ();
    // returns a string containing all info of the filesystem on the cloud
    String temp = blobStore.list ("", listOptions.recursive ()).toString (); 

    temp = temp.replaceFirst("\\[\\[", "");
    temp = temp.replaceFirst("\\]\\]", "");
    String[] parts = temp.split("\\[t"); 

    for (String part: parts) 
    {
        String[] elements = part.split(", ");
        System.out.println(elements.length);
        // ...

推測ですが、62行目はどこですか。コメントでマークするか、引用して何らかの方法で説明する必要があります。

アップデート:

62行目がマークされているので:

type が null に設定されている場合、初期化されず、null になります。必要なサイズで初期化する必要があります-たとえば、文字列配列であるため: String [] type = new String[2];. 初期化しない場合、タイプ [0] を格納するためのスペースが予約されていません。

于 2012-05-11T09:07:31.013 に答える