Solved

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

Posted on 1998-05-04
5
286 Views
Last Modified: 2013-11-23
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???

0
Comment
Question by:deeznutz
  • 2
  • 2
5 Comments
 
LVL 6

Expert Comment

by:jpk041897
Comment Utility
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
 
LVL 1

Author Comment

by:deeznutz
Comment Utility
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
 
LVL 5

Expert Comment

by:fontaine
Comment Utility
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
 
LVL 1

Author Comment

by:deeznutz
Comment Utility
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
 
LVL 5

Accepted Solution

by:
fontaine earned 100 total points
Comment Utility
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

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

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…
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
The viewer will learn how to implement Singleton Design Pattern in Java.

762 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now