diff --git a/src/net/java/sip/communicator/impl/gui/main/call/ZrtpSecurityPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/ZrtpSecurityPanel.java index 8180c12cc..df34b7e6d 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/ZrtpSecurityPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/ZrtpSecurityPanel.java @@ -161,12 +161,24 @@ public ZrtpSecurityPanel( SwingCallPeerRenderer peerRenderer, this.peerRenderer = peerRenderer; this.callPeer = callPeer; - OperationSetVideoTelephony telephony + OperationSetVideoTelephony videoTelephony = callPeer.getProtocolProvider().getOperationSet( OperationSetVideoTelephony.class); - telephony.addVideoListener(callPeer, this); - telephony.addPropertyChangeListener(callPeer.getCall(), this); + // Throwing a NullPointerException in the constructor of a UI element + // may cause more problems than it may (potentially) solve. + if (videoTelephony != null) + { + videoTelephony.addVideoListener(callPeer, this); + + Call call = callPeer.getCall(); + + // The value of call may indeed be null because the values of the + // CallPeer properties are asynchronously updated (with respect to + // the UI). + if (call != null) + videoTelephony.addPropertyChangeListener(call, this); + } audioSecurityLabel = createSecurityLabel("", null); videoSecurityLabel = createSecurityLabel("", null); @@ -202,7 +214,7 @@ private void addComponents() closeButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) + public void actionPerformed(ActionEvent ev) { peerRenderer.setSecurityPanelVisible(false); } @@ -261,8 +273,8 @@ public void actionPerformed(ActionEvent e) private JLabel createSecurityLabel(String text, Icon icon) { JLabel label = new JLabel(text, icon, JLabel.LEFT); - label.setForeground(Color.WHITE); + label.setForeground(Color.WHITE); return label; } @@ -326,7 +338,7 @@ public void paintComponent(Graphics g) confirmButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) + public void actionPerformed(ActionEvent ev) { if (getSecurityControl() != null) { @@ -430,7 +442,7 @@ private void initZidNameButton() zidNameButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) + public void actionPerformed(ActionEvent ev) { // Set ZID name only for verified peers (SAS compared and // confirmed). @@ -449,19 +461,19 @@ public void actionPerformed(ActionEvent e) /** * Refreshes the state of the SAS and the SAS verified padlock. * - * @param evt the security event of which we're notified + * @param ev the security event of which we're notified */ @Override - public void securityOn(CallPeerSecurityOnEvent evt) + public void securityOn(CallPeerSecurityOnEvent ev) { - switch (evt.getSessionType()) + switch (ev.getSessionType()) { - case CallPeerSecurityStatusEvent.AUDIO_SESSION: - setAudioSecurityOn(true); - break; - case CallPeerSecurityStatusEvent.VIDEO_SESSION: - setVideoSecurityOn(true); - break; + case CallPeerSecurityStatusEvent.AUDIO_SESSION: + setAudioSecurityOn(true); + break; + case CallPeerSecurityStatusEvent.VIDEO_SESSION: + setVideoSecurityOn(true); + break; } String securityString = getSecurityControl().getSecurityString(); @@ -496,16 +508,16 @@ public void securityOn(CallPeerSecurityOnEvent evt) * Indicates that the security has gone off. */ @Override - public void securityOff(CallPeerSecurityOffEvent evt) + public void securityOff(CallPeerSecurityOffEvent ev) { - switch (evt.getSessionType()) + switch (ev.getSessionType()) { - case CallPeerSecurityStatusEvent.AUDIO_SESSION: - setAudioSecurityOn(false); - break; - case CallPeerSecurityStatusEvent.VIDEO_SESSION: - setVideoSecurityOn(false); - break; + case CallPeerSecurityStatusEvent.AUDIO_SESSION: + setAudioSecurityOn(false); + break; + case CallPeerSecurityStatusEvent.VIDEO_SESSION: + setVideoSecurityOn(false); + break; } revalidate(); @@ -522,20 +534,16 @@ public void loadSkin() { removeAll(); - encryptionVerifiedIcon = new ImageIcon( - ImageLoader.getImage(ImageLoader.ENCR_VERIFIED)); - - audioSecuredIcon = new ImageIcon( - ImageLoader.getImage(ImageLoader.SECURE_AUDIO_ON)); - - audioNotSecuredIcon = new ImageIcon( - ImageLoader.getImage(ImageLoader.SECURE_AUDIO_OFF)); - - videoSecuredIcon = new ImageIcon( - ImageLoader.getImage(ImageLoader.SECURE_VIDEO_ON)); - - videoNotSecuredIcon = new ImageIcon( - ImageLoader.getImage(ImageLoader.SECURE_VIDEO_OFF)); + encryptionVerifiedIcon + = new ImageIcon(ImageLoader.getImage(ImageLoader.ENCR_VERIFIED)); + audioSecuredIcon + = new ImageIcon(ImageLoader.getImage(ImageLoader.SECURE_AUDIO_ON)); + audioNotSecuredIcon + = new ImageIcon(ImageLoader.getImage(ImageLoader.SECURE_AUDIO_OFF)); + videoSecuredIcon + = new ImageIcon(ImageLoader.getImage(ImageLoader.SECURE_VIDEO_ON)); + videoNotSecuredIcon + = new ImageIcon(ImageLoader.getImage(ImageLoader.SECURE_VIDEO_OFF)); addComponents(); @@ -674,10 +682,10 @@ public void run() /** * {@inheritDoc} */ - public void propertyChange(final PropertyChangeEvent event) + public void propertyChange(PropertyChangeEvent ev) { - if (OperationSetVideoTelephony.LOCAL_VIDEO_STREAMING - .equals(event.getPropertyName())) + if (OperationSetVideoTelephony.LOCAL_VIDEO_STREAMING.equals( + ev.getPropertyName())) { setVideoSecurityOn(isVideoSecurityOn); } @@ -686,7 +694,7 @@ public void propertyChange(final PropertyChangeEvent event) /** * {@inheritDoc} */ - public void videoAdded(VideoEvent event) + public void videoAdded(VideoEvent ev) { setVideoSecurityOn(isVideoSecurityOn); } @@ -694,7 +702,7 @@ public void videoAdded(VideoEvent event) /** * {@inheritDoc} */ - public void videoRemoved(VideoEvent event) + public void videoRemoved(VideoEvent ev) { setVideoSecurityOn(isVideoSecurityOn); } @@ -702,7 +710,7 @@ public void videoRemoved(VideoEvent event) /** * {@inheritDoc} */ - public void videoUpdate(VideoEvent event) + public void videoUpdate(VideoEvent ev) { setVideoSecurityOn(isVideoSecurityOn); } @@ -732,6 +740,7 @@ private class ZidToNameThread public ZidToNameThread() { } + @Override public void run() {