Instantiating a Java class in native code.

I'm trying to figure out how to instantiate a Java class in native code (C/C++) but no luck so far.
Given a class called DataPacket written in Java, how can I create in the native side of the code?
Any ideas?
Thanks.

chickenlips wrote:
Hi NiceGuy,
Thanks for responding. Yes MyClass.class is in the right place.
A call to env->ExceptionDescribe(); reveals that it can't find org\apache\commons\logging\LogFactory
Apparently, when I specified:
options[0].optionString = "-Djava.class.path=c:\My Workspace\JNITest"
vm_args.options = options;
It does not append to my classpath environment variable, but instead overwrites it.
My solution was to list out every jar files I was using and append them to the optionString. Is there a better way to do it?
A new question: Is there a way to append to the CLASSPATH environment variable using the java.class.path? Or should/could I have use the classpath option instead of the -D option?The 'classpath' option won't be recognized by the Invocation API. To append to the CLASSPATH environment variable, you call call getenv("CLASSPATH") in your native code and use strncat() to concatenate it with your option string.

Similar Messages

  • How can speed up my java program ? native code compilation ?

    Hello everyone, I know that there are so many post related to compiling to native code.
    My situation is that I wrote a little program that gets executed upto 50 times per second. This program basically gets a set of parameters and after validating them, they get inserted into a SQL Server 2000 table.
    I need this program to be faster ?
    I was thinking of writting this again on c++ but I don't know how to do it and I must do it myself.
    Thanks for you time,
    Sincerly Fabian.

    When we get 1500 traps in one second, the CPU
    utilization gets overloaded and the server crashes.C++ will be slightly faster if you are truly CPU-bound, assembly will be faster still. However, at some point nothing will be able to keep up. So the real question is whether Java provides enough development-level support and cross-platform capability to justify its slightly slower performance.
    Some things to think about:
    1) Are you running multiple threads to process incoming messages? You might be better off buffering the messages and processing them on a single or pooled thread. If the message traffic is truly bursty, and you don't need real-time response (which is illusory anyway), this should reduce your load.
    2) To echo another poster, are you really invoking a program for each message? Can you run that operation within the same JVM? There's a significant cost for each program start, as well as for context switches.
    3) You mentioned that you're writing to a database. Can you batch the writes? Individual writes result in more network round-trips, as well as more context switches.

  • Can i run java applications in native code (JNI) using IBM J9

    Hi,
    If i use IBM J9 for windows mobile 5.0, can i call java in C applications using JNI. Does J9 have AWT native interface support to embed java GUI in native window.
    thanks and regards,
    Vishnu

    I am also interested in the answer to these questions.

  • An unexpected exception has been detected in native code outside the VM.

    I thought that my problem had been solved yesterday when I managed to run my application with out getting "An unexpected exception has been detected in native code outside the VM."
    I was told to uninstall "j2sdk1.4.1_02" and install my old version of 1.3.1 and then completely remove that (as i do not think i removed it correctly in the first place), then reinstall my new version again (j2sdk1.4.1_02). This appeared to work, and my application ran. However, today i planned to do more work on it and it errored again. I am getting the following error:
    C:\Documents and Settings\Mike Costen\Desktop\Mar27d>java ImageViewerFrame
    An unexpected exception has been detected in native code outside the VM.
    Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6D1C369C
    Function=Java_sun_awt_font_NativeFontWrapper_registerFonts+0x14BC
    Library=C:\j2sdk1.4.1_02\jre\bin\fontmanager.dll
    Current Java thread:
    at sun.awt.font.NativeFontWrapper.registerFonts(Native Method)
    - locked <06C15D48> (a java.lang.Class)
    at sun.java2d.SunGraphicsEnvironment.addPathFonts(SunGraphicsEnvironment.java:736)
    at sun.java2d.SunGraphicsEnvironment.registerFonts(SunGraphicsEnvironment.java:587)
    at sun.java2d.SunGraphicsEnvironment.access$100(SunGraphicsEnvironment.java:49)
    at sun.java2d.SunGraphicsEnvironment$2.run(SunGraphicsEnvironment.java:209)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:203)
    - locked <02F948A0> (a sun.awt.Win32GraphicsEnvironment)
    at sun.java2d.SunGraphicsEnvironment.mapFontName(SunGraphicsEnvironment.java:451)
    at java.awt.Font.initializeFont(Font.java:313)
    at java.awt.Font.<init>(Font.java:345)
    at sun.awt.windows.WDesktopProperties.setFontProperty(WDesktopProperties.java:148)
    - locked <02AE0000> (a sun.awt.windows.WDesktopProperties)
    at sun.awt.windows.WDesktopProperties.getWindowsParameters(Native Method)
    at sun.awt.windows.WDesktopProperties.<init>(WDesktopProperties.java:56)
    at sun.awt.windows.WToolkit.initializeDesktopProperties(WToolkit.java:865)
    at java.awt.Toolkit.getDesktopProperty(Toolkit.java:1533)
    - locked <02F92380> (a sun.awt.windows.WToolkit)
    at sun.awt.shell.ShellFolder.<clinit>(ShellFolder.java:171)
    at javax.swing.filechooser.FileSystemView.getRoots(FileSystemView.java:324)
    at javax.swing.filechooser.WindowsFileSystemView.getHomeDirectory(FileSystemView.java:625)
    at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(MetalFileChooserUI.java:213)
    at javax.swing.plaf.basic.BasicFileChooserUI.installUI(BasicFileChooserUI.java:130)
    at javax.swing.plaf.metal.MetalFileChooserUI.installUI(MetalFileChooserUI.java:152)
    at javax.swing.JComponent.setUI(JComponent.java:449)
    at javax.swing.JFileChooser.updateUI(JFileChooser.java:1700)
    at javax.swing.JFileChooser.setup(JFileChooser.java:345)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:320)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:273)
    at ImageViewerFrame.<init>(ImageViewerFrame.java:30)
    at ImageViewerFrame.main(ImageViewerFrame.java:227)
    Dynamic libraries:
    0x00400000 - 0x00406000 C:\j2sdk1.4.1_02\bin\java.exe
    0x77F50000 - 0x77FF7000 C:\WINDOWS\System32\ntdll.dll
    0x77E60000 - 0x77F46000 C:\WINDOWS\system32\kernel32.dll
    0x77DD0000 - 0x77E5D000 C:\WINDOWS\system32\ADVAPI32.dll
    0x78000000 - 0x7807F000 C:\WINDOWS\system32\RPCRT4.dll
    0x77C10000 - 0x77C63000 C:\WINDOWS\system32\MSVCRT.dll
    0x6D340000 - 0x6D46A000 C:\j2sdk1.4.1_02\jre\bin\client\jvm.dll
    0x77D40000 - 0x77DC6000 C:\WINDOWS\system32\USER32.dll
    0x77C70000 - 0x77CB0000 C:\WINDOWS\system32\GDI32.dll
    0x76B40000 - 0x76B6C000 C:\WINDOWS\System32\WINMM.dll
    0x6D1E0000 - 0x6D1E7000 C:\j2sdk1.4.1_02\jre\bin\hpi.dll
    0x6D310000 - 0x6D31E000 C:\j2sdk1.4.1_02\jre\bin\verify.dll
    0x6D220000 - 0x6D239000 C:\j2sdk1.4.1_02\jre\bin\java.dll
    0x6D330000 - 0x6D33D000 C:\j2sdk1.4.1_02\jre\bin\zip.dll
    0x6D000000 - 0x6D105000 C:\j2sdk1.4.1_02\jre\bin\awt.dll
    0x73000000 - 0x73023000 C:\WINDOWS\System32\WINSPOOL.DRV
    0x76390000 - 0x763AC000 C:\WINDOWS\System32\IMM32.dll
    0x771B0000 - 0x772D1000 C:\WINDOWS\system32\ole32.dll
    0x6D190000 - 0x6D1E0000 C:\j2sdk1.4.1_02\jre\bin\fontmanager.dll
    0x73760000 - 0x737A4000 C:\WINDOWS\System32\ddraw.dll
    0x73BC0000 - 0x73BC6000 C:\WINDOWS\System32\DCIMAN32.dll
    0x73940000 - 0x73A07000 C:\WINDOWS\System32\D3DIM700.DLL
    0x76C90000 - 0x76CB2000 C:\WINDOWS\system32\imagehlp.dll
    0x6D510000 - 0x6D58D000 C:\WINDOWS\system32\DBGHELP.dll
    0x77C00000 - 0x77C07000 C:\WINDOWS\system32\VERSION.dll
    0x76BF0000 - 0x76BFB000 C:\WINDOWS\System32\PSAPI.DLL
    Local Time = Mon Mar 31 08:59:02 2003
    Elapsed Time = 6
    # The exception above was detected in native code outside the VM
    # Java VM: Java HotSpot(TM) Client VM (1.4.1_02-b06 mixed mode)
    # An error report file has been saved as hs_err_pid584.log.
    # Please refer to the file for further information.
    C:\Documents and Settings\Mike Costen\Desktop\Mar27d>
    I am now not sure at all why my computer is doing this, as it worked yesterday...
    Any light shed on this matter is much appreciated.
    Thanks, Mike

    Welcome to native code hell! The reason we all use Java is because
    native code sucks. It is to be isolated and quarantined to the smallest
    area possible.
    File a TAR/SR. Maybe you just need a newer vesion of the OCI client
    libraries on your machine. Maybe they are out of sync with the native
    portion of the type-2 driver.
    Say why you went from type-4 to type-2. In my opinion, unless you have
    a very good reason, you should go back to the reliable java driver. Java
    can't kill a JVM.
    Good luck,
    Joe Weinstein at BEA Systems

  • How to run a simple shell comnd line on cygwin thru java class ?

    Hi
    I want to run a simple shell command "dir" on cygwin thru java class. My code is as follows :-
    public class CygJava {
         public static void main (String args[]){
              File workDir = new File("c:/cygwin/bin");
              try {
                   Runtime systemShell = Runtime.getRuntime();
                   Process shellOutput = systemShell.exec("dir", null, workDir);
                                                 InputStreamReader isr = new InputStreamReader(shellOutput.getInputStream());          
                   BufferedReader br = new BufferedReader (isr);
                   String line = null;
                   System.out.println("<OUTPUT>");
                   while((line = br.readLine()) != null ) {
                   System.out.println(line);
                   System.out.println("</OUTPUT>");
                   int exitVal = shellOutput.waitFor();
                   System.out.println("Process Exit Value : "+exitVal);
              }catch (IOException ioe) {
                   System.err.println(ioe);
              } catch (Throwable t) {
                   t.printStackTrace();
    On running this program , i get the error as :-
    java.io.IOException: CreateProcess: dir error=2
    Could anyone tell me as to why is this error occuring ?
    Thanks

    Hi guys,
    I am trying to launch a linux-environment application using cygwin from my java application.
    I already included the c:\cygwin path in the environment path of my computer, so if i run cygwin from windows console everything goes fine. But if i do the same from my java application, i get an error message:
    java.io.IOException: CreateProcess: cygwin error=2
         at java.lang.ProcessImpl.create(Native Method)
         at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
         at java.lang.ProcessImpl.start(ProcessImpl.java:30)
         at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
         at java.lang.Runtime.exec(Runtime.java:591)
         at java.lang.Runtime.exec(Runtime.java:429)
         at java.lang.Runtime.exec(Runtime.java:326)
         at prueba.Prueba.jButton1_actionPerformed(Prueba.java:94)
         at prueba.Prueba_jButton1_actionAdapter.actionPerformed(Prueba.java:151)
         at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
         at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
         at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
         at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
         at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
         at java.awt.Component.processMouseEvent(Component.java:5501)
         at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
         at java.awt.Component.processEvent(Component.java:5266)
         at java.awt.Container.processEvent(Container.java:1966)
         at java.awt.Component.dispatchEventImpl(Component.java:3968)
         at java.awt.Container.dispatchEventImpl(Container.java:2024)
         at java.awt.Component.dispatchEvent(Component.java:3803)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
         at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
         at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
         at java.awt.Container.dispatchEventImpl(Container.java:2010)
         at java.awt.Window.dispatchEventImpl(Window.java:1778)
         at java.awt.Component.dispatchEvent(Component.java:3803)
         at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
         at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)I will appreciate a lot some help :)
    Thankx

  • How to load a java class when application is at first time browsed.

    Hi
    How can i load a simple java class on application startup.
    For servlet it could be done using "load on startup" tag in web.xml
    but how could the same be achieved for a simple java class.
    Thanks

    Hi
    Code is given below....
    package com;
    import java.io.IOException;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class Test {
    Test()
         HttpServletRequest request=null;
         HttpServletResponse response=null;
         RequestDispatcher requestDispatcher = request.getRequestDispatcher("a.jsp");
         try {
              requestDispatcher.forward(request,response);
         } catch (ServletException e) {
              System.out.println("success");
              e.printStackTrace();
         } catch (IOException e) {
              System.out.println("success 1");
              e.printStackTrace();
         finally
              System.out.println("success 2");
         System.out.println("success 3");
    }Web.xml :
    <servlet>
            <servlet-name>simple</servlet-name>
            <servlet-class>com.Test</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
      <servlet-mapping>
          <servlet-name>simple</servlet-name>
          <url-pattern>/init.do</url-pattern>
        </servlet-mapping>Error Trace :
    org.apache.catalina.core.StandardContext loadOnStartup
    SEVERE: Servlet /DispatcherTest threw load() exception
    java.lang.IllegalAccessException: Class org.apache.catalina.core.StandardWrapper can not access a member of class com.Test with modifiers ""
         at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
         at java.lang.Class.newInstance0(Class.java:344)
         at java.lang.Class.newInstance(Class.java:303)
         at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
         at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
         at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3857)
         at org.apache.catalina.core.StandardContext.start(StandardContext.java:4118)
         at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1069)
         at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1162)
         at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
         at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
         at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1304)
         at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568)
         at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577)
         at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557)
         at java.lang.Thread.run(Thread.java:595)

  • How to create new java objects in native methods?

    Hello,
    Is it possible to create java objects and return the same to the java code from a native method?
    Also is it possible to pass java objects other than String objects (for example, Vector objects) as parameters to native methods and is it possible to return such objects back to the java code?
    If so how can I access those objects (say for example, accessing Vector elements) inside the native code?
    What should I do in order to achieve them?
    Regards,
    Satish

    bschauwe is correct in that constructing Java objects and calling methods on Java objects from native code is tough and takes some study. While you're at it, you might want to check out Jace, http://jace.reyelts.com/jace. It's a free open-source toolkit that really takes the nastiness out of doing this sort of stuff. For example,/**
    * A C++ function that takes a java.util.Vector and plays around with it.
    public void useVector( java::util::Vector& vector ) {
      // Print out all the contents of the vector
      for ( Iterator it = vector.iterator(); it.hasNext(); ) {
        cout << it.next();
      // Add some new elements to the vector
      vector.addElement( "Hello" );
      vector.addElement( "world" );
    } All this code just results in calls to standard JNI functions like FindClass, NewObject, GetMethodID, NewStringUTF, CallObjectMethod, etc...
    God bless,
    -Toby Reyelts

  • Jsp session variable to call in  java class.

    here i am facing a problem in calling a jsp session varibale to java class.
    in my code.. i have seperate files for jsp pages and packaged java classes.
    as i am developing a web tire application. the data entered in the front end i am getting to jsp page and putting the mandatory in session to use in other pages. now here the same session vaiable i have to use/call in java class file.
    Please refer me the best method and any references on this to call the session vaiable to java class file.
    in jsp page i decleared like this:
    session.setAttribute("stuIdentification",stuid);
    this id i have to use in java class.file.
    how to call it?
    Thanks
    Kurra

    Gimbal2's got the right idea.
    The reasons for choosing point 1) are also valid. Whenever possible try and do as much code that is not specifically tied to your business objects inside your dynamic element (the jsp page) instead of your static one (the compiled class)
    this allows you to very easily update your jsp to make any changes without having to recompile class code. Recompiling seems like a little thing when you are in development but imagine if the class is executed by a business critical application that faces forward to customers, recompiling will mean shutting down your servers and that may not be an option.
    Regards,
    David

  • How to use JAVA class in C++

    Hi people,
    is there anyone who knows how I can create and use JAVA class in C++ code. Example I have one JAVA class which works with database.
    One of the methods from this class returns XML string that represent result set. How to create instance of this class inside of C++ and have possibility to call this method.

    Hi, I'm also curious how to solve this.
    My problem is that I call a DLL from C++ that returns several values (e.g. function(a, b, c, &w, &x, &y, &z); )
    and I want to create a java class object that can be used to store these values so I can return 1 object
    Below I've written an abstract of the code
    Can someone help me with the parts in <> ??
    Thanks!
    Sander
    JNIEXPORT jobject JNICALL Java_nativeF(...a,b,c...)
       int w,x;
       float y,z;
       C_DLL_Function(a, b, c, &w, &x, &y, &z);
       //<Create Java Class 'Data' jobject>
       //<Call Data.setvalues(w,x,y,z) >
       return jobject;
    ...in java...
    class Data
      private int jw, jx;
      private float jy, jz;
      public function setvalues(int w, int x, float y, float z)
        jw = w;
        etc... 
    [\code]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • Audit and Standard Javadoc applied to all Jdeveloper project java classes

    Hi,
    I want to apply standard Javadoc to all the java classes I have written. Is there a quick way of doing it in 11.1.1.3
    I have already done the following but the code editor rules are not getting enforced.
    1) Go to 'Tools' and then choose 'Preferences
    2) Go to the 'Code Editor' and under it 'Java' and then 'Javadoc'
    3) Select all the tags like @author @version @param etc and modify the Tag properties to be required and then click OK
    4) Next I create a new Java class but the code editor rules are not enforced.
    Questions:
    a) How to enforce the code editor preferences?
    b) How to automatically generate the missing javadocs in the existing classes in Jdeveloper?
    c) How to audit and setup a coding standard, so that it's easier to monitor what everybody in the project does and adheres to the coding guidelines.
    Bottomline - Are these possible in JDeveloper 11.1.1.3
    Thanks

    Have a look at the JDeveloper code audit feature.
    Under tools->preferences->audit->profiles
    You can either modify or add a new profile and check the JavaDoc Comments rules.
    You can switch the Missing Comment rule to have a more serious severity.
    Then you can audit your file (or the complete project).
    In the audit window you'll see an option to automatically fix error that the Audit flagged - this can include adding the missing Javadoc.

  • Extending the oracle java classes for PJCs - Help!

    In developer6 (forms) - I am trying to create my own version of
    certain forms components, without much look.
    I have created an item in forms, ie. Checkbox, in the
    'Implementation Class' field I called my java class.
    My code 'extends VCheckbox' and I have created my own paint()
    mthoed.
    Whilst it does call and run my code there are several problems.
    Mainly being that I cannot change the size the component - I have
    seen the demo source code - and the examples of what I am trying
    to do are less than simple (read: less than useless).
    I dont not want a java bean. The forms help says I should be able
    to extend the above class okay - but doesnt say what limitations
    there are or what functionality there is in the oracle.forms.ui
    classes.
    Has anyone else actually achieved anything other than JavaBean
    components?
    null

    : Have you seen the RolloverButton example ?
    : It is under Forms documentation in TechNet
    : and is quite advanced.
    No, have search Dev6 manuals, can not find this by searching
    Technet either - can you specify (provide URL)?
    I am trying to re-implement the VCheckbox using Smoking/No
    Smoking images. I can create the images, but the toggling action
    does not work when the component size is greater than the
    original subclassed component.
    None of the examples show creating components of sizes that
    differ from the subclass.
    Surely I only need to override paint() method?
    Code fragment:
    import ....
    public class ImageToggler extends VCheckbox {
    // ... does initialisation of images ....
    // ... Images are 32x32 ...
    public void paint( Graphics g ) {
    if ( getState() == true ) {
    g.drawImage( ysSmoke.getImage(), 0, 0,
    ysSmoke.getIconWidth(),
    ysSmoke.getIconHeight(), this );
    } else {
    g.drawImage( noSmoke.getImage(), 0, 0,
    noSmoke.getIconWidth(),
    noSmoke.getIconHeight(), this );
    null

  • Calling java-class from c++ misses

    Hello,
    if I call a java-class from c++-code and the java-class imports a package (not java packages, but writen by myself), then the calling misses :-(
    If I call this class without the imports - it works!
    C++-Code:
        jclass cls = env->FindClass(javaClassname.c_str());
        if (cls == 0) {
              //error     - cls is 0 if the java-class has imports  
        }Java-Includes:
    import mypackage.Conn;
    import mypackage.Para; I set the classpath to the .jar-files. Did I forget anything else?
    Thx...

    Hello,
    if I call a java-class from c++-code and the
    java-class imports a package (not java packages, but
    writen by myself), then the calling misses :-(
    If I call this class without the imports - it works!
    C++-Code:
    jclass cls =
    env->FindClass(javaClassname.c_str());
    if (cls == 0) {
    /error     - cls is 0 if the java-class has imports
    code]
    Java-Includes:import mypackage.Conn;
    import mypackage.Para;
    I set the classpath to the .jar-files. Did I forget
    anything else?
    Thx...
    From the JNI Specification: http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html
    =======
    FindClass
    jclass FindClass(JNIEnv *env, const char *name);
    This function loads a locally-defined class. It searches the directories and zip files specified by the CLASSPATH environment
    variable for the class with the specified name.
    LINKAGE:
    Index 6 in the JNIEnv interface function table.
    PARAMETERS:
    env: the JNI interface pointer.
    name: a fully-qualified class name (that is, a package name, delimited by �/�, followed by the class name).
    If the name begins with �[� (the array signature character), it returns an array class.
    The string is encoded in modified UTF-8. ==============================
    So, to find the Conn class, you need to use:
    env->FindClass("mypackage/Conn");

  • How to run 64-bit native code with Java Web Start

    This question has probably been asked many times, but I couldn't find anything in my searches.
    How can I get Java Web Start on a Solaris client (Solaris 10 in this case, with JRE 1.5) to run a java application that includes a 64-bit native code library? The application downloads fine, including the jar file that has the native shared object, but when the native library is loaded by the java application, I get a "wrong ELF class: ELFCLASS64" error.
    I assume that is because Web Start is invoking the 32-bit java VM, which can't load a 64-bit library. I tried configuring Java Web Start to use the 64-bit VM (by setting the path to java to ".../jre/bin/sparcv9/java" in the javaws console) but then I get an error that says "Can't load library: .../jre/lib/sparcv9/libdeploy.so".
    Does Java Web Start support 64-bit native code, and if so, what do I need to do differently?
    Thanks.

    No it can't. On the Sun download page of the JRE it says that 64 Bit systems need to use the 32 Bit JRE to execute Plugins - this might be the same for Web Start apps.

  • The crash happened outside the java virtual machine in native code

    Hi,
    I have a biometric device with which I am given some C++ dlls. I am trying to call methods inside these using java (jna). I am loading the dll "zkemsdk.dll+" as follows:
    zkemkeeper INSTANCE1 = (zkemkeeper)Native.loadLibrary("zkemsdk", zkemkeeper.class);//zkemsdk is the dll, I am loading the dll here.
    Then, I am calling the function:
    zkemkeeper.INSTANCE1.Z_Connect_NETEX("ip address",4370);//Z_Connect_NETEX is a function inside zkemsdk.dll
    This returns me true or false based on whether am connected to the biometric device or not.Thus I am able to invoke this method without issues. But for other methods inside the dll, run time exception is thrown in console:
    Can someone help me resolve this issue. ??? Following is the content of the log file generated.
    # A fatal error has been detected by the Java Runtime Environment:
    # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0351fe3b, pid=1664, tid=3832
    # JRE version: 6.0_20-b02
    # Java VM: Java HotSpot(TM) Client VM (16.3-b01 mixed mode, sharing windows-x86 )
    # Problematic frame:
    # C [zkemsdk.dll+0xfe3b]
    # If you would like to submit a bug report, please visit:
    # http://www.java.net/external?url=http://java.sun.com/webapps/bugreport/crash.jsp
    # The crash happened outside the Java Virtual Machine in native code.
    # See problematic frame for where to report the bug.
    --------------- T H R E A D ---------------
    Current thread (0x003a9000): JavaThread "main" [_thread_in_native, id=3832, stack(0x008c0000,0x00910000)]
    siginfo: ExceptionCode=0xc0000005, reading address 0x00000106
    Registers:
    EAX=0x0090f7c4, EBX=0x00000001, ECX=0x00000000, EDX=0x00000001
    ESP=0x0090f7b4, EBP=0x0090f848, ESI=0x00000096, EDI=0x003a9000
    EIP=0x0351fe3b, EFLAGS=0x00010216
    Top of Stack: (sp=0x0090f7b4)
    0x0090f7b4: 00000000 0090f930 000003fc 00000103
    0x0090f7c4: 0090f800 6d9532d0 373e92a0 00912ec5
    0x0090f7d4: 00000401 0090f7d8 369860d1 0090f800
    0x0090f7e4: 37390050 00000000 37390f90 00000000
    0x0090f7f4: 0090f800 0090f930 003a9000 0090f830
    0x0090f804: 10008fd8 0090f840 0090f930 00000008
    0x0090f814: 0090f88c 0090fa28 0090f8f4 0090f848
    0x0090f824: eb53f637 0351ffdc 00000096 00000003
    Instructions: (pc=0x0351fe3b)
    0x0351fe2b: 0f 53 50 8d 44 24 18 50 e8 58 7c 00 00 83 c4 0c
    0x0351fe3b: 8b 4e 70 51 8b 0e 83 c3 04 53 6a 64 8d 54 24 18
    Stack: [0x008c0000,0x00910000], sp=0x0090f7b4, free space=13d0090f2e8k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C [zkemsdk.dll+0xfe3b]
    C [jna5972695927945545932.tmp+0x9182]
    C [jna5972695927945545932.tmp+0x2161]
    C [jna5972695927945545932.tmp+0x2849]
    j com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
    j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;+90
    j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+194
    j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+344
    j $Proxy0.Z_Beep(J)Z+19
    j com.rfarrays.bhabs.fingerPrint.main([Ljava/lang/String;)V+84
    v ~StubRoutines::call_stub
    V [jvm.dll+0xf049c]
    V [jvm.dll+0x17fcf1]
    V [jvm.dll+0xf051d]
    V [jvm.dll+0xf9bc5]
    V [jvm.dll+0x10181d]
    C [javaw.exe+0x2155]
    C [javaw.exe+0x8614]
    C [kernel32.dll+0xb729]
    Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
    j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;+90
    j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+194
    j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+344
    j $Proxy0.Z_Beep(J)Z+19
    j com.rfarrays.bhabs.fingerPrint.main([Ljava/lang/String;)V+84
    v ~StubRoutines::call_stub
    --------------- P R O C E S S ---------------
    Java Threads: ( => current thread )
    0x02b10c00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1976, stack(0x02dc0000,0x02e10000)]
    0x02b0a400 JavaThread "CompilerThread0" daemon [_thread_blocked, id=1280, stack(0x02d70000,0x02dc0000)]
    0x02b08c00 JavaThread "Attach Listener" daemon [_thread_blocked, id=1984, stack(0x02d20000,0x02d70000)]
    0x02b07800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2160, stack(0x02cd0000,0x02d20000)]
    0x02b02400 JavaThread "Finalizer" daemon [_thread_blocked, id=2052, stack(0x02c80000,0x02cd0000)]
    0x02afd800 JavaThread "Reference Handler" daemon [_thread_blocked, id=752, stack(0x02c30000,0x02c80000)]
    =>0x003a9000 JavaThread "main" [_thread_in_native, id=3832, stack(0x008c0000,0x00910000)]
    Other Threads:
    0x02afc400 VMThread [stack: 0x02be0000,0x02c30000] [id=1504]
    0x02b1b800 WatcherThread [stack: 0x02e10000,0x02e60000] [id=1980]
    VM state:not at safepoint (normal execution)
    VM Mutex/Monitor currently owned by a thread: None
    Heap
    def new generation total 4928K, used 2455K [0x22970000, 0x22ec0000, 0x27ec0000)
    eden space 4416K, 55% used [0x22970000, 0x22bd5db0, 0x22dc0000)
    from space 512K, 0% used [0x22dc0000, 0x22dc0000, 0x22e40000)
    to space 512K, 0% used [0x22e40000, 0x22e40000, 0x22ec0000)
    tenured generation total 10944K, used 0K [0x27ec0000, 0x28970000, 0x32970000)
    the space 10944K, 0% used [0x27ec0000, 0x27ec0000, 0x27ec0200, 0x28970000)
    compacting perm gen total 12288K, used 343K [0x32970000, 0x33570000, 0x36970000)
    the space 12288K, 2% used [0x32970000, 0x329c5f20, 0x329c6000, 0x33570000)
    ro space 10240K, 51% used [0x36970000, 0x36e9ae00, 0x36e9ae00, 0x37370000)
    rw space 12288K, 54% used [0x37370000, 0x37a072d8, 0x37a07400, 0x37f70000)
    Dynamic libraries:
    0x00400000 - 0x00424000 C:\Program Files\Java\jre6\bin\javaw.exe
    0x7c900000 - 0x7c9b2000 C:\WINDOWS\system32\ntdll.dll
    0x7c800000 - 0x7c8f6000 C:\WINDOWS\system32\kernel32.dll
    0x77dd0000 - 0x77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
    0x77e70000 - 0x77f03000 C:\WINDOWS\system32\RPCRT4.dll
    0x77fe0000 - 0x77ff1000 C:\WINDOWS\system32\Secur32.dll
    0x7e410000 - 0x7e4a1000 C:\WINDOWS\system32\USER32.dll
    0x77f10000 - 0x77f59000 C:\WINDOWS\system32\GDI32.dll
    0x76390000 - 0x763ad000 C:\WINDOWS\system32\IMM32.DLL
    0x7c340000 - 0x7c396000 C:\Program Files\Java\jre6\bin\msvcr71.dll
    0x6d800000 - 0x6da97000 C:\Program Files\Java\jre6\bin\client\jvm.dll
    0x76b40000 - 0x76b6d000 C:\WINDOWS\system32\WINMM.dll
    0x6d7b0000 - 0x6d7bc000 C:\Program Files\Java\jre6\bin\verify.dll
    0x6d330000 - 0x6d34f000 C:\Program Files\Java\jre6\bin\java.dll
    0x6d290000 - 0x6d298000 C:\Program Files\Java\jre6\bin\hpi.dll
    0x76bf0000 - 0x76bfb000 C:\WINDOWS\system32\PSAPI.DLL
    0x6d7f0000 - 0x6d7ff000 C:\Program Files\Java\jre6\bin\zip.dll
    0x68000000 - 0x68036000 C:\WINDOWS\system32\rsaenh.dll
    0x77c10000 - 0x77c68000 C:\WINDOWS\system32\msvcrt.dll
    0x769c0000 - 0x76a74000 C:\WINDOWS\system32\USERENV.dll
    0x5b860000 - 0x5b8b5000 C:\WINDOWS\system32\netapi32.dll
    0x6d610000 - 0x6d623000 C:\Program Files\Java\jre6\bin\net.dll
    0x71ab0000 - 0x71ac7000 C:\WINDOWS\system32\WS2_32.dll
    0x71aa0000 - 0x71aa8000 C:\WINDOWS\system32\WS2HELP.dll
    0x71a50000 - 0x71a8f000 C:\WINDOWS\System32\mswsock.dll
    0x76f20000 - 0x76f47000 C:\WINDOWS\system32\DNSAPI.dll
    0x76d60000 - 0x76d79000 C:\WINDOWS\system32\iphlpapi.dll
    0x76fb0000 - 0x76fb8000 C:\WINDOWS\System32\winrnr.dll
    0x76f60000 - 0x76f8c000 C:\WINDOWS\system32\WLDAP32.dll
    0x76fc0000 - 0x76fc6000 C:\WINDOWS\system32\rasadhlp.dll
    0x10000000 - 0x10052000 C:\Documents and Settings\bkonwar\Local Settings\Temp\jna5972695927945545932.tmp
    0x03510000 - 0x03546000 C:\WINDOWS\system32\zkemsdk.dll
    0x03560000 - 0x03574000 C:\WINDOWS\system32\commpro.dll
    0x662b0000 - 0x66308000 C:\WINDOWS\system32\hnetcfg.dll
    0x71a90000 - 0x71a98000 C:\WINDOWS\System32\wshtcpip.dll
    VM Arguments:
    jvm_args: -Dfile.encoding=Cp1252
    java_command: com.xyz.bhabs.fingerPrint
    Launcher Type: SUN_STANDARD
    Environment Variables:
    PATH=C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;;C:\Program Files\Java\jre1.6.0_07\bin;C:\Program Files\Android\android-sdk-windows\tools;C:\Program Files\TortoiseSVN\bin
    USERNAME=BKonwar
    OS=Windows_NT
    PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 13, GenuineIntel
    --------------- S Y S T E M ---------------
    OS: Windows XP Build 2600 Service Pack 3
    CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 15 stepping 13, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3
    Memory: 4k page, physical 2085780k(1286036k free), swap 4024188k(3249652k free)
    vm_info: Java HotSpot(TM) Client VM (16.3-b01) for windows-x86 JRE (1.6.0_20-b02), built on Apr 12 2010 13:52:23 by "java_re" with MS VC++ 7.1 (VS2003)
    time: Wed May 25 10:02:24 2011
    elapsed time: 21 seconds
    Regards,
    Bhabs
    Edited by: 861222 on May 25, 2011 12:19 AM

    861222 wrote:
    # A fatal error has been detected by the Java Runtime Environment:
    # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0351fe3b, pid=1664, tid=3832Not much to tell here. This line here looks suspiciously like a null-pointer error happening in the native code. It is impossible to say how, where and why. Go back to your code and start debugging I'd say, see where invalid data can be passed to the native code.

  • Setting native code from a class of a class passed in...

    I hope this makes sense, and its probably a stupid question but here it goes.
    I have a native function that takes in a java class. I can call the getters of this class from the native code to get values to fill out my c structure just fine, but conceptually I am not 100% how to call the getters of a class that is part of the other class I passed in. Basically i have something like this:
    the java call to the native being:
    public native void setJSource(JSource theSource);
    JNIEXPORT void JNICALL Java_AbfaRegion_setJSource
      (JNIEnv *env, jobject thisObj, jobject someVarsObj)
              jclass clazz;
              jmethodID mid;
              jint val;
              clazz = (*env)->GetObjectClass(env,someVarsObj);
              mid = (*env)->GetMethodID(env,clazz, "GetHeight", "I");
              val = (*env)->CallIntMethod(env,someVarsObj, mid);
              //put val into my struct
              mid = (*env)->GetMethodID(env,clazz, "GetWidth", "I");
              val=(*env)->CallIntMethod(env,someVarsObj, mid);
              //put val into my struct
    }I know how to do this...but what if I had a class say:
    class myClass
        JSource theSource; //has its own getters and setters like GetHeight
        int someVal;
        double anotherVal;
        public native void setMyClass(myClass theClass)
        int GetSomeVal()
          return this.someVal;
        int GetAnotherVal()
          return this.anotherVal;
        void SetSomeVal(int iSomeVal) 
          this.someVal=iSomeVal;
        void SetAnotherVal(double dAnotherVal)
          this.anotherVal=dAnotherVal;
    }and then suppose in the native setMyClass I would like to get the height of the jsource of myclass, how can i do that in native code, do I have to use findclass or something?
    Thanks for any help here, sorry if its a dumb question..
    -Shane

    For any class whose methods you are going to call, you need to first get a reference to the "class" record. So if you have an outer class, and have looked up its class record, and called a getter, and been returned an object (phew!):
    You need to now look up the class for the inner object; you can then look up the the methods and call them.
    JNI supports two ways to look up class:
    FindClass, where the key argument is the fully-qualified class name.
    GetObjectClass, where the key argument is an object reference.

Maybe you are looking for