JDK-4633740 : Compiler Error in J2MEWT
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: unknown
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_nt
  • CPU: x86
  • Submitted: 2002-02-06
  • Updated: 2002-04-02
  • Resolved: 2002-04-02
Related Reports
Duplicate :  
Description
      g.drawString("***  PAUSED  ***", dcenterx, dheight, g.BOTTOM|g.HCENTER);
      g.drawString("***  PAUSED  ***", dcenterx, 0, g.TOP|g.HCENTER);
      //g.drawString("***  "+dwidth+", "+dheight+"  ***", dcenterx, 0,
g.TOP|g.HCENTER);
    }

    if(blackNums[0] != null)
    {
      g.drawImage(blackNums[0], 0, 0, g.TOP|g.HCENTER);
    }
  }
}



package palm;

/**
 * Title:        ClassCapture
 * Description:  Class audio and notation capture program.
 * Records audio in the classroom environment and
 * denotes which group of students the teacher
 * is currently speaking with.
 * Copyright:    Copyright (c) 2001
 * Company:      Acuitus
 * @author Eric Bailey
 * @version 1.0
 */
/* MIDP for Palm MIDlet for turning the palm into a wireless remote control
 */

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class RemCap extends MIDlet
{
  private MainDisplay md;

  public RemCap()
  {
    md = new MainDisplay(this);
  }

  // -- startApp --
  // --------------
  // Sets the display with our UI
  protected void startApp() {
    Display.getDisplay(this).setCurrent(md);
  }

  protected void pauseApp() {}
  protected void destroyApp(boolean u) {}

  // -- exit --
  // ----------
  // Closes down the connection and exits the app
  public void exit()
  {
    destroyApp(false);
    notifyDestroyed();
  }
}

---------- END SOURCE ----------
(Review ID: 138689) 
======================================================================
Name: Asaf Volshtein   ###@###.###   Date:03/14/2002

This bug was sent to us by a customer, his description follows mine.

FULL PRODUCT VERSION :
j2sdk1.4.0

FULL OPERATING SYSTEM VERSION : Win NT 4.0

A DESCRIPTION OF THE PROBLEM :
The compiler does not recognise classes when using their name Myclass.class.

When writing a MIDLet adding the following line :
InputStream is = HelloMIDlet.class.getResourceAsStream("/HelloMIDlet.png");
will cause the comiler to throw an exeption : 

