Почему приложение Swing останавливает мой Java-сервлет? - PullRequest
2 голосов
/ 30 марта 2010

У меня есть работающее приложение Swing, которое обновляет сообщения, затем у меня есть сервлет Java, который получает сообщения от Paypal IPN (мгновенное уведомление о платеже), при запуске сервлета в init () я запускаю работающее приложение Swing, которое открывает окно рабочего стола, но через 30 минут ошибка в Swing привела к остановке сервлета, как это может произойти? Поскольку runnable работает в своем собственном потоке, сервлет запустил этот поток, почему ошибка в этом потоке приведет к остановке сервлета?

public class License_Manager extends JPanel implements Runnable
{
  License_Manager()
  {
    Do_GUI();
    ...
    start();
  }

  public static void main(String[] args)
  {
    // Schedule a job for the event-dispatching thread : creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { Create_And_Show_GUI(); } });
  }
}

public class PayPal_Servlet extends HttpServlet
{
  public void init(ServletConfig config) throws ServletException
  {
    super.init(config);
    License_Manager.main(null);
  }

  protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
  {
  }
}

И, кроме того, что ошибка не имеет никакого отношения к моему коду, она выглядит так:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 17 >= 0
    at java.util.Vector.elementAt(Vector.java:427)
    at javax.swing.DefaultListModel.getElementAt(DefaultListModel.java:70)
    at javax.swing.plaf.basic.BasicListUI.paintCell(BasicListUI.java:191)
    at javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:304)
    at javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:227)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
    at javax.swing.JComponent.paintComponent(JComponent.java:763)
    at javax.swing.JComponent.paint(JComponent.java:1029)
    at javax.swing.JComponent.paintChildren(JComponent.java:864)
    at javax.swing.JComponent.paint(JComponent.java:1038)
    at javax.swing.JViewport.paint(JViewport.java:747)
    at javax.swing.JComponent.paintChildren(JComponent.java:864)
    at javax.swing.JComponent.paint(JComponent.java:1038)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1220)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
    at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Редактировать:

Спасибо за все ответы, кажется, что начинать поток в init () - плохая идея, моя первоначальная идея заключалась в том, что мое приложение Swing GUI обрабатывает все сообщения, которые сервлет получает, и записывает в папку, и я вижу графический интерфейс работая на экране, пока сервлет получает сообщения на внутреннем сервере, они связаны между собой, поэтому я запускаю эти два процесса одновременно, и запуск сервлета автоматически запускает графический интерфейс для меня тоже в init (), теперь я могу Запустите эти 2 процесса отдельно, чтобы независимо от того, что случилось с GUI, сервлет не остановился!

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Извините, если я констатирую очевидное, но похоже, что у вас есть JList в вашем GUI, и его вспомогательная модель очищается во время рисования. Он ожидает как минимум 18 элементов и показывает, что их 0. Есть ли где-то, что вы изменили содержимое списка вне потока отправки событий?

1 голос
/ 30 марта 2010

Кажется определенно странным. Видел что-то похожее на солнечных (ныне оракуловых) форумах. Нет хорошего ответа на это до сих пор. Но, может быть, вы можете получить подсказку, как кажется, та же проблема Ссылка http://72.5.124.102/thread.jspa?threadID=5339908&messageID=10469703

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...