исключение setViewportView с Java Swing - PullRequest
0 голосов
/ 30 октября 2018

Я использую Java Swing для создания ЧМИ для чата.

У меня есть ветка, которая позволяет отображать новые сообщения, полученные по теме, когда мой сервер отправляет уведомление:

        while (true) {

            rep = client.readResponse();
            System.out.println(rep.getClass().getSimpleName());

            if (rep.getClass().getSimpleName().equals("Notification")){
                notif = (Notification) rep;
                if (notif.getTopic().getTitle().equals(this.topic.getTitle())) {
                    System.out.println("notif reçue");

                    if (notif.getTopic().getAuthor().equals(this.topic.getAuthor())){
                        System.out.println("on refresh");
                        builder = new StringBuilder();
                        builder.append(ihm.textPaneMessage.getText());
                        builder.append(notif.getMessage().toString());

                        ihm.textPaneMessage.setText(builder.toString());                            
                        ihm.messagesPane.setViewportView(ihm.textPaneMessage);
                    }

                }
            }


        }

С:

IHM ihm ;  //my hmi class

public JTextPane textPaneMessage; //text to display with all messages 

public JScrollPane messagesPane ; //Jscroll for my textPaneMessage

Итак, каждый раз, когда мой клиент получает уведомление, оно меняет мою область прокрутки и текста.

На самом деле, когда я впервые отправляю новое сообщение, оно отлично работает. Но со второго раза, у меня есть это сообщение о жестком исключении:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.text.FlowView$FlowStrategy.layoutRow(FlowView.java:563)
    at javax.swing.text.FlowView$FlowStrategy.layout(FlowView.java:477)
    at javax.swing.text.FlowView.layout(FlowView.java:201)
    at javax.swing.text.BoxView.setSize(BoxView.java:397)
    at javax.swing.text.BoxView.updateChildSizes(BoxView.java:366)
    at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:348)
    at javax.swing.text.BoxView.layout(BoxView.java:708)
    at javax.swing.text.BoxView.setSize(BoxView.java:397)
    at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1722)
    at javax.swing.plaf.basic.BasicTextUI$RootView.paint(BasicTextUI.java:1433)
    at javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:737)
    at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:881)
    at javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:860)
    at javax.swing.JComponent.paintComponent(JComponent.java:780)
    at javax.swing.JComponent.paint(JComponent.java:1056)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
    at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "Thread-0" java.lang.NullPointerException
    at javax.swing.text.FlowView$FlowStrategy.layoutRow(FlowView.java:568)
    at javax.swing.text.FlowView$FlowStrategy.layout(FlowView.java:477)
    at javax.swing.text.FlowView.layout(FlowView.java:201)
    at javax.swing.text.BoxView.setSize(BoxView.java:397)
    at javax.swing.text.BoxView.updateChildSizes(BoxView.java:366)
    at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:348)
    at javax.swing.text.BoxView.layout(BoxView.java:708)
    at javax.swing.text.BoxView.setSize(BoxView.java:397)
    at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1722)
    at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:912)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
    at javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1333)
    at javax.swing.JViewport.getViewSize(JViewport.java:999)
    at javax.swing.plaf.basic.BasicScrollPaneUI.syncScrollPaneWithViewport(BasicScrollPaneUI.java:278)
    at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(BasicScrollPaneUI.java:1034)
    at javax.swing.JViewport.fireStateChanged(JViewport.java:1369)
    at javax.swing.JViewport.setView(JViewport.java:969)
    at javax.swing.JScrollPane.setViewportView(JScrollPane.java:1007)
    at client.RefreshTopic.run(RefreshTopic.java:58)
    at java.lang.Thread.run(Thread.java:745)

В этом примере он работает с test28, отображается test29, но появляется сообщение об исключении, test30 не отображается и появляется ошибка ...

Exemple

Спасибо за ваши ответы

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