簡體   English   中英

Java HashTable空指針異常

[英]Java HashTable null pointer exception

我正在建立一台服務器,向客戶發送問題,然后從他們那里接收答案,但是當我向客戶發送問題時,我想使其無法再次發送一個小時,這意味着我向客戶發送問題之后,我希望這個問題永遠不會發送給任何其他客戶一小時,

static Hashtable<Integer, List<Integer>> unavialbeQuestions =
new Hashtable<Integer, List<Integer>>();

關鍵是clientID,值是一小時內永遠不會發送給該客戶的問題ID的列表,此功能使我無法回答問題

public void setUnavialbeQuestion(final String cellName, final int questionID) {
        List<Integer> cells = getCellsIntersectedWithCell(cellName);
        int cellID = getCellID(cellName);
        cells.add(cellID);
        for (int i = 0; i < cells.size(); i++) {
            if (unavialbeQuestions.containsKey(cellID)) {
                unavialbeQuestions.get(cells.get(i)).add(questionID);
            } else {
                List<Integer> lll = new LinkedList<Integer>();
                lll.add(questionID);
                unavialbeQuestions.put(cellID, lll);
            }
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    f(cellName, questionID);
                }
            }, 1000 * 120);
        }
    }

看到一個小時后將觸發的函數f() (在我的演示中僅2分鍾),這是問題所在,執行f()函數時出現空指針異常:

protected void f(String cellName, int questionDI) {
        // TODO Auto-generated method stub
        List<Integer> cells = getCellsIntersectedWithCell(cellName);
        int cellID = getCellID(cellName);
        cells.add(cellID);

        for(int i=0;i<cells.size();i++){
            int index = unavialbeQuestions.get(cells.get(i)).indexOf(questionDI);
            unavialbeQuestions.get(cells.get(i)).remove(index);
        }
    }

index參數上的異常,我在做什么錯?

您無需在此處檢查返回的列表是否不為null:

unavialbeQuestions.get(cells.get(i)).indexOf(questionDI);

和這里:

unavialbeQuestions.get(cells.get(i)).remove(index);

您可以在此處為地圖使用不同的鍵:

if (unavialbeQuestions.containsKey(cellID)) {

和這里:

unavialbeQuestions.get(cells.get(i)).add(questionID);

(而且您的代碼也不是線程安全的)

unavialbeQuestions或單元格列表可以為null 如果您嘗試訪問它的方法,它將拋出NullPointerException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM