0

我正在构建一个服务器来向客户发送问题,然后从他们那里接收答案,但是当我向客户发送问题时,我想让它在一个小时内无法再次发送,我的意思是在我向客户发送问题之后,我希望这个问题永远不会发送给任何其他客户一小时,

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,我做错了什么?

4

2 回答 2

2

您在这里不检查返回的列表是否不为空:

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);

(而且您的代码也不是线程安全的)

于 2012-07-06T11:30:40.857 回答
1

unavialbeQuestions 或单元格列表可能为null。如果您尝试访问它的方法,它将抛出NullPointerException

于 2012-07-06T11:28:35.380 回答