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!