An exception has occurred in the compiler (1.4.0). Please file a bug at the Java Developer Connection (http://java.sun.com/cgi-bin/bugreport.cgi)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
com.sun.tools.javac.v8.code.Symbol$CompletionFailure: file java\lang\NoClassDefFoundError.class not found
	at com.sun.tools.javac.v8.code.ClassReader.fillIn(ClassReader.java:1020)
	at com.sun.tools.javac.v8.code.ClassReader.complete(ClassReader.java:977)
	at com.sun.tools.javac.v8.code.Symbol.complete(Symbol.java:375)
	at com.sun.tools.javac.v8.code.Symbol$ClassSymbol.complete(Symbol.java:697)
	at com.sun.tools.javac.v8.code.Symbol$ClassSymbol.flags(Symbol.java:594)
	at com.sun.tools.javac.v8.comp.Resolve.findMethod(Resolve.java:386)
	at com.sun.tools.javac.v8.comp.Resolve.resolveQualifiedMethod(Resolve.java:835)
	at com.sun.tools.javac.v8.comp.Resolve.resolveConstructor(Resolve.java:875)
	at com.sun.tools.javac.v8.comp.TransInner.makeNewClass(TransInner.java:256)
	at com.sun.tools.javac.v8.comp.TransInner.classDollarSym(TransInner.java:1275)
	at com.sun.tools.javac.v8.comp.TransInner.classOfType(TransInner.java:1375)
	at com.sun.tools.javac.v8.comp.TransInner.classOf(TransInner.java:1339)
	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1755)
	at com.sun.tools.javac.v8.tree.Tree$Select.visit(Tree.java:1063)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1753)
	at com.sun.tools.javac.v8.tree.Tree$Select.visit(Tree.java:1063)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1684)
	at com.sun.tools.javac.v8.tree.Tree$Apply.visit(Tree.java:869)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.tree.TreeTranslator._case(TreeTranslator.java:115)
	at com.sun.tools.javac.v8.tree.Tree$VarDef.visit(Tree.java:503)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.tree.TreeTranslator.translate(TreeTranslator.java:56)
	at com.sun.tools.javac.v8.tree.TreeTranslator._case(TreeTranslator.java:124)
	at com.sun.tools.javac.v8.tree.Tree$Block.visit(Tree.java:539)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.tree.TreeTranslator._case(TreeTranslator.java:172)
	at com.sun.tools.javac.v8.tree.Tree$Try.visit(Tree.java:689)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.tree.TreeTranslator.translate(TreeTranslator.java:56)
	at com.sun.tools.javac.v8.tree.TreeTranslator._case(TreeTranslator.java:124)
	at com.sun.tools.javac.v8.tree.Tree$Block.visit(Tree.java:539)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.tree.TreeTranslator._case(TreeTranslator.java:109)
	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1557)
	at com.sun.tools.javac.v8.tree.Tree$MethodDef.visit(Tree.java:474)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1488)
	at com.sun.tools.javac.v8.tree.Tree$ClassDef.visit(Tree.java:435)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1432)
	at com.sun.tools.javac.v8.comp.TransInner.translate(TransInner.java:1450)
	at com.sun.tools.javac.v8.comp.TransInner.translateTopLevelClass(TransInner.java:1785)
	at com.sun.tools.javac.v8.JavaCompiler.compile(JavaCompiler.java:417)
	at com.sun.tools.javac.v8.Main.compile(Main.java:526)
	at com.sun.tools.javac.Main.compile(Main.java:32)
	at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at com.sun.kvem.ktools.Compiler.compile(Unknown Source)
	at com.sun.kvem.ktools.Build.compile(Unknown Source)
	at com.sun.kvem.ktools.Build.build(Unknown Source)
	at com.sun.kvem.ktools.Main.run(Unknown Source)
	at com.sun.kvem.toolbar.MainWindow$CompilerThread.run(Unknown Source)

If you use instead the following line the comilation will succeed:
InputStream is = Class.forName("HelloMIDlet")
    .getResourceAsStream("/HelloMIDlet.png");

The same thing hapens when trying to compile the line : 
  System.out.println(HelloMIDlet.class);
An exeption is thrown, but the compilation of the line :
  System.out.println(Class.forName("HelloMIDlet"));
ends successfully.


Name: gm110360			Date: 02/05/2002


FULL PRODUCT VERSION :
build 1.3.0-c


FULL OPERATING SYSTEM VERSION : Win NT 4.0 sp4




A DESCRIPTION OF THE PROBLEM :
cannot build my app.

Hitting the build button in the toolbar app results in the
exception below

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1.Open my project, then hit build



EXPECTED VERSUS ACTUAL BEHAVIOR :
Should build, instead, I get the exception

ERROR MESSAGES/STACK TRACES THAT OCCUR :
An exception has occurred in the compiler (1.3.0). Please file a bug at the
Java Developer Connection (http://java.sun.com/cgi-bin/bugreport.cgi).  Include
your program and the following diagnostic in your report.  Thank you.

com.sun.tools.javac.v8.code.Symbol$CompletionFailure: file
java\lang\NoClassDefFoundError.class not found

	at com.sun.tools.javac.v8.code.ClassReader.fillIn(ClassReader.java:997)

	at com.sun.tools.javac.v8.code.ClassReader.complete
(ClassReader.java:952)

	at com.sun.tools.javac.v8.code.Symbol.complete(Symbol.java:366)

	at com.sun.tools.javac.v8.code.Symbol$ClassSymbol.flags(Symbol.java:578)

	at com.sun.tools.javac.v8.comp.Resolve.findMethod(Resolve.java:367)

	at com.sun.tools.javac.v8.comp.Resolve.resolveQualifiedMethod
(Resolve.java:808)

	at com.sun.tools.javac.v8.comp.Resolve.resolveConstructor
(Resolve.java:827)

	at com.sun.tools.javac.v8.comp.TransInner.makeNewClass
(TransInner.java:239)

	at com.sun.tools.javac.v8.comp.TransInner.classDollarSym
(TransInner.java:1198)

	at com.sun.tools.javac.v8.comp.TransInner.classOf(TransInner.java:1291)

	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1554)

	at com.sun.tools.javac.v8.tree.Tree$Select.visit(Tree.java:963)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1552)

	at com.sun.tools.javac.v8.tree.Tree$Select.visit(Tree.java:963)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1485)

	at com.sun.tools.javac.v8.tree.Tree$Apply.visit(Tree.java:785)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.tree.TreeTranslator._case
