Таймеры Java очереди - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть задача смоделировать эволюцию очередей в супермаркете, и мне приходится использовать таймеры для вывода, когда клиент входит или существует в магазине.В супермаркете у меня есть 3 очереди, которые должны обрабатывать клиенты.На каждом клиенте они должны вывести в моем графическом интерфейсе время прибытия и время отъезда.Могу ли я использовать один и тот же таймер для каждой очереди?(они не должны начинать вывод одновременно или в течение того же периода времени).Я попытался передать таймер в качестве параметра в классе событий, но я получил исключение Null Pointer.Помогите пожалуйста.

  public void simulationPrep (Queue q,JPanel p,int time,Timer t, int selection)

  {

    TimeClass tc;
    int queueCapacity=0;
    float queueProcTime=0;
    float tempSTMin, float tempSTMax;
    tempSTMin=getServiceTimeMin();
    tempSTMax=getServiceTimeMax();
    queueCapacity = 10 + (int)( Math.random()*20);
    queueProcTime = tempSTMin + (float)(Math.random()*tempSTMax);
    q1.setCapacity(queueCapacity);
    q1.setProcessingTime(queueProcTime);
    tc = new TimeClass((int)(queueProcTime/queueCapacity),p,selection);
    t = new Timer(time, tc);
    t.start();
}
public void simulate()
{
    if(getSelection()>=1)
    {
        simulationPrep(q1,p21,1000,timer1,1);
        if(getSelection()>=2)
        {
            simulationPrep(q2,p22,1500,timer2,2);
            if(getSelection()==3)
            {
                simulationPrep(q3,p23,1700,timer3,3);
            }
        }
    }

}

public class TimeClass implements ActionListener
{
    int counter;
    JPanel p;
    int selection;
    public TimeClass(int counter,JPanel p,int selection)
    {
        this.counter = counter;
        this.p = p;
        this.selection = selection;
    }
    public void actionPerformed(ActionEvent e)
    {
        counter--;
        if(counter>=1)
        {
            p.add(new JLabel("Hi "+counter));
            p.updateUI();
        }
        if(counter<1)
        {
            p.add(new JLabel("Done"));
            p.updateUI();
            timer1.stop();
            timer2.stop();
            timer3.stop();
        }
    }
}

Если кто-то не понимает код, пожалуйста, спросите, я буду более конкретным, но это мой первый пост здесь, и я немного новичок в Java.

Вот что я получаю в окне вывода:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at simulation.Simulation$TimeClass.actionPerformed(Simulation.java:229)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at simulation.Simulation$TimeClass.actionPerformed(Simulation.java:229)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

1 Ответ

1 голос
/ 02 апреля 2012

Строка 229 вашего файла Simulation.java вызывает исключение NullPointerException. В частности, это метод actionPerformed (...) вашего внутреннего класса TimeClass.

Перейдите к этой строке, и там у вас возникнет проблема.

Я подозреваю, что это одна из этих 3 строк:

        timer1.stop();
        timer2.stop();
        timer3.stop();

Одна из этих переменных таймера, вероятно, равна нулю.

Быстрое решение (хотя, вероятно, не решающее реальной проблемы) заключается в следующем:

if (timer1 != null) {
    timer1.stop();
}

и т. Д. С двумя другими переменными таймера.

...