0

静的メソッドへのアクセスについて質問があります。私は4つの静的メソッドを持っています。コードに示すように:

package com.itrucking.util;

public class ZKUtil implements Serializable {

private static final long serialVersionUID = 1L;

/**
 * 
 * @author Shekhar
 * @param _class
 * @param listbox
 * To make Listbox sorting enabled
 * @throws NoSuchMethodException 
 * @throws SecurityException 
 */
public static void setSortingEnabled(Class<?> _class, Listbox listbox){
    Map<Listheader, String> sortingPair = new HashMap<Listheader, String>();
    sortingPair = getMapForSorting(_class, listbox);
    if (!sortingPair.isEmpty()) {
        for (Map.Entry<Listheader, String> entry : sortingPair.entrySet()) {
            entry.getKey().setSortAscending(
                    new FieldComparator(entry.getValue(), true));
            entry.getKey().setSortDescending(
                    new FieldComparator(entry.getValue(), false));
        }
    }
}

/**
 * @author Shekhar
 * @param _class
 * @param listbox
 * @return Map<Listheader, String>
 */
private static Map<Listheader, String> getMapForSorting(Class<?> _class,Listbox listbox) {
    List<Listheader> headerList = getListHeaderList(listbox);
    Map<Listheader, String> sortingPair = new HashMap<Listheader, String>();
    System.out.println(_class);
    Field[] fields = _class.getDeclaredFields();
    for (Field f : fields) {
        // System.out.println(f.getName()+":"+f.getType());
        for (Listheader lh : headerList) {
            if (f.getName().equals(getId(lh)))
                sortingPair.put(lh, f.getName());
        }
    }
    System.out.println(sortingPair);
    return sortingPair;
}

private static String getId(Listheader listheader) {
    String listheaderId = null;
    if (listheader.getId().contains("_")) {
        listheaderId = listheader.getId().split("_")[1];
        // System.out.println("listheaderId->"+listheaderId);
    }
    return listheaderId;
}

/**
 * @author Shekhar
 * @param listbox
 * @return  List<Listheader>
 */
@SuppressWarnings("unchecked")
private static List<Listheader> getListHeaderList(Listbox listbox) {
    List<Listheader> headerList = new ArrayList<Listheader>();
    Listhead listhead = null;

    List<Component> listboxComponentList = listbox.getChildren();
    for (Component listboxComponent : listboxComponentList) {
        if (listboxComponent instanceof Listhead) {
            listhead = (Listhead) listboxComponent;
            break;
        }
    }
    List<Component> listOfComp = listhead.getChildren();
    if (listhead != null) {
        for (Component c : listOfComp) {
            if (c instanceof Listheader)
                headerList.add((Listheader) c);
        }
    }
    return headerList;
}

}

そして、私は以下のコードから onLoadShipperDetailsListCtrl() から setSortingEnabled() メソッドを呼び出しています:

 package com.itrucking.webui.controller;


 public class ShipperDetailsListCtrl{

/**
 * @param e
 * @return void 
 */
public void onCreate$window_shipperDetailsList(Event e){
    onLoadShipperDetailsListCtrl();
}


/**
 * @return void
 */
public void onLoadShipperDetailsListCtrl(){
    System.out.println("onLoadShipperDetailsListCtrl called.");
    shipperList = shipperService.getShipperList();
    doRenderListboxShipperDetailsList(shipperList);
    ZKUtil.setSortingEnabled(ShipperMaster.class, listbox_shipperDetailsList);
}

}

だから私が他のクラスから setSortingEnabled() メソッドを呼び出していると思うので、私が保持していたのはパブリックであり、他のメソッドはプライベートとして保持していましたが、次のようなエラーが発生しています: java.lang.NoSuchMethodError: com/itrucking/util/ZKUtil.getMapForSorting (Ljava/lang/Class;Lorg/zkoss/zul/Listbox;)Ljava/util/Map;

setSortingEnabled() の ZKUtil.getMapForSorting() 呼び出しでエラー NoSuchMethodError が発生する理由

同じクラスで public から private メソッドを呼び出せることはわかっています。だから私は何が問題なのか理解できません。

前もって感謝します。

4

1 に答える 1

5

A NoSuchMethodError(コンパイラ エラーではなく、メソッドが見つからないという実行時エラー) は、通常、.class使用しているファイルのバージョンが、コンパイルしたファイルとは異なることを意味します。この場合、 に変更を加えた可能性がありますZKUtil.javaが、JVM は古いバージョンの をロードしていZKUtil.classます。すべての.classファイルを消去して再構築します。

于 2013-10-25T07:19:41.367 に答える