JDK-4244113 : javah generates error for class that "extends Throwable" (ref: 4136344)
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 1.1.7
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_nt
  • CPU: x86
  • Submitted: 1999-06-04
  • Updated: 1999-06-18
  • Resolved: 1999-06-18
Related Reports
Duplicate :  
Description

Name: krT82822			Date: 06/04/99


[Note:  am filing new public bug # for this -- though it's equivalent to internal bug # 4136344.  All other public bug#'s for this problem appear to have
been closed as dupes of 4136344.  We need a public # for user tracking purposes.  Am filing as "runtime" vs. "javah", per the recommendations
inside bug # 4136344.   -kevin.ryan@eng, 6/4/99]

---------------------------
1. To reproduce:
javah -jni com.lhs.questsdk.JQStatus

2. Source code:
///////////////////////////////////////////////////////////////////////////
//                                                                       //
//       (c) Copyright 1999 Lernout & Hauspie Speech Products, N.V.      //
//                  Quest Software Development Kit (R)                   //
//                                                                       //
// This work is protected by United States and international copyright   //
// laws and contains certain trade secret information.  All use of this  //
// work is governed by the terms of agreements between Lernout & Hauspie //
// Speech Products, N.V. and its licensees or potential licensees.       //
// Disclosure or disassembly of the contents of embodied programs or     //
// algorithms is prohibited.  All rights are reserved worldwide.         //
//                                                                       //
///////////////////////////////////////////////////////////////////////////
package com.lhs.questsdk;


/**
 * The JQStatus.java is the declaration file for the Quest JQStatus Java wrapper class.
 * The JQStatus class creates a Quest Status object that contains the status of any
 * function invoked for a Quest class. Each time you invoke a function, the last recorded
 * status will be overwritten. To perform error checking on Quest Class functions,
 * use the JQStatus class. This class corresponds to the QStatus class in the C++ API. Please
 * refer to the Quest SDK User's Guide for detailed functional information.
 */
public class JQStatus extends Throwable
{
	//pointer to corresponding C++ object
	private long m_lStatusPtr;

//Native methods
	private native long CreateStatus();

   // Destructor.
	private native void DeleteStatus (long lStatusPtr);

   // Returns TRUE if an error or warning has been recorded in the QStatus
   // object.
	private native boolean isError(long lStatusPtr) ;

   // Sets the error code or warning in the QStatus object to the given
   // value.
	private native void SetErrorCode(long lStatusPtr, int nErr);

   // Sets the error code or warning in the QStatus object to the given
   // value, and also allows you to set a source file name and line number
   // where the error occurred.  These can later be retrieved using the
   // GetSourceFileName() and GetSourceLineNumber() methods.
	private native void SetErrorCode(long lStatusPtr, int nErr,String pSourceFile, int nLineNumber);

   // Returns the error code currently recorded in the QStatus object.
	private native int GetErrorCode(long lStatusPtr) ;

   // Returns a pointer to the Quest Knowledge Map that generated the most
   // recent error in the QStatus object.
	private native long GetMapper(long lStatusPtr) ;

   // Returns the name of the source file in which the error occurred.
	private native String GetSourceFileName(long lStatusPtr) ;

   // Returns the line number in which the error occurred.
	private native int GetSourceLineNumber(long lStatusPtr) ;


// API methods
   /**
    * Constructs JQStatus. JQStatus creates a Quest Status object that contains
    * the status of any function invoked for a Quest class. Each time you invoke a function,
    * the last recorded status will be overwritten.
    */
	public JQStatus() //throws Exception
	{
	   m_lStatusPtr = CreateStatus();
   /*
	   if (m_lStatusPtr == 0)
		{
			throw new Exception ("Error creating status object.");
		}
		*/
	}

   /**
    * Constructor. Used internally.
    */
	public JQStatus (long lStatusPtr)
	{
	   m_lStatusPtr = lStatusPtr;
	}

	 /**
	  * Copy constructor.
	  * @param other   The object to copy.
      */
	public JQStatus (JQStatus other)
	{
	   m_lStatusPtr = other.GetPtr();
	}

   /**
    * Destructor.
    */
	protected void Invalidate()
	{
	   DeleteStatus (m_lStatusPtr);
	}

	/**
	 * Returns true if an error or warning has been recorded in the QStatus object
	 * @return                Returns true if there was an error, false otherwise.
	 */
	public boolean isError()
	{
	   return isError (m_lStatusPtr);
	}

	/**
	 * Sets the error code or warning in the QStatus object to the given value.
	 * @param iErr            A status code, as defined in the JQErrors interface.
	 */
	public void SetErrorCode(int iErr)
	{
	   SetErrorCode (m_lStatusPtr, iErr);
	}

	/**
	 * Sets the error code or warning in the QStatus object to the given value, and also allows you to set a source file name and line number
	 * where the error occurred. These can later be retrieved using the GetSourceFileName() and GetSourceLineNumber() methods.
	 * @param iErr            A status code, as defined in the JQErrors interface.
	 * @param sSourceFile     Name of file where the error occurred.
	 * @param iSourceLine     Line number where the error occurred.
	 */
	public void SetErrorCode(int iErr, String sSourceFile, int iSourceLine)
	{
	   SetErrorCode (m_lStatusPtr, iErr, sSourceFile, iSourceLine);
	}

	/**
	 * Returns the error code currently recorded in the QStatus object.
	 * @return                A status code, as defined in the JQErrors interface.
	 */
	public int GetErrorCode()
	{
	   return GetErrorCode (m_lStatusPtr);
	}

	/**
     * Returns the Quest Knowledge Map object that generated the most recent error in the QStatus object.
     * @return          The knowledge map object that generated the error in this status object.
     */
    public JQKMap   GetMapper() throws NullPointerException
	{
		long lMapPtr = GetMapper (m_lStatusPtr);

		if ( lMapPtr == 0)
		{
			NullPointerException foo = new NullPointerException();
			throw foo;
		}
		//NOTE: I had to allocate a JQKMBase object since
		// the JQKMap class is abstract.
		return (new JQKMBase (lMapPtr));
	}

	/**
	 * Returns the name of the source file in which the error occurred.
	 * @return                 Name of the source file where the error occurred.
	 */
	public String GetSourceFileName()
	{
		return GetSourceFileName(m_lStatusPtr);
	}

   /**
    * Returns the line number where the error occurred.
    * @return                  Line number where the error occurred.
    */
	public int GetSourceLineNumber()
	{
		return GetSourceLineNumber(m_lStatusPtr);
	}

	/**
	 * used internally.
	 */
	public long GetPtr()
	{
		return m_lStatusPtr;
	}
}

3. Error messages:
Signalled error "java/lang/ClassFormatError" with detail "Bad interface index"
Signalled error "java/lang/NoClassDefFoundError" with detail "java/lang/Throwable"
com/lhs/questsdk/JQStatus: no such class

4. Trace info:
N/A

5. Version info:
java version "1.1.7B"
java full version "JDK1.1.7U"
javah version "1.1.7B"

6. Additional info:
I've got the JDK 1.1.7B's classes.zip in my path, I peeked in classes.zip and Throwable.class is there under java\lang.  

Tried adding "import java.lang.*" to the top of JQStatus.java; compiler (MSVJ) complains that the java.lang package is implicitly imported.
(Review ID: 83841) 
======================================================================

Comments
WORK AROUND Name: krT82822 Date: 06/04/99 Comment-out "extends Throwable", run javah to create my header, then put "extends Throwable" back in. ======================================================================
11-06-2004

EVALUATION I don't understand why submitter claims "a public # is required." I can visit http://developer.java.sun.com/developer/bugParade/bugs/4136344.html and the bug is indeed already available publicly. anand.palaniswamy@Eng 1999-06-18
18-06-1999