(TreeTranslator.java:106)

	at com.sun.tools.javac.v8.tree.Tree$VarDef.visit(Tree.java:470)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:47)

	at com.sun.tools.javac.v8.tree.TreeTranslator._case
(TreeTranslator.java:111)

	at com.sun.tools.javac.v8.tree.Tree$Block.visit(Tree.java:492)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.tree.TreeTranslator._case
(TreeTranslator.java:159)

	at com.sun.tools.javac.v8.tree.Tree$Try.visit(Tree.java:642)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:47)

	at com.sun.tools.javac.v8.tree.TreeTranslator._case
(TreeTranslator.java:111)

	at com.sun.tools.javac.v8.tree.Tree$Block.visit(Tree.java:492)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.tree.TreeTranslator._case
(TreeTranslator.java:100)

	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1418)

	at com.sun.tools.javac.v8.tree.Tree$MethodDef.visit(Tree.java:441)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.comp.TransInner._case(TransInner.java:1355)

	at com.sun.tools.javac.v8.tree.Tree$ClassDef.visit(Tree.java:402)

	at com.sun.tools.javac.v8.tree.TreeTranslator.translate
(TreeTranslator.java:35)

	at com.sun.tools.javac.v8.comp.TransInner.translate
(TransInner.java:1317)

	at com.sun.tools.javac.v8.comp.TransInner.translateTopLevelClass
(TransInner.java:1583)

	at com.sun.tools.javac.v8.JavaCompiler.compile(JavaCompiler.java:397)

	at com.sun.tools.javac.v8.Main.compile(Main.java:247)

	at com.sun.tools.javac.Main.compile(Main.java:26)

	at java.lang.reflect.Method.invoke(Native Method)

	at com.sun.kvem.ktools.Compiler.compile(Unknown Source)

	at com.sun.kvem.ktools.Build.compile(Unknown Source)

	at com.sun.kvem.ktools.Build.build(Unknown Source)

	at com.sun.kvem.ktools.Main.run(Unknown Source)

	at com.sun.kvem.toolbar.MainWindow$CompilerThread.run(Unknown Source)

com.sun.kvem.ktools.ExecutionException

Build failed



This bug can be reproduced always.

---------- BEGIN SOURCE ----------
package palm;

/**
 * Title:        ClassCapture
 * Description:  Class audio and notation capture program.
 * Records audio in the classroom environment and
 * denotes which group of students the teacher
 * is currently speaking with.
 * Copyright:    Copyright (c) 2001
 * Company:      Acuitus
 * @author Eric Bailey
 * @version 1.0
 */

import javax.microedition.lcdui.*;
import java.io.*;

public class MainDisplay extends Canvas
{
  // main app pointer
  private RemCap remCap;

  // commands
  private Command cmdExit;

  // remote stats
  private boolean isPaused;
  private int groupNum;
  private boolean groupNumChanged;
  private int MAX_GROUPS;

  // drawing vars
  private Font groupFont;
  private int dwidth, dheight, dcenterx, dcentery;

  private Image[] blackNums, whiteNums;
  private byte[] imageData;


  public MainDisplay(RemCap rc)
  {
    super();

    remCap = rc;

    isPaused = false;
    groupNum = -1;
    groupNumChanged = false;
    MAX_GROUPS = 99;

    cmdExit = new Command("EXIT", Command.EXIT, 1);
    addCommand(cmdExit);

    groupFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_LARGE);
    dwidth = getWidth();
    dheight = getHeight();
    dcenterx = dwidth / 2;
    dcentery = dheight / 2;

