为什么Swing应用程序会停止我的Java servlet?
我有一个Swing runnable应用程序更新消息,然后我有一个Java servlet从Paypal IPN(即时付款通知)获取消息,当servlet启动时,在init()中,我启动Swing runnable应用程序,该应用程序打开一个桌面窗口,但30分钟后Swing中的错误导致servlet停止,这怎么会发生?因为runnable运行在它自己的线程上,所以servlet启动该线程,为什么该线程中的错误会导致servlet停止?为什么Swing应用程序会停止我的Java servlet?
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应用程序处理所有servlet获取并写入文件夹的消息,并且我可以看到GUI在屏幕上工作,而servlet获取信息它们是相关的,所以我同时运行这两个进程,并且启动servlet也会在init()中自动启动GUI,现在我可以分别启动这两个进程,以便无论如何GUI发生了什么,servlet不会停止!
似乎绝对奇怪。在sun(现在的oracle)论坛上看到类似的东西。直到现在还没有好的答案。不过,可能是你可以得到一个线索,它似乎同样的问题 链接http://72.5.124.102/thread.jspa?threadID=5339908&messageID=10469703
很棒!我绝对可以从中学习! – Frank 2010-03-30 03:24:52
很抱歉,如果我说明明显,但它看起来像你有一个JList,在你的GUI,和其支持模型被清空,而它被绘了。它期望至少有18个元素,并且显示有0个。是否有某处您在事件派发线程之外修改了列表的内容?
@Frank:我*确实*将PayPal的IPN与Java Webapps集成在一起,我真的很困惑你的问题。您正在从Servlet *运行Swing应用程序*?您正在“头等”系统上运行Web应用程序,并且该服务器在进行PayPal付款时弹出一个Swing应用程序! – SyntaxT3rr0r 2010-03-30 02:36:06
@Frank:除了我真的不明白你想要做什么的事实,就我所见问题而言,*“Runnable不是*在自己的线程中运行”* [原文如此]。它使用SwingUtilities.invokeLater在EDT上运行,您的崩溃发生在EDT上。你以某种方式拧紧/锁定EDT。 – SyntaxT3rr0r 2010-03-30 02:38:15
@WizardOfOdds:因为您已经完成了PayPal IPN,您是否知道为什么即使从我的servlet中拿出GUI应用程序后,它仍然会不时失败,当我第一次启动它时,我收到了一些消息,但是在同时,它失败了,为什么?我使用沙盒发送测试消息,它不可靠吗? – Frank 2010-03-30 03:34:54