-
Bug
-
Resolution: Fixed
-
P4
-
1.0.2, 1.1.5, 1.1.6, 1.2.0
-
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());
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);
}
//----------------------------------
//----------------------------------
static synchronized public void
Print(String msg, int level)
{
if (trace == null)
{
trace = Create();
}
if (level <= filterLevel)
{
trace.Trace(msg);
}
}
//----------------------------------
//----------------------------------
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());
- duplicates
-
JDK-4135744 NPE creating ToolTip if contained in Frame (as opposed to JFrame)
-
- Closed
-
-
JDK-4140836 ToolTips throw NullPointerException in BeanBox
-
- Closed
-
-
JDK-4135348 NullPointerException when using ToolTips
-
- Closed
-
-
JDK-4150229 NullPointerException with ToolTipText
-
- Closed
-