diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java index 78904db2f..22f03d1cd 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/ChatConversationPanel.java @@ -2107,11 +2107,21 @@ private ReplacementWorker(final String messageID, @Override public void finished() { + ShowPreviewDialog previewDialog = showPreview; + // There is a race between the replacement worker and the + // ChatConversationPanel when it is (being) disposed of. Make sure + // we have an instance before continuing. + if (previewDialog == null) + { + // Abort if dialog has been disposed of. + return; + } + String newMessage = (String) get(); if (newMessage != null && !newMessage.equals(chatString)) { - showPreview.getMsgIDToChatString().put( + previewDialog.getMsgIDToChatString().put( messageID, newMessage); synchronized (scrollToBottomRunnable) { @@ -2229,6 +2239,16 @@ private void processText(final String plainText, final ReplacementService rService, final boolean isURL) { + final ShowPreviewDialog previewDialog = showPreview; + // There is a race between the replacement worker and the + // ChatConversationPanel when it is (being) disposed of. Make sure + // we have an instance before continuing. + if (previewDialog == null) + { + // Abort if dialog has been disposed of. + return; + } + Matcher m = pattern.matcher(plainText); ConfigurationService cfg = GuiActivator.getConfigurationService(); @@ -2276,7 +2296,7 @@ else if (isProposalEnabled) { msgBuff.append(StringEscapeUtils.escapeHtml4(group)); msgBuff.append("