    loadImages();
  }

////////////////////////////////////////////////////////////////////////////////
// METHODS
////////////////////////////////////////////////////////////////////////////////

  // -- sendGroup --
  // --------------
  // After a group change, we send the new group to the server
  private void sendGroup()
  {

  }

  // -- sendPauseOrResume --
  // -----------------------
  //
  private void sendPauseOrResume()
  {
    String msg;
    if(isPaused) msg = "pause";
    else msg = "resume";


  }

  // -- loadImages --
  // ----------------
  // Loads the number images 0-9.
  //
  private void loadImages()
  {
    blackNums = new Image[10];
    whiteNums = new Image[10];

    imageData = new byte[50000];

    blackNums[0] = getImageFromResource("resources/0.png");
  }
  // -- getImagePath --
  // ------------------
  private Image getImageFromResource(String resource)
  {
    try
    {
      InputStream is = MainDisplay.class.getResourceAsStream(resource);
      int len = is.read(imageData);

      Image im = Image.createImage(imageData, 0, len);
      return im;
    }
    catch(Exception e) { e.printStackTrace(); }
    return null;
  }

////////////////////////////////////////////////////////////////////////////////
// USER INTERACTION
////////////////////////////////////////////////////////////////////////////////

  // ** BUTTONS **
  public void keyPressed(int keyCode)
  {
    int gameCode = getGameAction(keyCode);
    switch(gameCode)
    {
      case Canvas.UP: // next group num
      {
        if(groupNum < MAX_GROUPS) groupNum++;
        //sendGroup();
        groupNumChanged = true;
        repaint();
        break;
      }
      case Canvas.DOWN: // prev group num
      {
        if(groupNum > 0) groupNum--;
        //sendGroup();
        groupNumChanged = true;
        repaint();
        break;
      }
      case Canvas.FIRE: // pause recording
      {
        if(!isPaused) return;
        isPaused = false;
        repaint();
        sendPauseOrResume();
        break;
      }
      case Canvas.LEFT: // make group selection/send current group
      {
        if(isPaused) return;
        isPaused = true;
        repaint();
        sendPauseOrResume();
        break;
      }
      case Canvas.RIGHT:
      {
        if(!groupNumChanged) break; //don't send useless data
	  groupNumChanged = false;
        repaint();
        sendGroup();
        break;
      }
      default: break;
    }
  }
  public void keyReleased(int keyCode)
  {

  }
  public void keyRepeated(int keyCode)
  {
    int gameCode = getGameAction(keyCode);
    switch(gameCode)
    {
      case Canvas.UP: // next group num
      {
        if(groupNum < MAX_GROUPS) groupNum++;
        //sendGroup();
        groupNumChanged = true;
        repaint();
        break;
      }
      case Canvas.DOWN: // prev group num
      {
        if(groupNum > 0) groupNum--;
        //sendGroup();
        groupNumChanged = true;
        repaint();
        break;
      }
      default: break;
    }
  }

  // ** COMMANDS **
  public void commandAction(Command c, Displayable d)
  {
    if(c == cmdExit) { remCap.exit(); }
  }

////////////////////////////////////////////////////////////////////////////////
// DRAWING
////////////////////////////////////////////////////////////////////////////////

  // -- paint --
  // -----------
  // All of the drawing for this class
  protected void paint(Graphics g)
  {
    // background
    if(groupNumChanged) g.setColor(0, 0, 0); // white text, black background
    else g.setColor(255, 255, 255);

    g.fillRect(0, 0, dwidth, dheight);

    // text
    if(groupNumChanged) g.setColor(255, 255, 255); // white text, black
background
    else g.setColor(0, 0, 0);

    // group num
    g.setFont(groupFont);
    g.drawString(Integer.toString(groupNum), dcenterx, dcentery,
g.BASELINE|g.HCENTER);

    // paused
    if(isPaused)
    {