-
Bug
-
Resolution: Cannot Reproduce
-
P4
-
None
-
1.1.1, 1.1.3
-
x86, sparc
-
solaris_2.5.1, windows_95
When running the following code, select File/Print from the menu bar.
Then click "Print" in the print dialog. I then get a run-time error,
a NullPointerException. The call trace shows it to be 5 levels below
the call in my program which generates the exception.
Exception occurred during event dispatching:
java.lang.NullPointerException
at java.util.Hashtable.get(Hashtable.java)
at sun.awt.motif.X11FontMetrics.getFontMetrics(X11FontMetrics.java:186)
at sun.awt.motif.MToolkit.getFontMetrics(MToolkit.java:208)
at sun.awt.motif.PSGraphics.getFontMetrics(PSGraphics.java:136)
at java.awt.Graphics.getFontMetrics(Graphics.java:195)
at DrawingArea.paint(DrawingArea.java:12)
at java.awt.Component.print(Component.java:1160)
at dareout.actionPerformed(dareout.java:43)
at java.awt.MenuItem.processActionEvent(MenuItem.java:336)
at java.awt.MenuItem.processEvent(MenuItem.java:307)
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:144)
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:65)
2 test source files: dareout.java & DrawingArea.java
// dareout.java
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public final class dareout extends Frame implements ActionListener {
private DrawingArea draw_here;
public void makeMenuItem (Menu menu, String name) {
MenuItem mi;
mi = new MenuItem (name);
mi.addActionListener (this);
menu.add (mi);
}
public dareout (String ftitle) {
super(ftitle);
MenuBar menubar;
Menu file, actions, display;
file = new Menu ("File");
makeMenuItem (file, "Print");
makeMenuItem (file, "Exit");
menubar = new MenuBar ();
setMenuBar (menubar);
menubar.add (file);
draw_here = new DrawingArea ();
add (draw_here);
setBackground (Color.white);
pack ();
setSize (new Dimension (1026, 749));
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() instanceof MenuItem)
if (e.getActionCommand().equals("Print")) {
PrintJob pj = getToolkit().getPrintJob (this,
"Printing Test", (Properties)null);
if (pj != null) {
Graphics pg = pj.getGraphics();
if (pg != null) {
draw_here.print (pg);
pg.dispose ();
}
pj.end();
}
}
else if (e.getActionCommand().equals("Exit"))
System.exit (0);
}
public static void main (String[] args) {
dareout f;
f = new dareout ("dareout");
f.show ();
}
}
// DrawingArea.java
public final class DrawingArea extends Canvas {
float left = 0f, right = 1016f, top = 0f, bottom = 688f;
public void paint (Graphics g) {
int stringwidth, stringheight;
stringheight = (g.getFontMetrics()).getHeight();
stringwidth = (g.getFontMetrics()).stringWidth("SAMPLE TITLE")/2;
}
}
Then click "Print" in the print dialog. I then get a run-time error,
a NullPointerException. The call trace shows it to be 5 levels below
the call in my program which generates the exception.
Exception occurred during event dispatching:
java.lang.NullPointerException
at java.util.Hashtable.get(Hashtable.java)
at sun.awt.motif.X11FontMetrics.getFontMetrics(X11FontMetrics.java:186)
at sun.awt.motif.MToolkit.getFontMetrics(MToolkit.java:208)
at sun.awt.motif.PSGraphics.getFontMetrics(PSGraphics.java:136)
at java.awt.Graphics.getFontMetrics(Graphics.java:195)
at DrawingArea.paint(DrawingArea.java:12)
at java.awt.Component.print(Component.java:1160)
at dareout.actionPerformed(dareout.java:43)
at java.awt.MenuItem.processActionEvent(MenuItem.java:336)
at java.awt.MenuItem.processEvent(MenuItem.java:307)
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:144)
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:65)
2 test source files: dareout.java & DrawingArea.java
// dareout.java
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public final class dareout extends Frame implements ActionListener {
private DrawingArea draw_here;
public void makeMenuItem (Menu menu, String name) {
MenuItem mi;
mi = new MenuItem (name);
mi.addActionListener (this);
menu.add (mi);
}
public dareout (String ftitle) {
super(ftitle);
MenuBar menubar;
Menu file, actions, display;
file = new Menu ("File");
makeMenuItem (file, "Print");
makeMenuItem (file, "Exit");
menubar = new MenuBar ();
setMenuBar (menubar);
menubar.add (file);
draw_here = new DrawingArea ();
add (draw_here);
setBackground (Color.white);
pack ();
setSize (new Dimension (1026, 749));
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() instanceof MenuItem)
if (e.getActionCommand().equals("Print")) {
PrintJob pj = getToolkit().getPrintJob (this,
"Printing Test", (Properties)null);
if (pj != null) {
Graphics pg = pj.getGraphics();
if (pg != null) {
draw_here.print (pg);
pg.dispose ();
}
pj.end();
}
}
else if (e.getActionCommand().equals("Exit"))
System.exit (0);
}
public static void main (String[] args) {
dareout f;
f = new dareout ("dareout");
f.show ();
}
}
// DrawingArea.java
public final class DrawingArea extends Canvas {
float left = 0f, right = 1016f, top = 0f, bottom = 688f;
public void paint (Graphics g) {
int stringwidth, stringheight;
stringheight = (g.getFontMetrics()).getHeight();
stringwidth = (g.getFontMetrics()).stringWidth("SAMPLE TITLE")/2;
}
}