Example Program Gone Wrong

Posted on 2004-07-30
Last Modified: 2010-08-05
Hi I'm just learning java,

while going through core java 2 by sun microsystems press I had a problem with an example that is supposed to make a toolbar.  The funny thing is that the code compiles and runs but the icons don't show up. The toolbar is just a set of empty grey boxes. But they do function. Anyway I am using netbeans IDE version 3.6 the java version is version 2 (1.4.2) and the graphic files are in the same folder as the source.

Here is the code:

 * @version 1.00 1999-07-17
 * @author Cay Horstmann

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;

public class ToolBarTest
{  public static void main(String[] args)
   {  JFrame frame = new ToolBarFrame();;

/* the color action sets the background of its target to a
   given color

class ColorAction extends AbstractAction
{  public ColorAction(String name, Icon icon,
      Color c, Component t)
   {  putValue(Action.NAME, name);
      putValue(Action.SMALL_ICON, icon);
      putValue(Action.SHORT_DESCRIPTION, name + " background");
      putValue("Color", c);
      target = t;

   public void actionPerformed(ActionEvent evt)
   {  Color c = (Color)getValue("Color");

   private Component target;

/* the tool bar button is a button with an icon and no text
   suitable for addition into a tool bar. The tool tip is set
   to the short description of the action, or to the name
   if the short description is not available

class ToolBarButton extends JButton
{  public ToolBarButton(Action a)
   {  super((Icon)a.getValue(Action.SMALL_ICON));

      String toolTip
         = (String)a.getValue(Action.SHORT_DESCRIPTION);
      if (toolTip == null)
         toolTip = (String)a.getValue(Action.NAME);
      if (toolTip != null)

class ToolBarFrame extends JFrame
{  public ToolBarFrame()
   {  setTitle("ToolBarTest");
      setSize(300, 200);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
         } );

      // add a panel for color change

      Container contentPane = getContentPane();
      JPanel panel = new JPanel();
      contentPane.add(panel, "Center");

      // set up actions

      Action blueAction = new ColorAction("Blue",
         new ImageIcon("blue-ball.gif"),, panel);
      Action yellowAction = new ColorAction("Yellow",
         new ImageIcon("yellow-ball.gif"),
         Color.yellow, panel);
      Action redAction = new ColorAction("Red",
         new ImageIcon("red-ball.gif"),, panel);

      Action exitAction
         = new AbstractAction("Exit", new ImageIcon("exit.gif"))
            {  public void actionPerformed(ActionEvent event)
               {  System.exit(0);

      // populate tool bar

      JToolBar bar = new JToolBar();
      bar.add(new ToolBarButton(blueAction));
      bar.add(new ToolBarButton(yellowAction));
      bar.add(new ToolBarButton(redAction));
      bar.add(new ToolBarButton(exitAction));
      contentPane.add(bar, "North");

      // populate menu

      JMenu menu = new JMenu("Color");
      JMenuBar menuBar = new JMenuBar();

Anyway if anyone knows why the graphics don't show up It is probobly something simple since I am a newbie.

Question by:JoshuaJue
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
LVL 35

Expert Comment

ID: 11677151
have you got the images exit.gif, and red, yellow and blue-ball.gif?

In the same directory as the classes?

Author Comment

ID: 11677171
yes the images are in the same directory
LVL 37

Assisted Solution

zzynx earned 50 total points
ID: 11677207
Maybe you can try passing the full path:

 new ImageIcon("c:/mydir/mydir2/blue-ball.gif")
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

LVL 35

Expert Comment

ID: 11677226
> new ImageIcon("c:/mydir/mydir2/blue-ball.gif")

*shudder* ;-)

>  yes the images are in the same directory the source?

Not the compiled classes?

That's your problem...  Images need to be where the classes are...

Author Comment

ID: 11677304
ok it works with a full path.  Should it normally work with just the file name if it is in the same directory as the class? And if it should why isn't it now?
LVL 35

Expert Comment

ID: 11677351
> ok it works with a full path.

a) On windows.  On your machine.

> Should it normally work with just the file name if it is in the same directory as the class?

b) Yes, so long as the images are with the CLASS files, and not the JAVA files

> And if it should why isn't it now?

c) See (b) ;-)
LVL 37

Accepted Solution

zzynx earned 50 total points
ID: 11677364
>>Should it normally work with just the file name if it is in the same directory as the class?

But you probably run your program from within netBeans.
If I remember well, then it goes looking for that files in the c:/<your dir>/netbeans3.6/bin/ directory.
So, if you remove the full paths again and place the gif files in that bin directory it should also work.

Author Comment

ID: 11677673
Ok glad it was an Ide thing and not a code thing. Frustrating to think you finally understand only to not have the code work.  I moved the images into the netbeans3.6/bin directory no luck.
Just for the heck of it I tried the netbeans3.6 directory and it worked. They should make netbeans smart enough to resolve links to native folders.

LVL 35

Expert Comment

ID: 11677710
LVL 37

Expert Comment

ID: 11678170
>> I tried the netbeans3.6 directory and it worked
So, I didn't remember well ;°)

Thanks for accepting.

Tim's comment
>>b) Yes, so long as the images are with the CLASS files, and not the JAVA files
deserved a split.

Featured Post

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
String array comparison 4 57
Glassfish admin console not working 1 88
java imports not found 4 71
junit initializtion error 2 21
An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Suggested Courses

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question