2 Stimmen

Warum hält eine Swing-Anwendung mein Java-Servlet an?

Ich habe eine Swing runnable app, die Nachrichten aktualisiert, dann habe ich ein Java-Servlet, das Nachrichten von Paypal IPN (Instant Payment Notification) erhält, wenn das Servlet startet, in der init(), ich startet die Swing runnable app, die ein Desktop-Fenster öffnet, aber 30 Minuten später ein Fehler in der Swing verursacht das Servlet zu stoppen, wie kann das passieren? Weil das Runnable in einem eigenen Thread läuft, das Servlet hat diesen Thread gestartet, warum führt ein Fehler in diesem Thread zum Anhalten des Servlets?

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
  {
  }
}

Und außerdem hat der Fehler nicht einmal etwas mit meinem Code zu tun, er sieht so aus:

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)

Bearbeiten:

Vielen Dank für alle Antworten, scheint es einen Thread in init() zu starten ist eine schlechte Idee, meine ursprüngliche Idee war, meine Swing-GUI app verarbeitet alle Nachrichten, die das Servlet erhält und schreibt in einen Ordner und ich kann sehen, die GUI arbeiten auf dem Bildschirm, während das Servlet die Nachrichten am hinteren Ende erhält, Sie sind verwandt, so dass ich diese zwei Prozesse zur gleichen Zeit laufen und starten das Servlet startet automatisch die GUI für mich auch in der init(), jetzt kann ich diese 2 Prozesse separat starten, so dass egal, was passiert, um die GUI, das Servlet nicht stoppen!

1voto

Fazal Punkte 2851

Scheint definitiv seltsam zu sein. Ich habe etwas Ähnliches in den Foren von Sun (jetzt Oracle) gesehen. Bis jetzt keine gute Antwort darauf. Aber vielleicht können Sie einen Anhaltspunkt bekommen, da es das gleiche Problem zu sein scheint. Link http://72.5.124.102/thread.jspa?threadID=5339908&messageID=10469703

1voto

Rob Heiser Punkte 2687

Tut mir leid, wenn ich das Offensichtliche sage, aber es sieht so aus, als hätten Sie eine JList in Ihrer GUI, und ihr Backing Model wird geleert, während es gezeichnet wird. Es erwartet mindestens 18 Elemente, und zeigt, dass es 0 sind. Gibt es irgendwo, dass Sie den Inhalt der Liste außerhalb der Ereignis-Versand-Thread geändert werden?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X