2010-03-30 4 views
2

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

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) 

Edit:

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

+1

@Frank: I * сделал * интегрировать IPN PayPal с Java Webapps, и я действительно смущен вашим вопросом. Вы используете приложение Swing * из сервлета *? Вы используете Webapp в системе «headfull», и этот сервер выдает приложение Swing при оплате PayPal !? – SyntaxT3rr0r

+0

@Frank: Помимо того факта, что я действительно не понимаю, что вы пытаетесь сделать, насколько я вижу из вашего вопроса, * «Runnable is NOT * работает в своем потоке» * [sic]. Он запускается на EDT с использованием SwingUtilities.invokeLater, и ваш сбой происходит на EDT. Вы как-то завинчиваете/запираете EDT. – SyntaxT3rr0r

+0

@WizardOfOdds: Поскольку вы сделали Paypal IPN, знаете ли вы, почему даже после того, как я вынул приложение GUI из своего сервлета, он все равно терпит неудачу, когда я впервые начал его, у меня появилось несколько сообщений, но после почему, почему? Я использовал песочницу для отправки тестовых сообщений, не правда ли? – Frank

ответ

1

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

+0

Отличный улов !!! Я определенно могу учиться на этом! – Frank

1

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

Смежные вопросы