Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4135787

Tooltip failure

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 1.2.0
    • 1.0.2, 1.1.5, 1.1.6, 1.2.0
    • client-libs
    • 1.2fcs
    • generic, x86
    • generic, solaris_2.5.1, windows_nt
    • Not verified

            }
              catch (NumberFormatException nfex)
              {
                  trace.Print("Invalid port number (" + tfPort.getText() + ")");
                  return;
              }
              trace.Print("Connecting to " + host + ":" + port);

              CommMgr cm = new CommMgr
                  (ESConstants.ES_USERID,
                   ESConstants.ES_PASSWORD,
                   ESApplet.ES_PCMGR_HOST,
                   ESApplet.ES_PCMGR_PORT,
                   ESConstants.ES_PCMGR_TIMEOUT,
                   ESConstants.ES_UNIX_TIMEOUT
                   );
              cm.ConnectPCMgr(tfHost.getText(),port);

          }

          //----------------------------------
          // Print
          //----------------------------------
          static synchronized public void
          Print(String msg, int level)
          {
              if (trace == null)
              {
                  trace = Create();
              }
              if (level <= filterLevel)
              {
                  trace.Trace(msg);
              }
          }

          //----------------------------------
          // Print
          //----------------------------------
          static synchronized public void
          Print(Exception ex)
          {
              //NOTE: exceptions are NEVER filtered!
              if (trace == null)
              { trace = Create();
              }
              trace.Trace("********** EXCEPTION **********");
              trace.Trace("===> " + ex.getClass().getName());
              trace.Trace("===> " + ex);
              trace.Trace("===> " + ex.getMessage());
              trace.Trace("*******************************");
              System.out.println("********** EXCEPTION **********");
              System.out.println("===> " + ex.getClass().getName());
              System.out.println("===> " + ex);
              System.out.println("===> " + ex.getMessage());
              ex.printStackTrace();
              System.out.println("*******************************");
          }

          //----------------
          // SetFilterLevel
          //----------------
          /*
          public void
          SetFilterLevel(int i)
          {
              filterLevel = i;
          }
          */

          //----------------------------------
          // Show
          //----------------------------------
          static synchronized public void
          Show()
          {
              if (trace == null)
              {
                  trace = Create();
              }
              trace.setVisible(true);

              java.awt.Toolkit theToolkit = java.awt.Toolkit.getDefaultToolkit();
              java.awt.Dimension d = theToolkit.getScreenSize();
              trace.setLocation(d.width-trace.getSize().width,0);
          }

          //----------------------------------
          // Trace
          //----------------------------------
          public synchronized void
          Trace(String msg)
          {
              if (cbCapture.isSelected() == false)
              {
                  return;
              }
              //ta.append("[" + Thread.currentThread().getName() + "] " + msg + "\n");
              ta.append(msg + "\n");
          }

          //----------------------------------
          // CEEChangeListener
          //----------------------------------
      class CEEChangeListener implements com.sun.java.swing.event.ChangeListener
      {
      public void stateChanged(ChangeEvent event)
      {
      Object object = event.getSource();
      if (object == theSlider)
      {
           filterLevel = theSlider.getValue();
           lblLevel.setText(GetFilterLevelString());
      }
      }
      }

          //----------------------------------
          // CEEActionListener
          //----------------------------------
      class CEEActionListener implements java.awt.event.ActionListener
      {
      public void actionPerformed(java.awt.event.ActionEvent event)
      { Object object = event.getSource();
      if (object == btnClear)
      { ta.setText("");
      }
      else if (object == btnGetServerTime)
      { GetServerTime();
      }
      else if (object == btnCopy)
      { OnCopy();
      }
      else if (object == btnDirect)
      { OnDirect();
      }
      else if (object == btnPCMgr)
      { OnPCMgr();
      }
      }
      }

          //----------------------------------
          // CEEItemListener
          //----------------------------------
      class CEEItemListener implements java.awt.event.ItemListener
      {
      public void itemStateChanged(java.awt.event.ItemEvent event)
      {
      Object object = event.getSource();
      //if (object == cbShowReceivedData)
      //{ showReceivedData = cbShowReceivedData.isSelected();
      //}
      }
      }

          //----------------------------------
          // CEEWindowAdapter
          //----------------------------------
      class CEEWindowAdapter extends java.awt.event.WindowAdapter
      {
      public void windowClosing(java.awt.event.WindowEvent event)
      { Object object = event.getSource();
      if (object == DebugTrace.this)
      { setVisible(false);
      }
      }
      }

      }




      The code works fine when I use Swing 1.0.1 with JDK 1.1.5 and JDK 1.1.6. However, the failure appears with Swing 1.0.2
      on both JDK 1.1.5 and JDK 1.1.6.

      My console output and backtrace are:

      H:\prog\jescat\brad>java -classpath c:\swing102\swingall.jar;c:\jdk116\lib\classes.zip;h:\prog\jescat\brad auiarch.util.Debug
      Trace
      Exception occurred during event dispatching:
      java.lang.NullPointerException
              at com.sun.java.swing.ToolTipManager$JPanelPopup.show(ToolTipManager.java:449)
              at com.sun.java.swing.ToolTipManager.showTipWindow(ToolTipManager.java:169)
              at com.sun.java.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:358)
              at com.sun.java.swing.Timer.fireActionPerformed(Compiled Code)
              at com.sun.java.swing.Timer$DoPostEvent.run(Timer.java:100)
              at com.sun.java.swing.SystemEventQueueUtilities.processRunnableEvent(Compiled Code)
              at com.sun.java.swing.SystemEventQueueUtilities$RunnableTarget.processEvent(Compiled Code)
              at java.awt.Component.dispatchEventImpl(Compiled Code)
              at java.awt.EventDispatchThread.run(Compiled Code)

      Full thread dump:
          "TimerQueue" (TID:0xf8d7f8, sys_thread_t:0x8bc250, Win32ID:0xa9, state:CW) prio=5
              com.sun.java.swing.TimerQueue.run(Compiled Code)
          "AWT-Windows" (TID:0xf863a0, sys_thread_t:0x8ac280, Win32ID:0xc0, state:R) prio=5
              sun.awt.windows.WToolkit.run(WToolkit.java:107)
              java.lang.Thread.run(Compiled Code)
          "AWT-EventQueue-0" (TID:0xf86458, sys_thread_t:0x8ac170, Win32ID:0xca, state:CW) prio=5
              java.lang.Object.wait(Compiled Code)
          "Finalizer thread" (TID:0xf80088, sys_thread_t:0x893560, Win32ID:0xcd, state:CW) prio=2
          "main" (TID:0xf800b0, sys_thread_t:0x890350, Win32ID:0xbe, state:CW) prio=5
      Monitor Cache Dump:
          java.awt.EventQueue@F861E0/FD96C0: <unowned>
              Waiters: 1
          com.sun.java.swing.TimerQueue@F8D800/FFB2F0: <unowned>
              Waiters: 1
      Registered Monitor Dump:
          SymcJIT Method Monitor: <unowned>
          SymcJIT Method Monitor: <unowned>
          SymcJIT Method List Monitor: <unowned>
          SymcJIT Fixups Allocation: <unowned>
          SymcJIT Code Allocation: <unowned>
          SymcJIT Data Allocation: <unowned>
          Thread queue lock: <unowned>
              Waiters: 1
          Name and type hash table lock: <unowned>
          String intern lock: <unowned>
          JNI pinning lock: <unowned>
          JNI global reference lock: <unowned>
          BinClass lock: <unowned>
          Class loading lock: <unowned>
          Java stack lock: <unowned>
          Code rewrite lock: <unowned>
          Heap lock: <unowned>
          Has finalization queue lock: <unowned>
          Finalize me queue lock: <unowned>
              Waiters: 1
          Monitor registry: <unowned>
      (Review ID: 29802)
      ======================================================================


      Name: rk38400 Date: 05/06/98


      To reproduce: I simply wait for a tool tip to appear when I position the mouse over a text field or button.

      Source code:
      package auiarch.util;

      import com.sun.java.swing.*;
      import com.sun.java.swing.event.*;
      import java.awt.*;
      import java.awt.datatransfer.*;
      import java.io.*;
      import java.net.*;
      import java.util.Vector;

      import auiarch.comm.*;
      import auiarch.applet.*;

      import com.sun.java.swing.JButton;
      import com.sun.java.swing.JCheckBox;
      import com.sun.java.swing.JTextArea;
      import com.sun.java.swing.JTextField;
      import com.sun.java.swing.JLabel;
      import com.sun.java.swing.JSlider;

      public class
      DebugTrace extends Frame implements ClipboardOwner
      {
      public static void main(String[] args)
      {
      (new DebugTrace()).show();
      }

          //----------------------------------
          // Static data
          //----------------------------------
          static int filterLevel = ESConstants.DEFAULT_FILTER_LEVEL;
          static boolean showReceivedData = false;
          static boolean capture = true;
          static DebugTrace trace = null;

          //----------------------------------
          // Instance data
          //----------------------------------
          boolean adjusted = false;
         JTextArea ta = new JTextArea();;
      JButton btnClear = new JButton();
         JCheckBox cbCapture = new JCheckBox();
         JButton btnGetServerTime = new JButton();
         JButton btnCopy = new JButton();
         JButton btnDirect = new JButton();
         JLabel lblHost = new JLabel();
         JTextField tfHost = new JTextField();
         JLabel lblPort = new JLabel();
         JTextField tfPort = new JTextField();
         JButton btnPCMgr = new JButton();
         JSlider theSlider = new JSlider();
         JLabel lblLevel = new JLabel();

          //----------------------------------
          // DebugTrace
          //----------------------------------
          private
          DebugTrace()
          {
            super("DebugTrace window");
            try
            {
              jbInit();
            }
            catch (Exception e)
            {
              e.printStackTrace();
            }
          }

          public static boolean
          isCapturing()
          {
            return capture;
          }

          private void
          jbInit() throws Exception
          {
      setLayout(null);
      setVisible(false);
      setSize(insets().left + insets().right + 660,insets().top + insets().bottom + 620);
      setBackground(java.awt.Color.cyan);
      //ta = new com.sun.java.swing.JTextArea();
      ta.setEditable(false);
      ta.setLayout(null);
      ta.setBounds(insets().left + 12,insets().top + 25,518,576);
      ta.setFont(new Font("Monospaced", Font.PLAIN, 12));
      ta.setForeground(java.awt.Color.black);
      ta.setBackground(java.awt.Color.white);
      this.add(ta);
      //btnClear = new com.sun.java.swing.JButton();
      btnClear.setText("Clear");
      btnClear.setActionCommand("Clear");
      btnClear.setAlignmentY(0.5F);
      btnClear.setToolTipText("Clears all debug messages");
      btnClear.setLayout(null);
      btnClear.setBounds(insets().left + 535,insets().top + 80,110,25);
      btnClear.setFont(new Font("Dialog", Font.PLAIN, 12));
      btnClear.setForeground(java.awt.Color.black);
      btnClear.setBackground(java.awt.Color.lightGray);
      add(btnClear);
      //cbCapture = new com.sun.java.swing.JCheckBox();
      cbCapture.setText("Capture");
      cbCapture.setActionCommand("Capture");
      cbCapture.setAlignmentY(0.5F);
      cbCapture.setToolTipText("Toggles debug trace capturing on/off");
      cbCapture.setLayout(null);
      cbCapture.setBounds(insets().left + 535,insets().top + 110,110,25);
      cbCapture.setFont(new Font("Dialog", Font.PLAIN, 12));
      cbCapture.setForeground(java.awt.Color.black);
      cbCapture.setBackground(java.awt.Color.lightGray);
      add(cbCapture);
      //btnGetServerTime = new com.sun.java.swing.JButton();
      btnGetServerTime.setText("GetTime");
      btnGetServerTime.setActionCommand("GetServerTime");
      btnGetServerTime.setAlignmentY(0.5F);
      btnGetServerTime.setToolTipText("Gets the time from the host specified below. Use for testing network connection speed.");
      btnGetServerTime.setLayout(null);
      btnGetServerTime.setBounds(insets().left + 535,insets().top + 140,110,25);
      btnGetServerTime.setFont(new Font("Dialog", Font.PLAIN, 12));
      btnGetServerTime.setForeground(java.awt.Color.black);
      btnGetServerTime.setBackground(java.awt.Color.lightGray);
      add(btnGetServerTime);
      //btnCopy = new com.sun.java.swing.JButton();
      btnCopy.setText("Copy");
      btnCopy.setActionCommand("Copy");
      btnCopy.setAlignmentY(0.5F);
      btnCopy.setToolTipText("Copies trace messages to the clipboard");
      btnCopy.setLayout(null);
      btnCopy.setBounds(insets().left + 535,insets().top + 175,110,25);
      btnCopy.setFont(new Font("Dialog", Font.PLAIN, 12));
      btnCopy.setForeground(java.awt.Color.black);
      btnCopy.setBackground(java.awt.Color.lightGray);
      add(btnCopy);
      //btnDirect = new com.sun.java.swing.JButton();
      btnDirect.setText("Conn Direct");
      btnDirect.setActionCommand("Direct");
      btnDirect.setAlignmentY(0.5F);
      btnDirect.setToolTipText("Connects directly to the UNIX backend process. Use to bypass PCMgr.");
      btnDirect.setLayout(null);
      btnDirect.setBounds(insets().left + 535,insets().top + 205,110,25);
      btnDirect.setFont(new Font("Dialog", Font.PLAIN, 12));
      btnDirect.setForeground(java.awt.Color.black);
      btnDirect.setBackground(java.awt.Color.lightGray);
      add(btnDirect);
      //lblHost = new com.sun.java.swing.JLabel();
      lblHost.setText("Host:");
      lblHost.setLayout(null);
      lblHost.setBounds(insets().left + 535,insets().top + 270,110,15);
      lblHost.setFont(new Font("Dialog", Font.BOLD, 12));
      lblHost.setForeground(java.awt.Color.black);
      lblHost.setBackground(java.awt.Color.lightGray);
      add(lblHost);
      //tfHost = new com.sun.java.swing.JTextField();
      //tfHost.setSelectionStart(7);
      tfHost.setScrollOffset(43);
      tfHost.setText("wilbur.kc63.att.com");
      tfHost.setCaretPosition(7);
      //tfHost.setSelectionEnd(7);
      tfHost.setToolTipText("The UNIX host to connect to");
      tfHost.setLayout(null);
      tfHost.setBounds(insets().left + 535,insets().top + 290,110,25);
      tfHost.setFont(new Font("SansSerif", Font.PLAIN, 12));
      tfHost.setForeground(java.awt.Color.black);
      tfHost.setBackground(java.awt.Color.white);
      add(tfHost);
      //lblPort = new com.sun.java.swing.JLabel();
      lblPort.setText("Port:");
      lblPort.setLayout(null);
      lblPort.setBounds(insets().left + 535,insets().top + 320,110,16);
      lblPort.setFont(new Font("Dialog", Font.BOLD, 12));
      lblPort.setForeground(java.awt.Color.black);
      lblPort.setBackground(java.awt.Color.lightGray);
      add(lblPort);
      //tfPort = new com.sun.java.swing.JTextField();
      //tfPort.setSelectionStart(4);
      tfPort.setScrollOffset(28);
      tfPort.setText("1250");
      tfPort.setCaretPosition(4);
      //tfPort.setSelectionEnd(4);
      tfPort.setToolTipText("The TCP port # of the host we're connecting to.");
      tfPort.setLayout(null);
      tfPort.setBounds(insets().left + 535,insets().top + 335,110,25);
      tfPort.setFont(new Font("SansSerif", Font.PLAIN, 12));
      tfPort.setForeground(java.awt.Color.black);
      tfPort.setBackground(java.awt.Color.white);
      add(tfPort);
      //btnPCMgr = new com.sun.java.swing.JButton();
      btnPCMgr.setText("Conn PCMgr");
      btnPCMgr.setActionCommand("Direct");
      btnPCMgr.setAlignmentY(0.5F);
      btnPCMgr.setToolTipText("Connects using the PCMgr on the specified host/port");
      btnPCMgr.setLayout(null);
      btnPCMgr.setBounds(insets().left + 535,insets().top + 240,110,25);
      btnPCMgr.setFont(new Font("Dialog", Font.PLAIN, 12));
      btnPCMgr.setForeground(java.awt.Color.black);
      btnPCMgr.setBackground(java.awt.Color.lightGray);
      add(btnPCMgr);
      //theSlider = new com.sun.java.swing.JSlider();
      theSlider.setMinimum(500);
      theSlider.setValue(500);
      theSlider.setMaximum(508);
      theSlider.setSnapToTicks(true);
      theSlider.setToolTipText("Debug Level");
      theSlider.setPaintTicks(true);
      theSlider.setMajorTickSpacing(1);
      theSlider.setLayout(null);
      theSlider.setBounds(insets().left + 535,insets().top + 25,113,30);
      theSlider.setForeground(java.awt.Color.lightGray);
      theSlider.setBackground(java.awt.Color.lightGray);
      add(theSlider);
      //lblLevel = new com.sun.java.swing.JLabel();
      lblLevel.setText("Level:");
      lblLevel.setLayout(null);
      lblLevel.setBounds(insets().left + 540,insets().top + 60,110,15);
      lblLevel.setFont(new Font("Dialog", Font.BOLD, 12));
      lblLevel.setForeground(java.awt.Color.black);
      lblLevel.setBackground(java.awt.Color.lightGray);
      add(lblLevel);
      setTitle("DebugTrace");

      //TODO: Once Visual Cafe fully support JScrollPane, let's
      // add this manually. Until then, we'll have to do it ourselves
      Rectangle taBounds = ta.getBounds();
      remove(ta);
      JScrollPane pane = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
      pane.setBounds(taBounds.x,taBounds.y,taBounds.width,taBounds.height);
      pane.add(ta);
      pane.getViewport().add(ta);
      ta.setEditable(false);
      //ta.setSize(ta.getPreferredScrollableViewportSize());
      ta.setSize(taBounds.width,taBounds.height);
      add(pane);
      pane.getVerticalScrollBar().setUnitIncrement(1); // was 5
      pane.getHorizontalScrollBar().setUnitIncrement(1);

      // This is done manually also...
              theSlider.setValue(filterLevel);
              lblLevel.setText(GetFilterLevelString());

      //----------------
      // Action listener
      //----------------
      CEEActionListener theActionListener = new CEEActionListener();
      btnClear.addActionListener(theActionListener);
      btnGetServerTime.addActionListener(theActionListener);
      btnCopy.addActionListener(theActionListener);
      btnDirect.addActionListener(theActionListener);
      btnPCMgr.addActionListener(theActionListener);

      //----------------
      // Window listener
      //----------------
      CEEWindowAdapter theWindowAdapter = new CEEWindowAdapter();
      this.addWindowListener(theWindowAdapter);

      //----------------
      // Item listener
      //----------------
      CEEItemListener theItemListener = new CEEItemListener();

      //----------------
      // Change listener
      //----------------
      CEEChangeListener theChangeListener = new CEEChangeListener();
      theSlider.addChangeListener(theChangeListener);

      //cbCapture.setSelected(capture);
      }

          //----------------------------------
          // Beep
          //----------------------------------
          static public void
          Beep()
          {
              java.awt.Toolkit.getDefaultToolkit().beep();
          }

          //----------------------------------
          // Create
          //----------------------------------
          static private DebugTrace
          Create()
          {
              if(trace == null)
              {
                  trace = new DebugTrace();
              }
              return trace;
          }

          //----------------
          // GetFilterLevel
          //----------------
          /*
          public int
          GetFilterLevel()
          {
              return filterLevel;
          }
          */

          //----------------
          // GetFilterLevelString
          //----------------
          public String
          GetFilterLevelString()
          {
              if (filterLevel == ESConstants.ALWAYS) return "ALWAYS";
              if (filterLevel == ESConstants.NONE) return "NONE";
              if (filterLevel == ESConstants.MIN) return "MIN";
              if (filterLevel == ESConstants.MSG) return "MSG";
              if (filterLevel == ESConstants.MSGDETAIL) return "MSGDETAIL";
              if (filterLevel == ESConstants.GUI) return "GUI";
              if (filterLevel == ESConstants.GUIDETAIL) return "GUIDETAIL";
              if (filterLevel == ESConstants.COMM) return "COMM";
              if (filterLevel == ESConstants.COMMDETAIL) return "COMMDETAIL";
              if (filterLevel == ESConstants.PARANOID) return "PARANOID";
              return "UNKNOWN???";
          }

          //----------------------------------
          // GetServerTime
          //----------------------------------
          public void
          GetServerTime()
          {
              try
              {
                  String host = tfHost.getText();
                  int port = 13;
                  Trace("Getting the time from " + host + ":" + port);
                  Stopwatch sw = new Stopwatch();
                  Socket s = new Socket(host,port);
                  sw.Stop();
                  Trace("Connection setup time" + sw);
                  sw.Start();
                  BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                  String line = "";
                  boolean gotSomeData = false;
                  while ((line = br.readLine()) != null)
                  { if (gotSomeData == false)
                      { gotSomeData = true;
                          sw.Stop();
                          Print("Time for server to respond = " + sw,ESConstants.ALWAYS);
                          sw.Start();
                      }
                      Print(line,ESConstants.ALWAYS);
                  }
                  br.close();
                  s.close();
                  sw.Stop();
                  trace.Print("Finished grabbing the data" + sw,ESConstants.ALWAYS);
              }
              catch (Exception ex)
              {
                  Print(ex);
              }
          }

          //----------------
          // GetTrace
          //----------------
          static public DebugTrace
          GetTrace()
          {
              return trace;
          }

          //----------------------------------
          // Hide
          //----------------------------------
          static synchronized public void
          Hide()
          {
              if(trace != null)
              { trace.setVisible(false);
              }
          }

          //----------------------------------
          // lostOwnership
          //----------------------------------
          public void
          lostOwnership(Clipboard cb, Transferable contents)
          {
          }

          //----------------------------------
          // OnCopy
          //----------------------------------
          public void
          OnCopy()
          {
              if (ta == null)
              {
                  return;
              }
              String buff = ta.getText();
              if (buff.length() > 0)
              {
                  Clipboard cb = getToolkit().getSystemClipboard();
                  StringSelection sSelection = new StringSelection(buff);
                  cb.setContents(sSelection,this);
                  Beep();
              }
          }

          //----------------
          // OnDirect
          //----------------
          public void
          OnDirect()
          {
              UTDebug trace = new UTDebug("DebugTrace.onDirect()",ESConstants.COMM);

              String host = tfHost.getText();
              int port = 0;
              try
              {
                  port = Integer.parseInt(tfPort.getText());
              }
              catch (NumberFormatException nfex)
              {
                  trace.Print("Invalid port number (" + tfPort.getText() + ")");
                  return;
              }
              trace.Print("Connecting to " + host + ":" + port);

              CommMgr cm = new CommMgr
                  (ESConstants.ES_USERID,
                   ESConstants.ES_PASSWORD,
                   ESApplet.ES_PCMGR_HOST,
                   ESApplet.ES_PCMGR_PORT,
                   ESConstants.ES_PCMGR_TIMEOUT,
                   ESConstants.ES_UNIX_TIMEOUT
                   );
              cm.ConnectUnix(tfHost.getText(),port);

          }

          //----------------
          // OnPCMgr
          //----------------
          public void
          OnPCMgr()
          {
              UTDebug trace = new UTDebug("DebugTrace.OnPCMgr()",ESConstants.COMM);

              String host = tfHost.getText();
              int port = 0;
              try
              {
                  port = Integer.parseInt(tfPort.getText());
        

            rschiavisunw Richard Schiavi (Inactive)
            rkarsunw Ralph Kar (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: