diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index 7615a54..7454f89 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -817,15 +817,15 @@
     Action gotoLine =
       new AbstractAction() {
         public void actionPerformed(ActionEvent e) {
-          String inputLine = JOptionPane.showInputDialog(LogUI.this, "Enter the line number to go:", "Goto Line", -1);
+          String inputLine = JOptionPane.showInputDialog(LogUI.this, "Enter the line number to go:", "Goto Line", JOptionPane.PLAIN_MESSAGE);
           try {
         	  int lineNumber = Integer.parseInt(inputLine);
               int row = getCurrentLogPanel().setSelectedEvent(lineNumber);
               if (row == -1) {
-                  JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", 0);
+                  JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
               }
           } catch (NumberFormatException nfe) {
-              JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", 0);
+              JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
           }
         }
       };
diff --git a/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java b/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java
index 23800b2..e78bd82 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java
@@ -43,7 +43,7 @@
   ProgressPanel(int min, int max, String msg) {
     this.progressBar = new JProgressBar(min, max);
     setBorder(BorderFactory.createLineBorder(Color.black, 1));
-    messageLabel.setHorizontalAlignment(SwingConstants.HORIZONTAL);
+    messageLabel.setHorizontalAlignment(SwingConstants.CENTER);
     messageLabel.setText(msg);
     setLayout(new BorderLayout());
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index aa9aaf1..7244179 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -35,19 +35,7 @@
 import java.util.List;
 
 import java.util.Locale;
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import javax.swing.JTextPane;
+import javax.swing.*;
 import javax.swing.text.SimpleAttributeSet;
 import javax.swing.text.StyleConstants;
 import javax.swing.text.StyledDocument;
@@ -676,7 +664,7 @@
 
         JFrame frame = new JFrame();
         frame.getContentPane().add(new ReceiverConfigurationPanel());
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         frame.pack();
         frame.setVisible(true);
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
index de5ec14..89c16a5 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -34,17 +34,7 @@
 import javax.jmdns.ServiceEvent;
 import javax.jmdns.ServiceInfo;
 import javax.jmdns.ServiceListener;
-import javax.swing.AbstractAction;
-import javax.swing.ImageIcon;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JToolBar;
-import javax.swing.SwingUtilities;
+import javax.swing.*;
 
 import org.apache.log4j.BasicConfigurator;
 import org.apache.log4j.LogManager;
@@ -608,7 +598,7 @@
 
 
         JFrame frame = new JFrame();
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
         frame.getContentPane().setLayout(new BorderLayout());
         frame.getContentPane().add(plugin, BorderLayout.CENTER);
