Я использую 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
Спасибо за ваши ответы