Solved! CLDC 1.0 “java.lang.NoClassDefFoundError not found” Problem

I now have a work-around for the issue I described here, whereby <ClsName>.class expressions will not compile when writing JAVA Midlets that target CLDC 1.0.

The problem is that “code generated for the class literal syntax requires certain platform
classes to be present”.

As mentioned before, these classes are available to CLDC 1.1, so a possible workaround is to target the later CLDC version. Unfortunately, this means that your application will only work on recent devices that support the updates spec.

Fortunately, there is a very simple solution to the problem. It is quite possible to reproduce the missing classes and compile them into your application. If you do so, your application will compile quite happily. The classes required are “java.lang.NoClassDefFoundError” and its parent class, “java.lang.LinkageError”. Thankfully, these classes are both very simple, and can be reproduced easily.

Better still, a reference version of these classes is available under the GNU licence, so you can simply include these versions and away you go.

For easy reference, here are copies of the two classes that I found here and here:

/* NoClassDefFoundError.java -- thrown when a ClassLoader cannot find a class
Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
   
This file is part of GNU Classpath.
  
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING.  If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.

Linking this library statically or dynamically with other modules is
making a combined work based on this library.  Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.

As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module.  An independent module is a module which is not derived from
or based on this library.  If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so.  If you do not wish to do so, delete this
exception statement from your version. */
 
package java.lang;
 /**
 * A <code>NoClassDefFoundError</code> is thrown when a classloader or the
 * Java Virtual Machine tries to load a class and no definition of the class
 * can be found.  This could happen when using the <code>new</code> expression
 * or during a normal method call.  The reason this would occur at runtime is
 * because the missing class definition existed when the currently executing
 * class was compiled, but now that definition cannot be found.
 *
 * @author Brian Jones
 * @author Tom Tromey (tromey@cygnus.com)
 * @status updated to 1.4
 */
public class NoClassDefFoundError extends LinkageError
{
  /**
   * Compatible with JDK 1.0+.
   */
  private static final long serialVersionUID = 9095859863287012458L;

  /**
   * Create an error without a message.
   */
  public NoClassDefFoundError()
  {
  }

  /**
   * Create an error with a message.
   *
   * @param s the message
   */
  public NoClassDefFoundError(String s)
  {
    super(s);
  }
}
 /* LinkageError.java -- thrown when classes valid at separate compile times 
    cannot be linked to each other 
    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc. 
 
 This file is part of GNU Classpath. 
 
 GNU Classpath is free software; you can redistribute it and/or modify 
 it under the terms of the GNU General Public License as published by 
 the Free Software Foundation; either version 2, or (at your option) 
 any later version. 
 
 GNU Classpath is distributed in the hope that it will be useful, but 
 WITHOUT ANY WARRANTY; without even the implied warranty of 
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 General Public License for more details. 
 
 You should have received a copy of the GNU General Public License 
 along with GNU Classpath; see the file COPYING.  If not, write to the 
 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
 02110-1301 USA. 
 
 Linking this library statically or dynamically with other modules is 
 making a combined work based on this library.  Thus, the terms and 
 conditions of the GNU General Public License cover the whole 
 combination. 
 
 As a special exception, the copyright holders of this library give you 
 permission to link this library with independent modules to produce an 
 executable, regardless of the license terms of these independent 
 modules, and to copy and distribute the resulting executable under 
 terms of your choice, provided that you also meet, for each linked 
 independent module, the terms and conditions of the license of that 
 module.  An independent module is a module which is not derived from 
 or based on this library.  If you modify this library, you may extend 
 this exception to your version of the library, but you are not 
 obligated to do so.  If you do not wish to do so, delete this 
 exception statement from your version. */ 
 
 
 package java.lang; 
 
 /** 
  * Subclasses of &lt;code&gt;LinkageError&lt;/code&gt; are thrown to indicate that two 
  * classes which were compatible at separate compilation times cannot be 
  * linked to one another. 
  * 
  * @author Brian Jones 
  * @author Tom Tromey (<a href="mailto:tromey@cygnus.com">tromey@cygnus.com</a>) 
  * @status updated to 1.4 
  */ 
 public class LinkageError extends Error 
 { 
   /** 
    * Compatible with JDK 1.0+. 
    */ 
   private static final long serialVersionUID = 3579600108157160122L; 
 
   /** 
    * Create an error without a message. 
    */ 
   public LinkageError() 
   { 
   } 
  
   /** 
    * Create an error with a message. 
    * 
    * @param s the message 
    */ 
   public LinkageError(String s) 
   { 
     super(s); 
   } 
 }

Advertisements

6 Responses to Solved! CLDC 1.0 “java.lang.NoClassDefFoundError not found” Problem

  1. Refacto says:

    It seems to work well, thank you !

  2. kramii says:

    Refacto:

    I am delighted!

  3. Jose says:

    I make a application for mobile that works with a service web….works fine from emulator….but when I try from a phone show me “java.lang.noclassdeffounderror”

    I don´t get how use the code that you post…

  4. kramii says:

    Jose:

    It sounds like there is a class available on the emulator that doesn’t exist on your phone. If that is the case, this code won’t help. Sorry.

  5. Jose says:

    Yeah, was the phone…I was work with a HTC TyTN2..and no works then I try in a Nokia and works…I think that is for Windows mobile…then like I need work over this platform, we decide change to C#…anyway Thank you for you answer.:)

  6. joseph says:

    Dear sir,
    i am using nokia mobile c3 but when i am tring to open uc browser, the below error showing. pls sugess
    me.

    “Class not found Java/lang/classNotFoudnException/uc/
    application/app/webClient”

    thanks & regards

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: