I have a Java web application that uses tomcat 7 and that calls a JNI dll to decrypt some data using Openssl EVP.
When running on windows XP all works fine, but when I try to run it in windows 7 it crashes.
the tomcat stdout.log :
2013-07-07 14:23:33 Commons Daemon procrun stdout initialized
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77b42b79, pid=3576, tid=1528
#
# JRE version: 6.0_18-b07
# Java VM: Java HotSpot(TM) Client VM (16.0-b13 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x52b79]
#
# An error report file with more information is saved as:
# C:\Windows\system32\hs_err_pid3576.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
applicationContext.xml]
[2013-07-07 14:23:52,025] INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from ServletContext resource [/WEB-INF/conf/spring/applicationContext-dataSource.xml]
[2013-07-07 14:23:52,119] INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from ServletContext resource [/WEB-INF/conf/spring/applicationContext-manageable.xml]
[2013-07-07 14:23:52,228] INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from ServletContext resource [/WEB-INF/conf/spring/applicationContext-security.xml]
[2013-07-07 14:23:52,930] INFO [org.springframework.security.core.SpringSecurityCoreVersion] - You are running with Spring Security Core 3.0.5.RELEASE
[2013-07-07 14:23:52,930] INFO [org.springframework.security.config.SecurityNamespaceHandler] - Spring Security 'config' module version is 3.0.5.RELEASE
[2013-07-07 14:23:53,148] INFO [org.springframework.security.config.http.HttpSecurityBeanDefinitionParser] - ncyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 1800, <org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0>, order = 1900]
the file C:\Windows\system32\hs_err_pid3576.log indicates that the function called from the jni dll is the source of error :
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77b42b79, pid=3576, tid=1528
#
# JRE version: 6.0_18-b07
# Java VM: Java HotSpot(TM) Client VM (16.0-b13 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x52b79]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x039ab000): JavaThread "Thread-2" daemon [_thread_in_vm, id=1528, stack(0x03bf0000,0x03c60000)]
....
Stack: [0x03bf0000,0x03c60000], sp=0x03c5e74c, free space=1b903c5e268k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [ntdll.dll+0x52b79]
C [ntdll.dll+0x52e7d]
C [ntdll.dll+0x52d68]
C [kernel32.dll+0x4f1ac]
C [MSVCR71.dll+0x218a]
V [jvm.dll+0x105036]
C [myDLL.dll+0x1910]
j myApp.d([B)[B+0
j myApp.dec([B)[B+2
j org.apache.catalina.h.WebappsClassLoader.findClassInternal(Ljava/lang/String;)Ljava/lang/Class;+425
j org.apache.catalina.loader.WebappClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class;+301
j org.apache.catalina.h.WebappsClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class;+451
j org.apache.catalina.h.WebappsClassLoader.loadClass(Ljava/lang/String;)Ljava/lang/Class;+3
j org.springframework.util.ClassUtils.forName(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;+177
j org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(Ljava/lang/ClassLoader;)Ljava/lang/Class;+13
j org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(Lorg/springframework/beans/factory/support/RootBeanDefinition;[Ljava/lang/Class;)Ljava/lang/Class;+96
j org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(Lorg/springframework/beans/factory/support/RootBeanDefinition;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/Class;+42
j org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(Ljava/lang/String;Lorg/springframework/beans/factory/support/RootBeanDefinition;[Ljava/lang/Class;)Ljava/lang/Class;+23
j org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(Ljava/lang/String;Lorg/springframework/beans/factory/support/RootBeanDefinition;)Z+13
j org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(Ljava/lang/Class;ZZ)[Ljava/lang/String;+105
j org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(Ljava/lang/Class;ZZ)Ljava/util/Map;+4
j org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(Lorg/springframework/beans/factory/config/ConfigurableListableBeanFactory;)V+126
j org.springframework.context.support.AbstractApplicationContext.refresh()V+28
j org.springframework.web.context.ContextLoader.createWebApplicationContext(Ljavax/servlet/ServletContext;Lorg/springframework/context/ApplicationContext;)Lorg/springframework/web/context/WebApplicationContext;+245
j org.springframework.web.context.ContextLoader.initWebApplicationContext(Ljavax/servlet/ServletContext;)Lorg/springframework/web/context/WebApplicationContext;+69
j org.springframework.web.context.ContextLoaderListener.contextInitialized(Ljavax/servlet/ServletContextEvent;)V+28
j org.apache.catalina.core.StandardContext.listenerStart()Z+523
j org.apache.catalina.core.StandardContext$1.call()Ljava/lang/Boolean;+12
j org.apache.catalina.core.StandardContext$1.call()Ljava/lang/Object;+1
j java.util.concurrent.FutureTask$Sync.innerRun()V+30
j java.util.concurrent.FutureTask.run()V+4
j java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Ljava/lang/Runnable;)V+59
j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+28
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
V [jvm.dll+0xf072c]
V [jvm.dll+0x17fd51]
V [jvm.dll+0xf08f7]
V [jvm.dll+0xf096d]
V [jvm.dll+0x11a4c0]
V [jvm.dll+0x1dd924]
V [jvm.dll+0x17f9cc]
C [MSVCR71.dll+0x9565]
C [kernel32.dll+0x51174]
C [ntdll.dll+0x5b3f5]
C [ntdll.dll+0x5b3c8]
....
--------------- S Y S T E M ---------------
OS: Windows 7 Build 7600
CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1
Memory: 4k page, physical 2056808k(1150444k free), swap 4113616k(2684008k free)
vm_info: Java HotSpot(TM) Client VM (16.0-b13) for windows-x86 JRE (1.6.0_18-b07), built on Dec 17 2009 13:35:55 by "java_re" with MS VC++ 7.1 (VS2003)
time: Sun Jul 07 14:23:53 2013
elapsed time: 19 seconds
The jni dll name is : myDLL.dll
and the function is : myApp.d()
Here is the myApp.d() function in the c program that generates the dll :
JNIEXPORT jbyteArray JNICALL Java_myApp_d(JNIEnv *env, jobject obj, jbyteArray b)
{
EVP_CIPHER_CTX en, de;
// get length of bytes
int srcLen=(*env)->GetArrayLength(env, b);
//convert jbyteArray to byte []
jbyte data[srcLen];
(*env)->GetByteArrayRegion(env, b, 0, srcLen, data);
(*env)->ReleaseByteArrayElements(env, b, data , 0);
unsigned int salt[] = {12345, 54321};
unsigned char key_data[16]={ 'A','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
int key_data_len = 16;
if (aes_init(key_data, key_data_len, (unsigned char *)&salt, &en, &de))
{
printf("Couldn't initialize AES cipher\n");
return -1;
}
unsigned char* indata=(unsigned char*)data;
char *plaintext;
int olen, len;
int j;
char tampon[16];
for(j=0; j<16; j++)
{
tampon[j]=indata[j];
}
int desLen;
sscanf(tampon,"%d",&desLen);
unsigned char indataB[srcLen-16];
for(j=0; j<srcLen-16; j++)
{
indataB[j]=indata[16+j];
}
olen = len = srcLen-16+1;
plaintext = (char *)aes_decrypt(&de, indataB, &len);
jbyteArray bArray = (*env)->NewByteArray(env, desLen);
jboolean isCopy = JNI_TRUE;
jbyte* decrypteddata = (jbyte *)(*env)->GetByteArrayElements(env, bArray, &isCopy);
memcpy(decrypteddata, plaintext, desLen);
(*env)->ReleaseByteArrayElements(env, bArray, decrypteddata, 0);
free(plaintext);
free(decrypteddata);
EVP_CIPHER_CTX_cleanup(&en);
EVP_CIPHER_CTX_cleanup(&de);
return bArray;
(*env)->DeleteLocalRef(env, bArray );
}
This function uses these tow functions:
int aes_init(unsigned char *key_data, int key_data_len, unsigned char *salt, EVP_CIPHER_CTX *e_ctx,
EVP_CIPHER_CTX *d_ctx)
{
int i, nrounds = 5;
unsigned char key[16], iv[16];
/*
* Gen key & IV for AES 128 CBC mode. A SHA1 digest is used to hash the supplied key material.
* nrounds is the number of times the we hash the material. More rounds are more secure but
* slower.
*/
i = EVP_BytesToKey(EVP_aes_128_cbc(), EVP_sha1(), salt, key_data, key_data_len, nrounds, key, iv);
if (i != 16)
{
printf("Key size is %d bits - should be 128 bits\n", i);
return -1;
}
EVP_CIPHER_CTX_init(e_ctx);
EVP_EncryptInit_ex(e_ctx, EVP_aes_128_cbc(), NULL, key, iv);
EVP_CIPHER_CTX_init(d_ctx);
EVP_DecryptInit_ex(d_ctx, EVP_aes_128_cbc(), NULL, key, iv);
return 0;
}
unsigned char *aes_decrypt(EVP_CIPHER_CTX *e, unsigned char *ciphertext, int *len)
{
/* because we have padding ON, we must allocate an extra cipher block size of memory */
int p_len = *len, f_len = 0;
unsigned char *plaintext = malloc(p_len + AES_BLOCK_SIZE+1);
EVP_DecryptInit_ex(e, NULL, NULL, NULL, NULL);
EVP_DecryptUpdate(e, plaintext, &p_len, ciphertext, *len);
EVP_DecryptFinal_ex(e, plaintext+p_len, &f_len);
*len = p_len + f_len;
return plaintext;
}
I'm suspecting the this portion that permits to copy data from char* to jbytearray :
jbyte* decrypteddata = (jbyte *)(*env)->GetByteArrayElements(env, bArray, &isCopy);
memcpy(decrypteddata, plaintext, desLen);
(*env)->ReleaseByteArrayElements(env, bArray, decrypteddata, 0);
I tried to replace GetByteArrayElements by GetPrimitiveArrayCritical and ReleaseByteArrayElements by ReleasePrimitiveArrayCritical with no success.
[SOLVED]
As I supposed in my question, the problem was caused by the call to those tow JNI functions :
(*env)->GetByteArrayRegion(env, b, 0, srcLen, data);
(*env)->ReleaseByteArrayElements(env, b, data , 0);
I replaced them with :
jbyte* d = (*env)->GetByteArrayElements(env, b, &isCopyS);
int i;
for(i = 0; i < srcLen; i++)
{
data[i] = d[i];
}
(*env)->ReleaseByteArrayElements(env, b, d, JNI_ABORT);
Now It works both in Windows XP and Windows 7.
Related
When I run the TSP algorithm I get a fatal error on the native or-tools library.
There is a small chance to execute the TSP algo with success when running it only one time, but for consecutive executions without a big interval between them, it always happens.
I'm currently running it on Windows 10, but it tested it on Debian and Alpine and the problem still happens.
Here is a preview, but you can see the full log here (each time I get this error the problematic frame is different).
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000002a9e261c007, pid=12012, tid=9116
#
# JRE version: OpenJDK Runtime Environment (14.0.1+7) (build 14.0.1+7)
# Java VM: OpenJDK 64-Bit Server VM (14.0.1+7, mixed mode, sharing, tiered, compressed oops, g1 gc, windows-amd64)
# Problematic frame:
# J 10298 c2 org.neo4j.kernel.impl.store.LongerShortString.decode([JII)Lorg/neo4j/values/storable/TextValue; (120 bytes) # 0x000002a9e261c007 [0x000002a9e261bb80+0x0000000000000487]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\hugo_\Workspace\Itini\Backend\service-itinerary-builder\hs_err_pid12012.log
Compiled method (c2) 124037 10298 4 org.neo4j.kernel.impl.store.LongerShortString::decode (120 bytes)
total in heap [0x000002a9e261b910,0x000002a9e261cc48] = 4920
relocation [0x000002a9e261ba70,0x000002a9e261bb70] = 256
main code [0x000002a9e261bb80,0x000002a9e261c6e0] = 2912
stub code [0x000002a9e261c6e0,0x000002a9e261c6f8] = 24
oops [0x000002a9e261c6f8,0x000002a9e261c708] = 16
metadata [0x000002a9e261c708,0x000002a9e261c770] = 104
scopes data [0x000002a9e261c770,0x000002a9e261ca40] = 720
scopes pcs [0x000002a9e261ca40,0x000002a9e261cb90] = 336
dependencies [0x000002a9e261cb90,0x000002a9e261cb98] = 8
handler table [0x000002a9e261cb98,0x000002a9e261cc28] = 144
nul chk table [0x000002a9e261cc28,0x000002a9e261cc48] = 32
Compiled method (c2) 124056 12326 4 org.neo4j.kernel.impl.newapi.DefaultPropertyCursor::propertyValue (38 bytes)
total in heap [0x000002a9e2cb7410,0x000002a9e2cb88f8] = 5352
relocation [0x000002a9e2cb7570,0x000002a9e2cb7750] = 480
main code [0x000002a9e2cb7760,0x000002a9e2cb8280] = 2848
stub code [0x000002a9e2cb8280,0x000002a9e2cb82c8] = 72
oops [0x000002a9e2cb82c8,0x000002a9e2cb82d8] = 16
metadata [0x000002a9e2cb82d8,0x000002a9e2cb8398] = 192
scopes data [0x000002a9e2cb8398,0x000002a9e2cb8618] = 640
scopes pcs [0x000002a9e2cb8618,0x000002a9e2cb8828] = 528
dependencies [0x000002a9e2cb8828,0x000002a9e2cb8838] = 16
handler table [0x000002a9e2cb8838,0x000002a9e2cb88c8] = 144
nul chk table [0x000002a9e2cb88c8,0x000002a9e2cb88f8] = 48
Java code:
public List<AlgoNode> solve(final Collection<AlgoNode> nodes, final AlgoNode start) {
if (nodes == null || nodes.isEmpty())
return new ArrayList<>();
if (nodes.size() == 1)
return new ArrayList<>(nodes);
// Setup Variables
var list = new ArrayList<>(nodes);
var depot = start == null ? 0 : list.indexOf(start);
var manager = new RoutingIndexManager(list.size(), 1, depot);
var routing = new RoutingModel(manager);
// Define dummy weight function
var transitCallbackIndex = routing.registerTransitCallback((fromIndex, toIndex) -> 1L);
routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
// Solve
var parameters = main.defaultRoutingSearchParameters().toBuilder();
parameters.setFirstSolutionStrategy(FirstSolutionStrategy.Value.PATH_CHEAPEST_ARC);
var solution = routing.solveWithParameters(parameters.build()); // Problematic line
return new ArrayList<>(); // Dummy return
}
I also tryied making the method syncronized, using a lock and calling closeModel() after running the TSP, but no lucky.
seems related to https://github.com/google/or-tools/issues/2091
Please, don't hesitate to open a github issue with all this information...
I have installed Repast on my windows 10 computer, but if I try to run one of the demo codes I get an error.
Error loading EGL entry points.
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000000000000, pid=22096, tid=21896
JRE version: OpenJDK Runtime Environment (11.0.4+11) (build 11.0.4+11)
Java VM: OpenJDK 64-Bit Server VM (11.0.4+11, mixed mode, tiered, compressed oops, g1 gc, windows-amd64)
Problematic frame:
C 0x0000000000000000
No core dump will be written. Minidumps are not enabled by default on client versions of Windows
An error report file with more information is saved as:
C:\Surfdrive\Models_and_Scripts\Repast\Zombies_Demo\hs_err_pid22096.log
If you would like to submit a bug report, please visit:
https://github.com/AdoptOpenJDK/openjdk-build/issues
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.
I have tried to run Repast as administrator and set javaw.exe in to run as adminstrator, but that does not solve the problem.
This is the THREAD in the error log file (complete file is too long):
--------------- T H R E A D ---------------
Current thread (0x000001a735b13800): JavaThread "AWT-EventQueue-0" [_thread_in_native, id=21896, stack(0x000000427a300000,0x000000427a400000)]
Stack: [0x000000427a300000,0x000000427a400000], sp=0x000000427a3f7cd8, free space=991k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j jogamp.opengl.egl.EGL.dispatch_eglGetProcAddress0(Ljava/lang/String;J)J+0
j jogamp.opengl.egl.EGL.eglGetProcAddress(JLjava/lang/String;)J+18
j jogamp.opengl.egl.EGLDynamicLibraryBundleInfo.toolGetProcAddress(JLjava/lang/String;)J+2
j com.jogamp.common.os.DynamicLibraryBundle.toolDynamicLookupFunction(Ljava/lang/String;)J+18
j com.jogamp.common.os.DynamicLibraryBundle.dynamicLookupFunction(Ljava/lang/String;)J+94
j com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver.resolve(Ljava/lang/String;Lcom/jogamp/common/os/DynamicLookupHelper;)J+35
j com.jogamp.gluegen.runtime.ProcAddressTable.setEntry(Ljava/lang/reflect/Field;Ljava/lang/String;Lcom/jogamp/common/os/DynamicLookupHelper;)V+30
j com.jogamp.gluegen.runtime.ProcAddressTable.reset(Lcom/jogamp/common/os/DynamicLookupHelper;)V+129
j jogamp.opengl.egl.EGL.resetProcAddressTable(Lcom/jogamp/common/os/DynamicLookupHelper;)V+4
j jogamp.opengl.egl.EGLDrawableFactory.<init>()V+294
v ~StubRoutines::call_stub
J 2507 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Ljava/lang/Object; java.base#11.0.4 (0 bytes) # 0x000001a72565a326 [0x000001a72565a2c0+0x0000000000000066]
J 2506 c1 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance([Ljava/lang/Object;)Ljava/lang/Object; java.base#11.0.4 (89 bytes) # 0x000001a71e12d6bc [0x000001a71e12cb40+0x0000000000000b7c]
J 2453 c1 jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance([Ljava/lang/Object;)Ljava/lang/Object; java.base#11.0.4 (9 bytes) # 0x000001a71e0d7edc [0x000001a71e0d7de0+0x00000000000000fc]
J 2452 c1 java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object; java.base#11.0.4 (76 bytes) # 0x000001a71e0e1404 [0x000001a71e0e11a0+0x0000000000000264]
j com.jogamp.common.util.ReflectionUtil.createInstance(Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Ljava/lang/Object;+2
j com.jogamp.common.util.ReflectionUtil.createInstance(Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;+6
j com.jogamp.common.util.ReflectionUtil.createInstance(Ljava/lang/String;[Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/ClassLoader;)Ljava/lang/Object;+8
j com.jogamp.common.util.ReflectionUtil.createInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Object;+4
j javax.media.opengl.GLDrawableFactory.initSingletonImpl()V+263
j javax.media.opengl.GLDrawableFactory.initSingleton()V+21
j javax.media.opengl.GLProfile.initProfilesForDefaultDevices()V+107
j javax.media.opengl.GLProfile.access$000()V+0
j javax.media.opengl.GLProfile$1.run()Ljava/lang/Object;+58
v ~StubRoutines::call_stub
J 1304 java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; java.base#11.0.4 (0 bytes) # 0x000001a72568b392 [0x000001a72568b340+0x0000000000000052]
j javax.media.opengl.GLProfile.initSingleton()V+75
j javax.media.opengl.GLProfile.getProfileMap(Ljavax/media/nativewindow/AbstractGraphicsDevice;Z)Ljava/util/HashMap;+0
j javax.media.opengl.GLProfile.get(Ljavax/media/nativewindow/AbstractGraphicsDevice;Ljava/lang/String;)Ljavax/media/opengl/GLProfile;+16
j javax.media.opengl.GLProfile.get(Ljava/lang/String;)Ljavax/media/opengl/GLProfile;+4
j saf.v3d.Canvas2D.<init>()V+69
j repast.simphony.visualizationOGL2D.DisplayOGL2D.<init>(Lrepast/simphony/visualization/DisplayData;Lrepast/simphony/visualization/Layout;)V+106
j repast.simphony.visualization.engine.DisplayCreatorOGL2D.createDisplay()Lrepast/simphony/visualization/IDisplay;+65
j repast.simphony.visualization.engine.DisplayProducer.createDisplay()Lrepast/simphony/visualization/IDisplay;+35
j repast.simphony.visualization.engine.DisplayComponentControllerAction.runInitialize(Lrepast/simphony/engine/environment/RunState;Ljava/lang/Object;Lrepast/simphony/parameter/Parameters;)V+304
j repast.simphony.engine.controller.DefaultController$3.visit(Lrepast/simphony/engine/environment/ControllerAction;)V+18
j repast.simphony.engine.controller.DefaultController$3.visit(Ljava/lang/Object;)V+5
j repast.simphony.util.collections.NaryTree.preOrderTraverals(Lrepast/simphony/util/collections/NaryTree$Node;Lrepast/simphony/util/collections/TreeVisitor;)V+5
j repast.simphony.util.collections.NaryTree.preOrderTraverals(Lrepast/simphony/util/collections/NaryTree$Node;Lrepast/simphony/util/collections/TreeVisitor;)V+45
j repast.simphony.util.collections.NaryTree.preOrderTraverals(Lrepast/simphony/util/collections/NaryTree$Node;Lrepast/simphony/util/collections/TreeVisitor;)V+45
j repast.simphony.util.collections.NaryTree.preOrderTraversal(Lrepast/simphony/util/collections/TreeVisitor;)V+6
j repast.simphony.engine.controller.DefaultController.runInitialize(Lrepast/simphony/engine/environment/RunState;Lrepast/simphony/context/Context;Lrepast/simphony/parameter/Parameters;)V+101
j repast.simphony.engine.controller.DefaultController.runInitialize(Lrepast/simphony/parameter/Parameters;)Lrepast/simphony/engine/environment/RunState;+111
j repast.simphony.ui.RSApplication.initSim()V+44
j repast.simphony.ui.action.InitRun.actionPerformed(Ljava/awt/event/ActionEvent;)V+10
j javax.swing.AbstractButton.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+83 java.desktop#11.0.4
j javax.swing.AbstractButton$Handler.actionPerformed(Ljava/awt/event/ActionEvent;)V+5 java.desktop#11.0.4
j javax.swing.DefaultButtonModel.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+34 java.desktop#11.0.4
j javax.swing.DefaultButtonModel.setPressed(Z)V+117 java.desktop#11.0.4
j javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Ljava/awt/event/MouseEvent;)V+35 java.desktop#11.0.4
j java.awt.AWTEventMulticaster.mouseReleased(Ljava/awt/event/MouseEvent;)V+8 java.desktop#11.0.4
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+64 java.desktop#11.0.4
j javax.swing.JComponent.processMouseEvent(Ljava/awt/event/MouseEvent;)V+23 java.desktop#11.0.4
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81 java.desktop#11.0.4
J 4777 c1 java.awt.Container.processEvent(Ljava/awt/AWTEvent;)V java.desktop#11.0.4 (22 bytes) # 0x000001a71ea43a24 [0x000001a71ea43700+0x0000000000000324]
J 4654 c1 java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop#11.0.4 (777 bytes) # 0x000001a71e9fd454 [0x000001a71e9f9840+0x0000000000003c14]
J 4653 c1 java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop#11.0.4 (129 bytes) # 0x000001a71e9f839c [0x000001a71e9f8260+0x000000000000013c]
J 4631 c1 java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V java.desktop#11.0.4 (6 bytes) # 0x000001a71e9e5f34 [0x000001a71e9e5e40+0x00000000000000f4]
j java.awt.LightweightDispatcher.retargetMouseEvent(Ljava/awt/Component;ILjava/awt/event/MouseEvent;)V+349 java.desktop#11.0.4
j java.awt.LightweightDispatcher.processMouseEvent(Ljava/awt/event/MouseEvent;)Z+155 java.desktop#11.0.4
j java.awt.LightweightDispatcher.dispatchEvent(Ljava/awt/AWTEvent;)Z+50 java.desktop#11.0.4
J 4653 c1 java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop#11.0.4 (129 bytes) # 0x000001a71e9f833c [0x000001a71e9f8260+0x00000000000000dc]
j java.awt.Window.dispatchEventImpl(Ljava/awt/AWTEvent;)V+19 java.desktop#11.0.4
J 4741 c1 java.awt.EventQueue.dispatchEventImpl(Ljava/awt/AWTEvent;Ljava/lang/Object;)V java.desktop#11.0.4 (136 bytes) # 0x000001a71ea2c454 [0x000001a71ea2bfc0+0x0000000000000494]
J 4740 c1 java.awt.EventQueue$4.run()Ljava/lang/Void; java.desktop#11.0.4 (60 bytes) # 0x000001a71ea2b82c [0x000001a71ea2b700+0x000000000000012c]
J 4739 c1 java.awt.EventQueue$4.run()Ljava/lang/Object; java.desktop#11.0.4 (5 bytes) # 0x000001a71ea2b344 [0x000001a71ea2b2c0+0x0000000000000084]
v ~StubRoutines::call_stub
J 2083 java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; java.base#11.0.4 (0 bytes) # 0x000001a7256ff326 [0x000001a7256ff2c0+0x0000000000000066]
J 4651 c1 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object; java.base#11.0.4 (22 bytes) # 0x000001a71e9f54ac [0x000001a71e9f51a0+0x000000000000030c]
j java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+6 java.base#11.0.4
j java.awt.EventQueue$5.run()Ljava/lang/Void;+11 java.desktop#11.0.4
j java.awt.EventQueue$5.run()Ljava/lang/Object;+1 java.desktop#11.0.4
v ~StubRoutines::call_stub
J 2083 java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; java.base#11.0.4 (0 bytes) # 0x000001a7256ff326 [0x000001a7256ff2c0+0x0000000000000066]
J 4672 c1 java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V java.desktop#11.0.4 (80 bytes) # 0x000001a71ea0c16c [0x000001a71ea0b6a0+0x0000000000000acc]
J 4746 c1 java.awt.EventDispatchThread.pumpOneEventForFilters(I)V java.desktop#11.0.4 (113 bytes) # 0x000001a71ea323ac [0x000001a71ea31ca0+0x000000000000070c]
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+35 java.desktop#11.0.4
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11 java.desktop#11.0.4
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4 java.desktop#11.0.4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3 java.desktop#11.0.4
j java.awt.EventDispatchThread.run()V+9 java.desktop#11.0.4
v ~StubRoutines::call_stub
siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), data execution prevention violation at address 0x0000000000000000
Register to memory mapping:
RIP=0x0 is NULL
RAX=0x0000000000000001 is an unknown value
RBX=0x000001a735b13b40 points into unknown readable memory: 40 6c 21 0c fe 7f 00 00
RCX=0x000001a737c29430 points into unknown readable memory: 65 67 6c 42 69 6e 64 41
RDX=0x00007ffe4be9e0e0 libEGL.dll
RSP=0x000000427a3f7cd8 is pointing into the stack for thread: 0x000001a735b13800
RBP=0x00007ffe4be819f6 libEGL.dll
RSI=0x000000427a3f7de8 is pointing into the stack for thread: 0x000001a735b13800
RDI=0x000001a737c29430 points into unknown readable memory: 65 67 6c 42 69 6e 64 41
R8 =0x00007ffe4be9faa0 libEGL.dll
R9 =0x00007ffe4be9302a libEGL.dll
R10=0x0 is NULL
R11=0x000000427a3f7a80 is pointing into the stack for thread: 0x000001a735b13800
R12=0x0 is NULL
R13={method} {0x000001a7406c1478} 'dispatch_eglGetProcAddress0' '(Ljava/lang/String;J)J' in 'jogamp/opengl/egl/EGL'
R14=0x000000427a3f7de8 is pointing into the stack for thread: 0x000001a735b13800
R15=0x000001a735b13800 is a thread
Registers:
RAX=0x0000000000000001, RBX=0x000001a735b13b40, RCX=0x000001a737c29430, RDX=0x00007ffe4be9e0e0
RSP=0x000000427a3f7cd8, RBP=0x00007ffe4be819f6, RSI=0x000000427a3f7de8, RDI=0x000001a737c29430
R8 =0x00007ffe4be9faa0, R9 =0x00007ffe4be9302a, R10=0x0000000000000000, R11=0x000000427a3f7a80
R12=0x0000000000000000, R13=0x000001a7406c1470, R14=0x000000427a3f7de8, R15=0x000001a735b13800
RIP=0x0000000000000000, EFLAGS=0x0000000000010202
Top of Stack: (sp=0x000000427a3f7cd8)
0x000000427a3f7cd8: 0000000064361292 000001a735b13b40
0x000000427a3f7ce8: 00007ffe4be819f6 000000427a3f7de8
0x000000427a3f7cf8: 000001a71db2ee80 000000427a3f8500
0x000000427a3f7d08: 000001a7406c1470 000000003845e4ea
0x000000427a3f7d18: 0000000000001f40 000000427a3f7db8
0x000000427a3f7d28: 000001a71db2f037 0000000000001f40
0x000000427a3f7d38: 000001a71db2ed1c 000001a735b13800
0x000000427a3f7d48: 000001a7406c1470 000000427a3f7db8
0x000000427a3f7d58: 000000003845e4ea 000000003845e4ea
0x000000427a3f7d68: 000001a71db2ecd6 000000427a3f7d70
0x000000427a3f7d78: 000001a7406c1470 000000427a3f7de8
0x000000427a3f7d88: 000001a7406c2fa8 0000000000000000
0x000000427a3f7d98: 0000000087bf8b68 000001a7406c1470
0x000000427a3f7da8: 0000000000000000 000000427a3f7dd8
0x000000427a3f7db8: 000000427a3f7e38 000001a71db29910
0x000000427a3f7dc8: 0000000087bf8b68 000001a71db2bf97
Instructions: (pc=0x0000000000000000)
0xffffffffffffff00:
Stack slot to memory mapping:
stack at sp + 0 slots: 0x0000000064361292 jogl_mobile.dll
stack at sp + 1 slots: 0x000001a735b13b40 points into unknown readable memory: 40 6c 21 0c fe 7f 00 00
stack at sp + 2 slots: 0x00007ffe4be819f6 libEGL.dll
stack at sp + 3 slots: 0x000000427a3f7de8 is pointing into the stack for thread: 0x000001a735b13800
stack at sp + 4 slots: 0x000001a71db2ee80 is at code_begin+608 in an Interpreter codelet
method entry point (kind = native) [0x000001a71db2ec20, 0x000001a71db2f780] 2912 bytes
stack at sp + 5 slots: 0x000000427a3f8500 is pointing into the stack for thread: 0x000001a735b13800
stack at sp + 6 slots: {method} {0x000001a7406c1478} 'dispatch_eglGetProcAddress0' '(Ljava/lang/String;J)J' in 'jogamp/opengl/egl/EGL'
stack at sp + 7 slots: 0x000000003845e4ea is an unknown value
Thanks a lot in advance for answering.
Egil
Based on the error log, it appears to be an issue with the graphics driver on your PC. Are you using a standard Windows PC or laptop, or something like a mobile tablet or chromebook? The error suggests an issue trying to load a mobile graphics driver and this would not occur if used on a PC. Which demo in particular causes this error? Is it a standard demo, or a "Server" demo launch?
One suggestd approach that solves graphics problems with Repast displays is to update the graphics driver on your PC. If you have and NVidia or AMD GPU you can download a driver update utility from their websites.
Try taking libEGL.dll of your PATH environment. Re mingw_64.
I'm calling dlls out of Java using JNA.
This works most of the time, but sometimes a Memory Access Exception is thrown.
I found out that the jvm.exe runs with the msvcr100.dll and the dlls are running on the msvcr90.dll. Can this lead to problems?
Java Interface Code:
public interface FooLibInterface extends StdCallLibrary {
FltLibInterface INSTANCE = (FooLibInterface) Native.loadLibrary("C:\\dlls\\FooLibWrapper.dll", FooLibInterface.class);
NativeLong wrapedFooInterface(long id, PointerByReference inDataArray, long inItems, PointerByReference outDataArray, NativeLongByReference outItems, DoubleByReference outParX);
}
Java call:
synchronized (lock) {
long id = 123;
PointerByReference inputArray = new PointerByReference();
Memory buffer = new Memory(data.length * 8);
buffer.write(0, data, 0, data.length);
inputArray.setValue(buffer);
PointerByReference outputArray = new PointerByReference();
NativeLongByReference outItems = new NativeLongByReference();
DoubleByReference outParX = new DoubleByReference();
NativeLong excRet = ffltLib.wrapedProfileFilterInterface(id, inputArray, data.length, outputArray, outItems, outParX);
items = outItems.getValue().intValue();
double parX = outParX.getValue();
newdata = new double[ret.itemsX];
for (int x = 0; x < items; x += 1) {
newdata [x] = outputArray.getValue().getDouble(x * 8);
}
ffltLib.freemem();
}
c-Header:
#pragma pack(1)
#ifndef __FOOLIBWRAPPER_H__
#define __FOOLIBWRAPPER_H__
#include <iostream>
#include <windows.h>
#include <string.h>
/* To use this exported function of dll, include this header
* in your project.
*/
//Import Strukturen
typedef struct {
double *Data;
long Items;
double ParX;
} TNativeFoo;
typedef void (WINAPI *FOOINTERFACE) (LONGLONG *id, void *input, void *output);
extern "C" __declspec(dllexport) long wrapedFooInterface(LONGLONG id, double** inDataArray, LONGLONG inItems, double** outDataArray, LONGLONG* outItems, double* outParX)
extern "C" __declspec(dllexport) void freemem();
#endif // __FOOLIBWRAPPER_H__
C-Code:
extern "C" __declspec(dllexport) long wrapedFooInterface(LONGLONG id, double** inDataArray, LONGLONG inItems, double** outDataArray, LONGLONG* outItems, double* outParX)
{
long i;
HINSTANCE hGetProcIDDLL;
FARPROC lpfnFooInterfaceProcAddress;
FOOINTERFACE fncFooInterface;
long internID(0);
memRegister.getcsmmemid(&internID);
memRegister.getcsmmemid();
hGetProcIDDLL = LoadLibraryA(LibaryPath.c_str());
lpfnFooInterfaceProcAddress = GetProcAddress(HMODULE (hGetProcIDDLL),"FooInterface");
fncFooInterface = FOOINTERFACE(lpfnFooInterfaceProcAddress);
OutputFoo.Data = (double *) memRegister.getmem(internID, inItems, sizeof(double));
InputFoo.Data = (double *) memRegister.getmem(internID, inItems, sizeof(double));
for (i=0L; i<inItems; i++)
InputFoo.Data[i]=inDataArray[0][i];
InputFoo.Items = OutputFoo.Items = inItems;
InputFoo.ParX = OutputFoo.ParX = inParX;
fncFooInterface(&id, &InputFoo, &OutputFoo);
outDataArray[0] = (double *) memRegister.getmem(OutputFoo.Items, sizeof(double));
for(long i=0;i<OutputFoo.Items;i++)
{
outDataArray[0][i]=OutputFoo.Data[i];
}
*outItems = OutputFoo.Items;
*outParX = OutputFoo.ParX;
memRegister.freemem(internID);
FreeLibrary(hGetProcIDDLL);
return 0;
}
Exception:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d316065, pid=10940, tid=11020
#
# JRE version: 7.0_09-b05
# Java VM: Java HotSpot(TM) Client VM (23.5-b02 mixed mode windows-x86 )
# Problematic frame:
# C [FltLibWrapper.dll+0x16065] wrapedProfileFilterInterface+0x105
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Stack:
Stack: [0x6a5e0000,0x6a6e0000], sp=0x6a6de620, free space=1017k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [FooLibWrapper.dll+0x16065] wrapedFooInterface+0x105
C [jna6443424344288876112.dll+0xcc77] Java_com_sun_jna_Native_initialize_1ffi_1type+0x38b7
C [jna6443424344288876112.dll+0xc78a] Java_com_sun_jna_Native_initialize_1ffi_1type+0x33ca
C [jna6443424344288876112.dll+0x4561] Java_com_sun_jna_Pointer__1getString+0xa31
C [jna6443424344288876112.dll+0x4cae] Java_com_sun_jna_Function_invokeVoid+0x2e
j com.sun.jna.Function.invokeVoid(I[Ljava/lang/Object;)V+0
j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;Z)Ljava/lang/Object;+45
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+214
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j $Proxy35.wrapedFoorInterface(JLcom/sun/jna/ptr/PointerByReference;JDDLcom/sun/jna/ptr/PointerByReference;Lcom/sun/jna/ptr/NativeLongByReference;Lcom/sun/jna/ptr/DoubleByReference;Lcom/sun/jna/ptr/DoubleByReference;Lcom/sun/jna/ptr/NativeLongByReference;D)V+86
J WrapperStructure.FooLibWrapper.fooInterface(LWrapperStructure/Foo;JD)LWrapperStructure/Foo;
...
j Routes$$anonfun$routes$1$$anonfun$apply$75$$anonfun$apply$76.apply()Lplay/mvc/Result;+38
j Routes$$anonfun$routes$1$$anonfun$apply$75$$anonfun$apply$76.apply()Ljava/lang/Object;+1
j play.core.Router$HandlerInvoker$$anon$5$$anon$1.invocation()Lplay/mvc/Result;+4
j play.core.j.JavaAction$$anon$1.call(Lplay/mvc/Http$Context;)Lplay/mvc/Result;+13
j play.GlobalSettings$1.call(Lplay/mvc/Http$Context;)Lplay/mvc/Result;+5
j controllers.Annotations.CurrentUser.call(Lplay/mvc/Http$Context;)Lplay/mvc/Result;+248
j play.core.j.JavaAction$class.apply(Lplay/core/j/JavaAction;Lplay/api/mvc/Request;)Lplay/api/mvc/Result;+368
j play.core.Router$HandlerInvoker$$anon$5$$anon$1.apply(Lplay/api/mvc/Request;)Lplay/api/mvc/Result;+2
j play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply()Lplay/api/mvc/Result;+8
j play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply()Ljava/lang/Object;+1
j play.utils.Threads$.withContextClassLoader(Ljava/lang/ClassLoader;Lscala/Function0;)Ljava/lang/Object;+16
j play.core.ActionInvoker$$anonfun$receive$1.apply(Ljava/lang/Object;)V+148
j play.core.ActionInvoker$$anonfun$receive$1.apply(Ljava/lang/Object;)Ljava/lang/Object;+2
j akka.actor.Actor$class.apply(Lakka/actor/Actor;Ljava/lang/Object;)V+25
j play.core.ActionInvoker.apply(Ljava/lang/Object;)V+2
j akka.actor.ActorCell.invoke(Lakka/dispatch/Envelope;)V+37
j akka.dispatch.Mailbox.processMailbox(IJ)V+24
j akka.dispatch.Mailbox.run()V+20
j akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec()Z+6
J akka.jsr166y.ForkJoinTask.doExec()I
v ~StubRoutines::call_stub
V [jvm.dll+0x12a39a]
V [jvm.dll+0x1d978e]
V [jvm.dll+0x12a583]
V [jvm.dll+0x12a5e7]
V [jvm.dll+0xd315f]
V [jvm.dll+0x14a697]
V [jvm.dll+0x14a800]
V [jvm.dll+0x17efe9]
C [msvcr100.dll+0x5c6de] endthreadex+0x3a
C [msvcr100.dll+0x5c788] endthreadex+0xe4
C [KERNEL32.DLL+0x2850d] BaseThreadInitThunk+0xe
C [ntdll.dll+0x5bf39] RtlInitializeExceptionChain+0x85
C [ntdll.dll+0x5bf0c] RtlInitializeExceptionChain+0x58
DLLs:
0x00030000 - 0x0005f000 C:\Program Files (x86)\Java\jdk1.7.0_09_32Bit\bin\java.exe
...
0x6d300000 - 0x6d326000 C:\dlls\FooLibWrapper.dll
0x6cf50000 - 0x6d026000 C:\Windows\WinSxS\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2\MSVCP90D.dll
0x6ce20000 - 0x6cf43000 C:\Windows\WinSxS\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2\MSVCR90D.dll
0x675a0000 - 0x675d4000 C:\dlls\FooLib.dll
...
Heap:
def new generation total 157376K, used 101422K [0x047f0000, 0x0f2b0000, 0x19d40000)
eden space 139904K, 61% used [0x047f0000, 0x09bb6fd8, 0x0d090000)
from space 17472K, 89% used [0x0d090000, 0x0dfd49f8, 0x0e1a0000)
to space 17472K, 0% used [0x0e1a0000, 0x0e1a0000, 0x0f2b0000)
tenured generation total 349568K, used 67082K [0x19d40000, 0x2f2a0000, 0x447f0000)
the space 349568K, 19% used [0x19d40000, 0x1dec28a0, 0x1dec2a00, 0x2f2a0000)
compacting perm gen total 57600K, used 57590K [0x447f0000, 0x48030000, 0x547f0000)
the space 57600K, 99% used [0x447f0000, 0x4802da78, 0x4802dc00, 0x48030000)
No shared spaces configured.
Args:
VM Arguments:
jvm_args: -Dfile.encoding=UTF8 -Dsbt.boot.properties=file:///E:/play-2.0.4/framework/sbt/sbt.boot.properties -Dsbt.log.noformat=true -Dsbt.global.plugins="C:\Users\TimoW_000\AppData\Local\Temp\sbt-global-plugin233941470253421253stub" -Dplay.version=2.0.4 -Dsbt.ivy.home=E:\play-2.0.4\repository -Dplay.home=E:\play-2.0.4\framework -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M
java_command: xsbt.boot.Boot run
Launcher Type: SUN_STANDARD
Environment Variables:
CLASSPATH=.;C:\Program Files (x86)\Java\jre7_32bit\lib\ext\QTJava.zip
PATH=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 12.1\bin\..\.\bin;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 12.1\bin\..\.\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;E:\play-2.0.4\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Java\jdk1.7.0_09_32Bit\bin;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\OpenSSH\bin;c:\program files (x86)\jetbrains\intellij idea 12.1\jre\jre\bin;c:\program files (x86)\jetbrains\intellij idea 12.1\jre\jre\bin
USERNAME=TimoW_000
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
System:
OS: Windows 8 , 64 bit Build 9200
CPU:total 4 (4 cores per cpu, 1 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, tsc, tscinvbit
Memory: 4k page, physical 8361544k(2628436k free), swap 11376200k(4311964k free)
vm_info: Java HotSpot(TM) Client VM (23.5-b02) for windows-x86 JRE (1.7.0_09-b05), built on Sep 24 2012 22:01:33 by "java_re" with unknown MS VC++:1600
time: Fri Sep 27 12:32:29 2013
elapsed time: 122 seconds
My code is given below. Its a program that adds leaves to the database.I am getting the Fatal Error has been detected by java runtime environment and I am not understanding why. I am new to Java, so I am very confused about this. Can anybody tell me why is this happening?
I am putting up the error file as well. I tried understanding that too but couldn't find where is the error located.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.String;
import java.io.*;
import java.sql.*;
public class AddLeave extends JFrame implements ActionListener
{
JFrame frame;
JPanel panel,panel1;
JLabel empid,name1,name2,department,designation;
JTextField txtempid,txtname1,txtname2,txtdepartment,txtdesignation;
JButton find,ok,cancel;
String txtname1_1 = "";
String txtname2_1 = "";
String txtdepartment_1 = "";
String txtdesignation_1 = "";
String txtempid1="";
Connection conn;
public AddLeave()
{
frame=new JFrame("ADD LEAVE");
frame.setLayout(new BorderLayout());
panel=new JPanel();
panel.setLayout(new GridLayout(5,2,5,5));
panel.setBackground(Color.RED);
panel1=new JPanel();
//panel1.setLayout(new GridLayout(1,3,10,10));
panel1.setBackground(Color.GREEN);
empid=new JLabel("Employee Id:");
name1=new JLabel("First Name:");
name2=new JLabel("Last Name:");
department=new JLabel("Department:");
designation=new JLabel("Designation:");
txtempid = new JTextField();
txtname1 = new JTextField();
txtname1.setEditable(false);
txtname2 = new JTextField();
txtname2.setEditable(false);
txtdepartment = new JTextField();
txtdesignation = new JTextField();
txtdesignation.setEditable(false);
find=new JButton("FIND");
find.addActionListener(this);
ok=new JButton("OK");
ok.addActionListener(this);
cancel=new JButton("CANCEL");
cancel.addActionListener(this);
panel.add(empid);
panel.add(txtempid);
panel.add(name1);
panel.add(txtname1);
panel.add(name2);
panel.add(txtname2);
panel.add(department);
panel.add(txtdepartment);
panel.add(designation);
panel.add(txtdesignation);
panel1.add(find);
panel1.add(ok);
panel1.add(cancel);
frame.add(panel,BorderLayout.CENTER);
frame.add(panel1,BorderLayout.SOUTH);
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
connect();
}
public void connect()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:demo","system","scott");
}
catch(Exception e)
{
System.out.println("Error : "+e);
}
}
public void actionPerformed(ActionEvent event)
{
Object source= event.getSource();
if(source.equals(find))
{
find();
}
if(source.equals(ok))
{
System.out.println("Leave added");
}
if(source.equals(cancel))
{
System.out.println("Canceled");
}
}
public void find()
{
txtempid1=txtempid.getText();
try
{
if(txtempid1.isEmpty())
{
JOptionPane.showMessageDialog(null,"ID REQUIRED!!!","warning",JOptionPane.WARNING_MESSAGE);
}
else
{
Statement stmt = conn.createStatement();
String query = "SELECT * FROM demo WHERE empid='"+txtempid1+"'";
ResultSet rs = stmt.executeQuery(query);
int foundrec = 0;
while (rs.next())
{
txtname1_1 = rs.getString(2);
txtname2_1 = rs.getString(3);
txtdesignation_1 = rs.getString(4);
foundrec =foundrec+ 1;
}
if(foundrec==1)
{
JOptionPane.showMessageDialog(null,"**Record Found**"," Message",JOptionPane.PLAIN_MESSAGE);
txtname1.setText(txtname1_1);
txtname2.setText(txtname2_1);
txtdesignation.setText(txtdesignation_1);
}
else
{
JOptionPane.showMessageDialog(null,"!!!!EMPLOYEE DOES NOT EXIST!!!!"," ERROR",JOptionPane.ERROR_MESSAGE);
}
}
conn.close();
}
catch(Exception e)
{
System.out.println("Error : "+e);
}
}
public static void main(String[] args)
{
new AddLeave();
}
}
this is the error file
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c901010, pid=3052, tid=3732
#
# JRE version: 6.0_31-b05
# Java VM: Java HotSpot(TM) Client VM (20.6-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x1010]
#
# If you would like to submit a bug report, please visit:
# 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 (0x03054400): JavaThread "AWT-EventQueue-0" [_thread_in_native, id=3732, stack(0x03250000,0x032a0000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x00000018
Registers:
EAX=0x00000004, EBX=0x329ab298, ECX=0x7ffad000, EDX=0x00000004
ESP=0x0329ea48, EBP=0x0329ea60, ESI=0x00000000, EDI=0x03401590
EIP=0x7c901010, EFLAGS=0x00010246
Top of Stack: (sp=0x0329ea48)
0x0329ea48: 74355a16 00000004 034015b4 7432139f
0x0329ea58: 034015b4 03401590 0329ea70 74322c5d
0x0329ea68: 034015b4 03054528 0329ea84 74325fa0
0x0329ea78: 03401590 74350000 0329f1ac 0329eaa0
0x0329ea88: 7432740e 03401590 0329eac0 00000003
0x0329ea98: 0312cd28 03054528 0329eab8 6d36124e
0x0329eaa8: 03401590 0329eac0 03054400 329ab298
0x0329eab8: 0329eb04 00919fc7 00000000 0329eb20
Instructions: (pc=0x7c901010)
0x7c900ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x7c901000: 90 90 90 90 90 64 8b 0d 18 00 00 00 8b 54 24 04
0x7c901010: 83 7a 14 00 75 4f f0 ff 42 04 75 19 8b 41 24 89
0x7c901020: 42 0c c7 42 08 01 00 00 00 33 c0 c2 04 00 8d a4
Register to memory mapping:
EAX=0x00000004 is an unknown value
EBX=0x329ab298 is an oop
{method}
- klass: {other class}
ECX=0x7ffad000 is an unknown value
EDX=0x00000004 is an unknown value
ESP=0x0329ea48 is pointing into the stack for thread: 0x03054400
EBP=0x0329ea60 is pointing into the stack for thread: 0x03054400
ESI=0x00000000 is an unknown value
EDI=0x03401590 is an unknown value
Stack: [0x03250000,0x032a0000], sp=0x0329ea48, free space=314k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [ntdll.dll+0x1010] RtlEnterCriticalSection+0xb
C [ODBC32.dll+0x2c5d] MpHeapAlloc+0x452
C [ODBC32.dll+0x5fa0] SQLSetStmtAttrW+0xfeb
C [ODBC32.dll+0x740e] SQLAllocStmt+0x21
C [JdbcOdbc.dll+0x124e] Java_sun_jdbc_odbc_JdbcOdbc_allocStmt+0x28
j sun.jdbc.odbc.JdbcOdbc.allocStmt(J[B)J+0
j sun.jdbc.odbc.JdbcOdbc.SQLAllocStmt(J)J+47
j sun.jdbc.odbc.JdbcOdbcConnection.createStatement(II)Ljava/sql/Statement;+27
j sun.jdbc.odbc.JdbcOdbcConnection.createStatement()Ljava/sql/Statement;+7
j AddLeave.find()V+37
j AddLeave.actionPerformed(Ljava/awt/event/ActionEvent;)V+17
j javax.swing.AbstractButton.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+84
j javax.swing.AbstractButton$Handler.actionPerformed(Ljava/awt/event/ActionEvent;)V+5
j javax.swing.DefaultButtonModel.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+35
j javax.swing.DefaultButtonModel.setPressed(Z)V+117
j javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Ljava/awt/event/MouseEvent;)V+35
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+64
j javax.swing.JComponent.processMouseEvent(Ljava/awt/event/MouseEvent;)V+23
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81
j java.awt.Container.processEvent(Ljava/awt/AWTEvent;)V+18
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+570
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+42
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.LightweightDispatcher.retargetMouseEvent(Ljava/awt/Component;ILjava/awt/event/Mous eEvent;)V+320
j java.awt.LightweightDispatcher.processMouseEvent(Ljava/awt/event/MouseEvent;)Z+139
j java.awt.LightweightDispatcher.dispatchEvent(Ljava/awt/AWTEvent;)Z+50
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+12
j java.awt.Window.dispatchEventImpl(Ljava/awt/AWTEvent;)V+65
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.EventQueue.dispatchEventImpl(Ljava/awt/AWTEvent;Ljava/lang/Object;)V+41
j java.awt.EventQueue.access$000(Ljava/awt/EventQueue;Ljava/awt/AWTEvent;Ljava/lang/Object;)V+3
j java.awt.EventQueue$1.run()Ljava/lang/Void;+12
j java.awt.EventQueue$1.run()Ljava/lang/Object;+1
v ~StubRoutines::call_stub
V [jvm.dll+0xfac3b]
V [jvm.dll+0x18c3a1]
V [jvm.dll+0xfacbd]
V [jvm.dll+0xbb654]
C [java.dll+0x102f] Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_security_AccessControlContext_2+0x17
j java.security.AccessControlContext$1.doIntersectionPrivilege(Ljava/security/PrivilegedActio n;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Objec t;+28
j java.security.AccessControlContext$1.doIntersectionPrivilege(Ljava/security/PrivilegedActio n;Ljava/security/AccessControlContext;)Ljava/lang/Object;+6
j java.awt.EventQueue$2.run()Ljava/lang/Void;+11
j java.awt.EventQueue$2.run()Ljava/lang/Object;+1
v ~StubRoutines::call_stub
V [jvm.dll+0xfac3b]
V [jvm.dll+0x18c3a1]
V [jvm.dll+0xfacbd]
V [jvm.dll+0xbb654]
C [java.dll+0x102f] Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_se curity_AccessControlContext_2+0x17
j java.security.AccessControlContext$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;+28
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+73
j java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z+204
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub
V [jvm.dll+0xfac3b]
V [jvm.dll+0x18c3a1]
V [jvm.dll+0xfade1]
V [jvm.dll+0xfae3b]
V [jvm.dll+0xb5569]
V [jvm.dll+0x118f14]
V [jvm.dll+0x140ffc]
C [msvcr71.dll+0x9565] endthreadex+0xa0
C [kernel32.dll+0xb50b] GetModuleFileNameA+0x1b4
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.jdbc.odbc.JdbcOdbc.allocStmt(J[B)J+0
j sun.jdbc.odbc.JdbcOdbc.SQLAllocStmt(J)J+47
j sun.jdbc.odbc.JdbcOdbcConnection.createStatement(II)Ljava/sql/Statement;+27
j sun.jdbc.odbc.JdbcOdbcConnection.createStatement()Ljava/sql/Statement;+7
j AddLeave.find()V+37
j AddLeave.actionPerformed(Ljava/awt/event/ActionEvent;)V+17
j javax.swing.AbstractButton.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+84
j javax.swing.AbstractButton$Handler.actionPerformed(Ljava/awt/event/ActionEvent;)V+5
j javax.swing.DefaultButtonModel.fireActionPerformed(Ljava/awt/event/ActionEvent;)V+35
j javax.swing.DefaultButtonModel.setPressed(Z)V+117
j javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Ljava/awt/event/MouseEvent;)V+35
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+64
j javax.swing.JComponent.processMouseEvent(Ljava/awt/event/MouseEvent;)V+23
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81
j java.awt.Container.processEvent(Ljava/awt/AWTEvent;)V+18
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+570
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+42
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.LightweightDispatcher.retargetMouseEvent(Ljava/awt/Component;ILjava/awt/event/MouseEvent;)V+320
j java.awt.LightweightDispatcher.processMouseEvent(Ljava/awt/event/MouseEvent;)Z+139
j java.awt.LightweightDispatcher.dispatchEvent(Ljava/awt/AWTEvent;)Z+50
j java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V+12
j java.awt.Window.dispatchEventImpl(Ljava/awt/AWTEvent;)V+65
j java.awt.Component.dispatchEvent(Ljava/awt/AWTEvent;)V+2
j java.awt.EventQueue.dispatchEventImpl(Ljava/awt/AWTEvent;Ljava/lang/Object;)V+41
j java.awt.EventQueue.access$000(Ljava/awt/EventQueue;Ljava/awt/AWTEvent;Ljava/lang/Object;)V+3
j java.awt.EventQueue$1.run()Ljava/lang/Void;+12
j java.awt.EventQueue$1.run()Ljava/lang/Object;+1
v ~StubRoutines::call_stub
j java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/ AccessControlContext;)Ljava/lang/Object;+0
j java.security.AccessControlContext$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;+28
j java.security.AccessControlContext$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+6
j java.awt.EventQueue$2.run()Ljava/lang/Void;+11
j java.awt.EventQueue$2.run()Ljava/lang/Object;+1
v ~StubRoutines::call_stub
j java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+0
j java.security.AccessControlContext$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;+28
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+73
j java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z+204
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x0312dc00 JavaThread "TimerQueue" daemon [_thread_blocked, id=3508, stack(0x03540000,0x03590000)]
0x002a6400 JavaThread "DestroyJavaVM" [_thread_blocked, id=3588, stack(0x008c0000,0x00910000)]
0x0308f400 JavaThread "D3D Screen Updater" daemon [_thread_blocked, id=3808, stack(0x03370000,0x033c0000)]
=>0x03054400 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=3732, stack(0x03250000,0x032a0000)]
0x02b8f800 JavaThread "AWT-Windows" daemon [_thread_in_native, id=380, stack(0x02f90000,0x02fe0000)]
0x02b8e400 JavaThread "AWT-Shutdown" [_thread_blocked, id=3368, stack(0x02f40000,0x02f90000)]
0x02b8cc00 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=972, stack(0x02ef0000,0x02f40000)]
0x02b48800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1524, stack(0x02dc0000,0x02e10000)]
0x02b43400 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=3272, stack(0x02d70000,0x02dc0000)]
0x02b41000 JavaThread "Attach Listener" daemon [_thread_blocked, id=1364, stack(0x02d20000,0x02d70000)]
0x02b3f800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2804, stack(0x02cd0000,0x02d20000)]
0x02b38400 JavaThread "Finalizer" daemon [_thread_blocked, id=3164, stack(0x02c80000,0x02cd0000)]
0x02b36c00 JavaThread "Reference Handler" daemon [_thread_blocked, id=1656, stack(0x02c30000,0x02c80000)]
Other Threads:
0x02afa000 VMThread [stack: 0x02be0000,0x02c30000] [id=1988]
0x02b4b400 WatcherThread [stack: 0x02e10000,0x02e60000] [id=956]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Heap
def new generation total 4928K, used 2084K [0x22970000, 0x22ec0000, 0x27ec0000)
eden space 4416K, 47% used [0x22970000, 0x22b791d8, 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 764K [0x32970000, 0x33570000, 0x36970000)
the space 12288K, 6% used [0x32970000, 0x32a2f0f0, 0x32a2f200, 0x33570000)
ro space 10240K, 51% used [0x36970000, 0x36e9e318, 0x36e9e400, 0x37370000)
rw space 12288K, 55% used [0x37370000, 0x37a0a088, 0x37a0a200, 0x37f70000)
Code Cache [0x00910000, 0x009b0000, 0x02910000)
total_blobs=316 nmethods=92 adapters=160 free_code_cache=32927040 largest_free_block=0
Dynamic libraries:
0x00400000 - 0x00425000 C:\WINDOWS\system32\java.exe
0x7c900000 - 0x7c9b0000 C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c8f4000 C:\WINDOWS\system32\kernel32.dll
0x77dd0000 - 0x77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
0x77e70000 - 0x77f01000 C:\WINDOWS\system32\RPCRT4.dll
0x7c340000 - 0x7c396000 C:\Program Files\Java\jre6\bin\msvcr71.dll
0x6d7f0000 - 0x6da9f000 C:\Program Files\Java\jre6\bin\client\jvm.dll
0x77d40000 - 0x77dd0000 C:\WINDOWS\system32\USER32.dll
0x77f10000 - 0x77f56000 C:\WINDOWS\system32\GDI32.dll
0x76b40000 - 0x76b6d000 C:\WINDOWS\system32\WINMM.dll
0x6d7a0000 - 0x6d7ac000 C:\Program Files\Java\jre6\bin\verify.dll
0x6d320000 - 0x6d33f000 C:\Program Files\Java\jre6\bin\java.dll
0x6d7e0000 - 0x6d7ef000 C:\Program Files\Java\jre6\bin\zip.dll
0x6d000000 - 0x6d14c000 C:\Program Files\Java\jre6\bin\awt.dll
0x73000000 - 0x73026000 C:\WINDOWS\system32\WINSPOOL.DRV
0x77c10000 - 0x77c68000 C:\WINDOWS\system32\msvcrt.dll
0x76390000 - 0x763ad000 C:\WINDOWS\system32\IMM32.dll
0x774e0000 - 0x7761c000 C:\WINDOWS\system32\ole32.dll
0x773d0000 - 0x774d2000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common- Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\COMCTL32.dll
0x77f60000 - 0x77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
0x5ad70000 - 0x5ada8000 C:\WINDOWS\system32\uxtheme.dll
0x6d230000 - 0x6d27f000 C:\Program Files\Java\jre6\bin\fontmanager.dll
0x74720000 - 0x7476b000 C:\WINDOWS\system32\MSCTF.dll
0x4fdd0000 - 0x4ff76000 C:\WINDOWS\system32\d3d9.dll
0x03020000 - 0x03026000 C:\WINDOWS\system32\d3d8thk.dll
0x77c00000 - 0x77c08000 C:\WINDOWS\system32\VERSION.dll
0x7c9c0000 - 0x7d1d4000 C:\WINDOWS\system32\shell32.dll
0x6d600000 - 0x6d613000 C:\Program Files\Java\jre6\bin\net.dll
0x71ab0000 - 0x71ac7000 C:\WINDOWS\system32\WS2_32.dll
0x71aa0000 - 0x71aa8000 C:\WINDOWS\system32\WS2HELP.dll
0x6d620000 - 0x6d629000 C:\Program Files\Java\jre6\bin\nio.dll
0x77120000 - 0x771ac000 C:\WINDOWS\system32\OLEAUT32.DLL
0x6d360000 - 0x6d36d000 C:\Program Files\Java\jre6\bin\JdbcOdbc.dll
0x74320000 - 0x7435d000 C:\WINDOWS\system32\ODBC32.dll
0x763b0000 - 0x763f9000 C:\WINDOWS\system32\comdlg32.dll
0x20000000 - 0x20017000 C:\WINDOWS\system32\odbcint.dll
0x032e0000 - 0x032e5000 C:\WINDOWS\system32\msorc32r.dll
0x10000000 - 0x10061000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oci.dll
0x76bf0000 - 0x76bfb000 C:\WINDOWS\system32\PSAPI.DLL
0x61c20000 - 0x61e73000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\ORACLIENT10.DLL
0x60870000 - 0x60956000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oracore10.dll
0x60a80000 - 0x60b46000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oranls10.dll
0x63690000 - 0x636a8000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraunls10.dll
0x60eb0000 - 0x60eb7000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orauts.dll
0x636b0000 - 0x636b6000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oravsn10.dll
0x60fa0000 - 0x61092000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oracommon10.dll
0x60300000 - 0x60858000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orageneric10.dll
0x63430000 - 0x63457000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orasnls10.dll
0x035a0000 - 0x0372c000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraxml10.dll
0x03730000 - 0x03741000 C:\WINDOWS\system32\MSVCIRT.dll
0x60960000 - 0x60a6d000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oran10.dll
0x62740000 - 0x6277d000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oranl10.dll
0x62790000 - 0x627a7000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oranldap10.dll
0x627f0000 - 0x628f9000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orannzsbb10.dll
0x62530000 - 0x62583000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraldapclnt10.dll
0x62670000 - 0x6268b000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orancrypt10.dll
0x71ad0000 - 0x71ad9000 C:\WINDOWS\system32\WSOCK32.dll
0x62920000 - 0x6296c000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oranro10.dll
0x626b0000 - 0x626b7000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oranhost10.dll
0x62660000 - 0x62666000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orancds10.dll
0x629c0000 - 0x629c8000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orantns10.dll
0x60b50000 - 0x60ea9000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orapls10.dll
0x63420000 - 0x63429000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraslax10.dll
0x63080000 - 0x63284000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraplp10.dll
0x61ed0000 - 0x61f5b000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orahasgen10.dll
0x62ab0000 - 0x62b1a000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraocr10.dll
0x62b20000 - 0x62b60000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oraocrb10.dll
0x5b860000 - 0x5b8b4000 C:\WINDOWS\system32\NETAPI32.dll
0x62980000 - 0x62990000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orantcp10.dll
0x63520000 - 0x635ba000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\orasql10.dll
0x5fe80000 - 0x5fe9b000 C:\WINDOWS\system32\odbccp32.dll
0x77fe0000 - 0x77ff1000 C:\WINDOWS\system32\Secur32.dll
0x62650000 - 0x62659000 C:\oraclexe\app\oracle\product\10.2.0\server\bin\oranbeq10.dll
0x71f80000 - 0x71f84000 C:\WINDOWS\system32\security.dll
0x77c70000 - 0x77c93000 C:\WINDOWS\system32\msv1_0.dll
0x76d60000 - 0x76d79000 C:\WINDOWS\system32\iphlpapi.dll
VM Arguments:
java_command: AddLeave
Launcher Type: SUN_STANDARD
Environment Variables:
CLASSPATH=.
PATH=C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WIN DOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0\bin;C:\Program Files\Common Files\Nero\Lib\
USERNAME=sunanda
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 2
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 1045684k(346004k free), swap 2517544k(1203440k free)
vm_info: Java HotSpot(TM) Client VM (20.6-b01) for windows-x86 JRE (1.6.0_31-b05), built on Feb 3 2012 18:44:09 by "java_re" with MS VC++ 7.1 (VS2003)
time: Sun Apr 08 15:46:59 2012
elapsed time: 9 seconds
"Demo" is the name of the database which has 4 columns namely empid,Fname,Lname,designation. The working of the program is that when I enter the employee ID it retrieves the remaining data from the database. As I have not added the department Id column I am not getting that from the database.
I usually see these errors when something went wrong in the JNI (Java Native Interface) code, i.e. here, perhaps the JDBC (Java DataBase Connectivity) driver ODBC32.dll. Are you sure you are using correct version of the JDBC driver for your platform? Especially check you are using 32-bit version on a 32-bit OS (Operating System) and not a 64-bit version (or vice-versa).
The crash happened outside the Java Virtual Machine in native code.
You should be using the Oracle JDBC Driver appropriate for your Oracle database version; these are typically pure Java. The JDBC-ODBC Bridge Driver has significant limitations, including JNI dependency.
I'm having problems handling callbacks in JNA.
I'm trying to use a C API that uses callbacks to handle several session events (logged in, logged out, connection problem...).
The session object (called sp_session) is an opaque struct. All the callbacks are registered in a sp_session_callbacks structure. According to the API, I am supposed to declare the callbacks object, and put it into a Config object that I will provide when creating the sp_session object. If I don't want to use certain callbacks, I am supposed to initialize them with null. The API is using the __stdcall calling convention.
Here is a snippet of the C header that's relevant to my problem:
#define SP_CALLCONV __stdcall
typedef struct sp_session sp_session; ///< Representation of a session
typedef enum sp_error {
SP_ERROR_OK = 0,
SP_ERROR_BAD_API_VERSION = 1,
/* More errors */
} sp_error;
typedef struct sp_session_callbacks {
/**
* Called when login has been processed and was successful
*/
void (SP_CALLCONV *logged_in)(sp_session *session, sp_error error);
/**
* Called when logout has been processed. Either called explicitly
* if you initialize a logout operation, or implicitly if there
* is a permanent connection error
*
* #param[in] session Session
*/
void (SP_CALLCONV *logged_out)(sp_session *session);
/**
* Called when there is a connection error, and the library has problems
* reconnecting to the Spotify service. Could be called multiple times (as
* long as the problem is present)
*/
void (SP_CALLCONV *connection_error)(sp_session *session, sp_error error);
/* More callbacks */
} sp_session_callbacks;
/**
* Initialize a session. The session returned will be initialized, but you will need
* to log in before you can perform any other operation
*/
SP_LIBEXPORT(sp_error) sp_session_create(const sp_session_config *config, sp_session **sess);
Here is my equivalent JNA code:
The sp_session object
public class sp_session extends PointerType{
public sp_session(Pointer address) {
super(address);
}
public sp_session() {
super();
}
}
The sp_session_callbacks object, containing all the callbacks
public class sp_session_callbacks extends Structure{
public LoggedIn logged_in;
public LoggedOut logged_out;
public ConnectionError connection_error;
}
The callbacks object (here is LoggedIn, but of course I have one for each callback)
public interface LoggedIn extends StdCallCallback {
public void logged_in(sp_session session, int error);
}
The native library, with the declaration of all the methods
public interface JLibspotify extends StdCallLibrary{
int sessionCreate(sp_session_config config, PointerByReference sess);
int sessionLogin(sp_session session, String username, String password);
// All the other methods defined by the API
}
And my main class, binding it all together
public class Test{
static{
System.loadLibrary("libspotify");
}
public static void main(String[] args){
JLibspotify lib = (JLibspotify)Native.loadLibrary("libspotify", JLibspotify.class);
sp_session_config cfg = new sp_session_config();
}
sp_session_callbacks sessCallbacks = new sp_session_callbacks();
LoggedIn loggedInCallback = new LoggedIn(){
public void logged_in(sp_session session, int error) {
System.out.println("logged_in() called");
}
};
sessCallbacks.logged_in = loggedInCallback;
cfg.session_callbacks = sessCallbacks;
PointerByReference sessionPbr = new PointerByReference();
int error_id = sessionCreate(cfg, sessionPbr); // CRASHES HERE
sp_session mySession = new sp_session(sessionPbr.getValue());
}
}
So, the sessionCreate function call makes the JRE crash with the trace at the end of the post EXCEPTION_ACCESS_VIOLATION (0xc0000005) problematic frame: C [jna3666290841889849729.dll+0xa3f4].
It looks like the logged_in callback is causing this, because when I set it to null it runs ok. Plus, if I initialize the connection_error callback, that has the exact same signature, it doesn't crash either.
I'm running version 3.2.7 of JNA. I tried with an anterior version (3.0.9) and it also failed.
I'm running the JDK 1.7 beta version, but I tried with the 1.6 and it also failed.
Thank you!
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0499a3f4, pid=1368, tid=1344
#
# JRE version: 7.0-b129
# Java VM: Java HotSpot(TM) Client VM (21.0-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [jna3666290841889849729.dll+0xa3f4]
#
# If you would like to submit a bug report, please visit:
# 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 (0x01b79400): JavaThread "main" [_thread_in_native, id=1344, stack(0x00340000,0x00390000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x1993053a
Registers:
EAX=0x19930522, EBX=0x100dc77c, ECX=0x00010004, EDX=0x1008d3e0
ESP=0x0038f58c, EBP=0x0038f5b4, ESI=0x0038f5a4, EDI=0x100b79b0
EIP=0x0499a3f4, EFLAGS=0x00210212
Top of Stack: (sp=0x0038f58c)
0x0038f58c: 100dc77c 0038f5a4 00010004 0038f688
0x0038f59c: 05983de0 05981330 0598289c 05983de0
0x0038f5ac: 05983de0 00000014 0038f688 1008d3ea
0x0038f5bc: 05983de0 10030d77 0038fc44 100b79b0
0x0038f5cc: ffffffff 1008d334 00000000 05983de0
0x0038f5dc: 1008d3e0 05983fc4 1008d9fd 0038f770
0x0038f5ec: 00000000 00000000 7275016a 055310b0
0x0038f5fc: 00000000 00010001 00000000 00000000
Instructions: (pc=0x0499a3f4)
0x0499a3d4: 01 00 89 e5 57 56 8d 75 f0 53 83 ec 1c 8b 7d 14
0x0499a3e4: 8b 5f 4c 8b 03 89 4c 24 08 89 74 24 04 89 1c 24
0x0499a3f4: ff 50 18 83 ec 0c 85 c0 0f 94 c0 0f b6 c0 85 c0
0x0499a404: 89 45 ec 75 19 8b 03 31 d2 89 54 24 08 89 74 24
Register to memory mapping:
EAX=0x19930522 is an unknown value
EBX=0x100dc77c is an unknown value
ECX=0x00010004 is an unknown value
EDX=0x1008d3e0 is an unknown value
ESP=0x0038f58c is pointing into the stack for thread: 0x01b79400
EBP=0x0038f5b4 is pointing into the stack for thread: 0x01b79400
ESI=0x0038f5a4 is pointing into the stack for thread: 0x01b79400
EDI=0x100b79b0 is an unknown value
Stack: [0x00340000,0x00390000], sp=0x0038f58c, free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [jna3666290841889849729.dll+0xa3f4] Java_com_sun_jna_Native_initialize_1ffi_1type+0x1054
C [libspotify.dll+0x8d3ea] sp_error_message+0x35a
C [jna3666290841889849729.dll+0xcb77] Java_com_sun_jna_Native_initialize_1ffi_1type+0x37d7
C [jna3666290841889849729.dll+0xc7c2] Java_com_sun_jna_Native_initialize_1ffi_1type+0x3422
C [jna3666290841889849729.dll+0x4561] Java_com_sun_jna_Pointer__1getString+0xa31
C [jna3666290841889849729.dll+0x4d2e] Java_com_sun_jna_Function_invokeInt+0x2e
j com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;Z)Ljava/lang/Object;+315
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+214
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j $Proxy0.sp_session_create(Lcom/nbarraille/jspotify/model/sp_session_config;Lcom/sun/jna/ptr/PointerByReference;)I+20
j com.nbarraille.jspotify.main.Test.main([Ljava/lang/String;)V+273
v ~StubRoutines::call_stub
V [jvm.dll+0x115f6d]
V [jvm.dll+0x1b788e]
V [jvm.dll+0x115fed]
V [jvm.dll+0xa2507]
V [jvm.dll+0xac867]
C [javaw.exe+0x209e]
C [javaw.exe+0xa23b]
C [javaw.exe+0xa2c5]
C [kernel32.dll+0x51194] BaseThreadInitThunk+0x12
C [ntdll.dll+0x5b429] RtlInitializeExceptionChain+0x63
C [ntdll.dll+0x5b3fc] RtlInitializeExceptionChain+0x36
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;Z)Ljava/lang/Object;+315
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+214
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+341
j $Proxy0.sp_session_create(Lcom/nbarraille/jspotify/model/sp_session_config;Lcom/sun/jna/ptr/PointerByReference;)I+20
j com.nbarraille.jspotify.main.Test.main([Ljava/lang/String;)V+273
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x0182fc00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=4664, stack(0x04170000,0x041c0000)]
0x0182ac00 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=1728, stack(0x01b20000,0x01b70000)]
0x01829800 JavaThread "Attach Listener" daemon [_thread_blocked, id=112, stack(0x04020000,0x04070000)]
0x01826400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=5836, stack(0x03ea0000,0x03ef0000)]
0x01819800 JavaThread "Finalizer" daemon [_thread_blocked, id=4724, stack(0x03f80000,0x03fd0000)]
0x01817800 JavaThread "Reference Handler" daemon [_thread_blocked, id=3940, stack(0x01ad0000,0x01b20000)]
=>0x01b79400 JavaThread "main" [_thread_in_native, id=1344, stack(0x00340000,0x00390000)]
Other Threads:
0x01816400 VMThread [stack: 0x01a30000,0x01a80000] [id=3876]
0x01843000 WatcherThread [stack: 0x040d0000,0x04120000] [id=4636]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Heap
def new generation total 4928K, used 3630K [0x23450000, 0x239a0000, 0x289a0000)
eden space 4416K, 82% used [0x23450000, 0x237db858, 0x238a0000)
from space 512K, 0% used [0x238a0000, 0x238a0000, 0x23920000)
to space 512K, 0% used [0x23920000, 0x23920000, 0x239a0000)
tenured generation total 10944K, used 0K [0x289a0000, 0x29450000, 0x33450000)
the space 10944K, 0% used [0x289a0000, 0x289a0000, 0x289a0200, 0x29450000)
compacting perm gen total 12288K, used 860K [0x33450000, 0x34050000, 0x37450000)
the space 12288K, 7% used [0x33450000, 0x33527190, 0x33527200, 0x34050000)
ro space 10240K, 43% used [0x37450000, 0x3789ce40, 0x3789d000, 0x37e50000)
rw space 12288K, 53% used [0x37e50000, 0x384c2710, 0x384c2800, 0x38a50000)
Code Cache [0x01e90000, 0x01f20000, 0x03e90000)
total_blobs=234 nmethods=82 adapters=88 free_code_cache=32972224 largest_free_block=0
Dynamic libraries:
0x00880000 - 0x008b0000 C:\Program Files\Java\jdk1.7.0\bin\javaw.exe
0x778f0000 - 0x77a2d000 C:\Windows\SYSTEM32\ntdll.dll
0x77070000 - 0x77144000 C:\Windows\system32\kernel32.dll
0x75cf0000 - 0x75d3a000 C:\Windows\system32\KERNELBASE.dll
0x60000000 - 0x60041000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\midas32.dll
0x61000000 - 0x61028000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\plugin_base.m32
0x67000000 - 0x67048000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\plugin_nt.m32
0x64000000 - 0x64021000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\plugin_registry.m32
0x62000000 - 0x6202d000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\plugin_extra.m32
0x65000000 - 0x6501a000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\plugin_net.m32
0x63000000 - 0x630a6000 C:\Program Files\BitDefender\BitDefender 2011\Active Virus Control\Midas_00078_002\plugin_fragments.m32
0x75e10000 - 0x75eb0000 C:\Windows\system32\ADVAPI32.dll
0x775c0000 - 0x7766c000 C:\Windows\system32\msvcrt.dll
0x75d50000 - 0x75d69000 C:\Windows\SYSTEM32\sechost.dll
0x77670000 - 0x77711000 C:\Windows\system32\RPCRT4.dll
0x76f00000 - 0x76fc9000 C:\Windows\system32\USER32.dll
0x77a50000 - 0x77a9e000 C:\Windows\system32\GDI32.dll
0x77a30000 - 0x77a3a000 C:\Windows\system32\LPK.dll
0x75d70000 - 0x75e0d000 C:\Windows\system32\USP10.dll
0x74830000 - 0x749ce000 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16661_none_420fe3fa2b8113bd\COMCTL32.dll
0x772f0000 - 0x77347000 C:\Windows\system32\SHLWAPI.dll
0x775a0000 - 0x775bf000 C:\Windows\system32\IMM32.DLL
0x75eb0000 - 0x75f7c000 C:\Windows\system32\MSCTF.dll
0x72740000 - 0x727fe000 C:\Program Files\Java\jdk1.7.0\jre\bin\msvcr100.dll
0x01b80000 - 0x01e89000 C:\Program Files\Java\jdk1.7.0\jre\bin\client\jvm.dll
0x746c0000 - 0x746f2000 C:\Windows\system32\WINMM.dll
0x73920000 - 0x7392c000 C:\Program Files\Java\jdk1.7.0\jre\bin\verify.dll
0x73330000 - 0x73350000 C:\Program Files\Java\jdk1.7.0\jre\bin\java.dll
0x75d40000 - 0x75d45000 C:\Windows\system32\PSAPI.DLL
0x733a0000 - 0x733b3000 C:\Program Files\Java\jdk1.7.0\jre\bin\zip.dll
0x10000000 - 0x10259000 C:\Windows\System32\libspotify.dll
0x77150000 - 0x77185000 C:\Windows\system32\WS2_32.dll
0x77a40000 - 0x77a46000 C:\Windows\system32\NSI.dll
0x75ba0000 - 0x75cbc000 C:\Windows\system32\CRYPT32.dll
0x75ab0000 - 0x75abc000 C:\Windows\system32\MSASN1.dll
0x74ee0000 - 0x74f38000 C:\Windows\system32\WINHTTP.dll
0x74e90000 - 0x74edf000 C:\Windows\system32\webio.dll
0x754c0000 - 0x754d6000 C:\Windows\system32\CRYPTSP.dll
0x75260000 - 0x7529b000 C:\Windows\system32\rsaenh.dll
0x750a0000 - 0x750b7000 C:\Windows\system32\USERENV.dll
0x75a40000 - 0x75a4b000 C:\Windows\system32\profapi.dll
0x75a30000 - 0x75a3c000 C:\Windows\system32\CRYPTBASE.dll
0x728a0000 - 0x728b6000 C:\Program Files\Java\jdk1.7.0\jre\bin\net.dll
0x75480000 - 0x754bc000 C:\Windows\system32\mswsock.dll
0x75470000 - 0x75476000 C:\Windows\System32\wship6.dll
0x73950000 - 0x73960000 C:\Windows\system32\NLAapi.dll
0x75340000 - 0x75384000 C:\Windows\system32\DNSAPI.dll
0x71030000 - 0x71038000 C:\Windows\System32\winrnr.dll
0x71020000 - 0x71030000 C:\Windows\system32\napinsp.dll
0x71000000 - 0x71012000 C:\Windows\system32\pnrpnsp.dll
0x74fd0000 - 0x74fd5000 C:\Windows\System32\wshtcpip.dll
0x74d30000 - 0x74d4c000 C:\Windows\system32\IPHLPAPI.DLL
0x74d20000 - 0x74d27000 C:\Windows\system32\WINNSI.DLL
0x70c60000 - 0x70c66000 C:\Windows\system32\rasadhlp.dll
0x71ba0000 - 0x71bd8000 C:\Windows\System32\fwpuclnt.dll
0x73930000 - 0x7393f000 C:\Program Files\Java\jdk1.7.0\jre\bin\nio.dll
0x04990000 - 0x049e5000 C:\Users\nbarraille\AppData\Local\Temp\jna3666290841889849729.dll
VM Arguments:
jvm_args: -Djava.library.path=C:\Windows\System32 -Dfile.encoding=Cp1252
java_command: com.nbarraille.jspotify.main.Test
Launcher Type: SUN_STANDARD
Environment Variables:
PATH=C:/Program Files/Java/jdk1.7.0/bin/../jre/bin/client;C:/Program Files/Java/jdk1.7.0/bin/../jre/bin;C:/Program Files/Java/jdk1.7.0/bin/../jre/lib/i386;C:\Windows\System32
USERNAME=nbarraille
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows 7 Build 7600
CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1
Memory: 4k page, physical 3624108k(885020k free), swap 7246452k(3637664k free)
vm_info: Java HotSpot(TM) Client VM (21.0-b01) for windows-x86 JRE (1.7.0-ea-b129), built on Feb 10 2011 07:43:39 by "java_re" with unknown MS VC++:1600
time: Mon Mar 07 14:25:08 2011
elapsed time: 0 seconds
EDIT:
*Code to test the API in C*
#include "api.h"
/* --- Data --- */
const uint8_t g_appkey[] = {/*My appkey*/};
/* --------------------------- SESSION CALLBACKS ------------------------- */
static void logged_in(sp_session *sess, sp_error error){
printf("logged_in() called: \n");
}
static void log_message(sp_session *sess, const char *data){
printf("log_message() called %s : \n", data);
}
static void notify_main_thread(sp_session *sess){
printf("notify_main_thread() called \n");
}
static sp_session_callbacks session_callbacks = {
//.logged_in = (void*)&logged_in,
//.notify_main_thread = (void*)¬ify_main_thread,
//.log_message = (void*)&log_message,
};
static sp_session_config spconfig = {
.api_version = 7,
.cache_location = "tmp",
.settings_location = "tmp",
.application_key = g_appkey,
.application_key_size = sizeof(g_appkey),
.user_agent = "jspotify",
.callbacks = &session_callbacks,
.userdata = NULL
};
int main(int argc, char **argv)
{
sp_session *sp;
const char *username = "foo";
const char *password = "bar";
spconfig.application_key_size = sizeof(g_appkey);
printf("Creating session \n");
sp_error err = sp_session_create(&spconfig, &sp);
if(err != 0){
printf("Error occured: %d \n", err);
return 0;
}
printf("Login\n");
sp_session_login(sp, username, password);
Sleep(10000);
return 0;
}
When I run it like this (without callbacks), the output is:
Creating session
Login
And when I register the callbacks (uncomment the lines), it doesn't even print anything!
It looks like it doesn't print anything when a callback is called, because if I comment the sp_session_login line, only the declaration of notify_main_thread (which is the only one printed) will prevent the program from printing...
When you have a C structure like:
struct Foo {
Bar* bar
}
i.e. one which contains a pointer to another structure, your JNA implementation of Bar (class Bar extends Structure) must also implement the Structure.ByReference interface -- otherwise JNA will think that struct Foo contains an instance of struct Bar instead of a pointer to a struct Bar, and an illegal memory access will result as the C code interprets a value in the Bar instance as a pointer.
You need to add implements Structure.ByReference to the sp_session_callbacks class.
Thanks for inspiring me to look at JNA -- it's pretty cool!
Output of this code is:
sp_session_create returned 0
sp_session_login returned 0
log_message() called:14:16:53.825 I [ap:1388] Connecting to AP ap.spotify.com:4070
log_message() called:14:16:54.061 I [ap:938] Connected to AP: 193.182.8.11:4070
log_message() called:14:16:54.765 E [ap:3396] Connection error: 401
Process finished with exit code 0
import com.sun.jna.*;
import com.sun.jna.ptr.PointerByReference;
import java.sql.Connection;
public class JNATest {
// static {
// System.loadLibrary("libspotify");
// }
public interface JLibspotify extends Library {
int sp_session_create(sp_session_config config, PointerByReference sess);
int sp_session_login(sp_session session, String username, String password);
// All the other methods defined by the API
}
public static class sp_session extends PointerType {
public sp_session(Pointer address) {
super(address);
}
public sp_session() {
super();
}
}
public static class sp_session_config extends Structure {
public int api_version = 7; // The version of the Spotify API your application is compiled with.
public String cache_location = ".";
public String settings_location = ".";
public Pointer application_key; // Your application key.
public int application_key_size; // The size of the application key in bytes
public String user_agent = "jspotify";
public sp_session_callbacks callbacks; // Delivery callbacks for session events. NULL if not interested in any callbacks
public Pointer userdata; // User supplied data for your application
public boolean compress_playlists;
public boolean dont_save_metadata_for_playlists;
public boolean initially_unload_playlists;
}
public interface LoggedIn extends Callback {
public void logged_in(sp_session session, int error);
}
public interface LoggedOut extends Callback {
public void logged_out(sp_session session, int error);
}
public interface ConnectionError extends Callback {
public void connection_error(sp_session session, int error);
}
public static class sp_session_callbacks extends Structure implements Structure.ByReference{
public LoggedIn logged_in; // Called when login has been processed and was successful
public LoggedOut logged_out; // Called when logout has been processded. Either called explicitly if you initialize a logout operation, or implicitly if there is a permanent connection error.
public Callback metadata_updated; // Called whenever metadata has been updated. If you have metadata cached outside of libspotify, you should purge your caches and fetch new versions.
public ConnectionError connection_error; // Called when there is a connection error, and the library has problems reconnecting to the Spotify service. Could be called multiple times (as long as the problem is present)
public Callback message_to_user; // Called when the acces point wants to display a message to the user. In the desktop client, these are shown in a blueish toolbar just below the search box.
public Callback notify_main_thread; // Called when processing needs to take place on the main thread. You need to call sp_session_process_events() in the main thread to get libspotify to do more work. Failure to do so may cause request timeouts, or a lost connections.
public Callback music_delivery; // Called when there is decompressed audio data available.
public Callback play_token_lost; // Music has been paused because only one account may play music at the same time.
public Callback log_message; // Logging callback
public Callback end_of_track; // End of track. Called when the currently played track has reached its end.
public Callback streaming_error; // Streaming error. Called when streaming cannot start or continue.
public Callback userinfo_updated; // Called after user info (anything related to sp_user objects) have been updated.
public Callback start_playback; // Called when audio playback should start. For this to work correctly the application must also implement get_audio_buffer_stats(). This function is called from an internal session thread - you need to have proper synchronization. This function must never block.
public Callback stop_playback; // Called when audio playback should stop. For this to work correctly the application must also implement get_audio_buffer_stats(). This function is called from an internal session thread - you need to have proper synchronization. This function must never block.
public Callback get_audio_buffer_stats; // Called to query application about its audio buffer. This function is called from an internal session thread - you need to have proper synchronization! This function must never block.
}
private static final char[] APP_KEY ={/* Appkey here**/;
public static void main(String[] args) throws InterruptedException {
JLibspotify lib = (JLibspotify) Native.loadLibrary("spotify", JLibspotify.class);
sp_session_config cfg = new sp_session_config();
Pointer ptr = new Memory(APP_KEY.length);
ptr.write(0, toBytes(APP_KEY), 0, APP_KEY.length);
cfg.application_key = ptr;
cfg.application_key_size = APP_KEY.length;
sp_session_callbacks sessCallbacks = new sp_session_callbacks();
LoggedIn loggedInCallback = new LoggedIn() {
public void logged_in(sp_session session, int error) {
System.out.println("logged_in() called");
}
};
ConnectionError connectionErrorCallback = new ConnectionError() {
public void connection_error(sp_session session, int error) {
System.out.println("connection_error() called");
}
};
LoggedOut loggedOutCallback = new LoggedOut() {
public void logged_out(sp_session session, int error) {
System.out.println("logged_out() called");
}
};
sessCallbacks.logged_in = loggedInCallback;
sessCallbacks.connection_error = connectionErrorCallback;
sessCallbacks.logged_out = loggedOutCallback;
sessCallbacks.log_message = new Callback() {
public void callback(sp_session session, String message) {
System.out.println("log_message() called:" + message);
}
};
cfg.callbacks = sessCallbacks;
PointerByReference sessionPbr = new PointerByReference();
int error_id = lib.sp_session_create(cfg, sessionPbr); // CRASHES HERE
System.out.println("sp_session_create returned " + error_id);
//
sp_session mySession = new sp_session(sessionPbr.getValue());
error_id = lib.sp_session_login(mySession, "foo", "bar");
System.out.println("sp_session_login returned " + error_id);
Thread.sleep(1000);
}
public static byte[] toBytes(char[] key){
byte[] b = new byte[key.length];
for(int i =0; i < key.length; i++){
if(key[i] > 127){
b[i] = (byte)(key[i] - 256);
}else{
b[i] = (byte)key[i];
}
}
return b;
}
}
Here's a C program which does the same thing (with fewer callbacks -- you'll need to add more). It's for OS X so you may need to change the #include. As I can't get spotify in Australia I can't test it to see whether a successful login hits a callback, but the logging callback works.
#include <stdio.h>
#include <libspotify/api.h>
void SP_CALLCONV log_message(sp_session *session, const char *data) {
fprintf(stderr,"log_message: %s\n", data);
fflush(stderr);
}
void SP_CALLCONV connection_error(sp_session *session, sp_error error) {
fprintf(stderr,"connection_error: %d\n", error);
fflush(stderr);
}
int main(int argc, char** argv) {
static byte APP_KEY[] = {
/*the API key */};
static sp_session_callbacks callbacks;
callbacks.log_message = log_message;
callbacks.connection_error = connection_error;
static sp_session_config cfg;
cfg.callbacks = &callbacks;
cfg.api_version = 7;
cfg.cache_location = ".";
cfg.settings_location = ".";
cfg.user_agent = "jspotify";
cfg.application_key = APP_KEY;
cfg.application_key_size = sizeof(APP_KEY);
sp_session* mySession;
int code = sp_session_create(&cfg, &mySession);
printf("sp_session_create returned %d\n", code);
sp_session_login(mySession, "foo", "bar");
printf("sp_session_login returned %d\n", code);
sleep(10);
}
If the C program calls callbacks which the Java version doesn't, then perhaps there's something wrong with the use of jna -- if not, perhaps there's something more to understand about spotify and when it calls callbacks. I agree that the docs seem to say that a successful login will call a callback, but perhaps they're out of date?