Why wont this compile in Visual J++ 1.1 ??

I am trying to compile this program from straight out of a book..
import java.awt.*;
import java.awt.event.*;

public class HelloWindowsApp extends Frame {
 public static void main(String args[]){
  HelloWindowsApp app = new HelloWindowsApp();
 }
 
 public HelloWindowsApp() {
  super("Toby Rules the World!");
  setSize(200,200);
  addWindowListener(new HelloWindowsApp.WindowEventHandler());
  show();
 }
 
 public void paint(Graphics g) {
  g.drawString("Hello Windows!",50,90);
 }
 
 class WindowEventHandler extends WindowAdapter {
  public void windowClosing(WindowEvent e){
   System.exit(0);
  }
 }
}

Very simple nothing to it really but when I try to compile in the trial version of Visuall J++ 1.1 I get the errors:
--------------------Configuration: HelloWindowsApp - Java Virtual Machine Debug--------------------
Compiling...
Microsoft (R) Visual J++ Compiler Version 1.01.7022
Copyright (C) Microsoft Corp 1996. All rights reserved.
D:\My Programs\My Own tests\HelloWindowsApp.java(20,2) : error J0021: Expected type specifier
D:\My Programs\My Own tests\HelloWindowsApp.java(20,2) : error J0019: Expected identifier
D:\My Programs\My Own tests\HelloWindowsApp.java(23,3) : fatal error J0020: Expected 'class' or 'interface'
Error executing jvc.exe.

HelloWindowsApp.class - 3 error(s), 0 warning(s)

the strange thing is this program will compile fine using the dos compiler: javac.
i.e javac HelloWindowsApp.java
no errors, so whats the problem???

LVL 1
deeznutzAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jpk041897Commented:
Looks like you have misplaced brackets. Try:

import java.awt.*;
import java.awt.event.*;

public class HelloWindowsApp extends Frame {
     public static void main(String args[]){
        HelloWindowsApp app = new HelloWindowsApp();
     }
     
     public HelloWindowsApp() {
        super("Toby Rules the World!");
        setSize(200,200);
        addWindowListener(new HelloWindowsApp.WindowEventHandler());
        show();
      }
     
      public void paint(Graphics g) {
         g.drawString("Hello Windows!",50,90);
      }
 }
class WindowEventHandler extends WindowAdapter {
      public void windowClosing(WindowEvent e){
         System.exit(0);
      }
}

The problem, from looking at the code, is that the missplaced bracket causes the compiler to try to read class WindowEventHandler as a method of HelloWindowsApp instead of as an independent class.

Note that this will compile, but will not run. In order for it to run, you will need to rewrite it as:

import java.awt.*;
    import java.awt.event.*;

    public class HelloWindowsApp extends Frame {
     public static void main(String args[]){
      HelloWindowsApp app = new HelloWindowsApp();
     }
     
     public HelloWindowsApp() {
      super("Toby Rules the World!");
      setSize(200,200);
      addWindowListener(new HelloWindowsApp.WindowEventHandler());
      show();
     }
     
     public void paint(Graphics g) {
      g.drawString("Hello Windows!",50,90);
     }
     
     void WindowEventHandler extends WindowAdapter {
      public void windowClosing(WindowEvent e){
       System.exit(0);
      }
     }
    }

Since event handlers are overriden methods of the object class.
0
deeznutzAuthor Commented:
Have you tried compiling both your code in Visual J++ 1.1?
I get exactly the saem error, what I cannt understand which you may have missed is that, my first code comiles fine using
the dos command javac HelloWindowsApp.java, but will not compile in J++.

0
fontaineCommented:
As I am not sure, I post as a comment. Tell me if this is an answer. The problem is the inner class. This is pure JDK 1.1 and I think that VJ++ does not support it. Take a look at the doc. about this (I don't have VJ++ by hand). If you put the inner class outside of HelloWindowsApp and turn new HelloWindowsApp.WindowEventHandler() in new WindowEventHandler(), the program should compile without any problem.
0
deeznutzAuthor Commented:
Thanks, but you have added a comment, and I cannt give you the credit for your answer.  You answer was spot on, so if you want you deserve the points for this question, but I am unable to grade comments. :(
0
fontaineCommented:
Thanks, deeznutz! I repost as an answer then.

The problem is the inner class. This is pure JDK 1.1 and VJ++ does not support it. If you put the inner class outside of HelloWindowsApp and turn new HelloWindowsApp.WindowEventHandler() in new WindowEventHandler(), the program should compile without any problem.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.