0

私はクライアントに質問を送信し、クライアントからの回答を受け取るサーバーを構築していますが、クライアントに質問を送信するときに、1時間再送信できないようにしたいです。つまり、クライアントに質問を送信した後、その質問が他のクライアントに送信されることのないように、1 時間待ちたいと思います。

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

キーは clientID で、値は 1 時間以内にそのクライアントに送信されない質問の 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()1 時間 (私のデモではわずか 2 分) 後に起動される関数を参照してください。ここに問題がありf()ます。関数の実行時に null ポインター例外が発生しました。

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

ここでは、返されたリストが 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);

(また、コードはスレッドセーフではありません)

于 2012-07-06T11:30:40.857 に答える
1

unavialbeQuestions またはセル リストはnullの可能性があります。そのメソッドにアクセスしようとすると、NullPointerExceptionがスローされます。

于 2012-07-06T11:28:35.380 に答える