Hi Scott:I am trying to remember how to build your sensor package in Eclipse using pom.xml. I am not familiar with Maven. Can you give a hand? The packages involved are labquest-jna, sensor, sensor-examples, sensor-vernier, and I have imported thirdparty.Do you have a web page for instruction?Thanks,Charles
Thanks. I have no problem checking out and building the project from GIT using Eclipse. There is no compilation error.However, it seems the LabQuest device cannot be found (java.lang.ClassNotFoundException: org.concord.sensor.vernier.labquest.LabQuestSensorDevice). The follow is the code. Where did it go wrong?private int deviceId = DeviceID.VERNIER_LAB_QUEST;private SensorDevice device;private JavaDeviceFactory deviceFactory;protected volatile float[] data = new float[256];protected Runnable shutdown;private Window owner;public MRSensorService() {...}private void prepareDevice() {deviceFactory = new JavaDeviceFactory() {public void log(String message) {System.out.println("DeviceTest: " + message);}};device = deviceFactory.createDevice(new DeviceConfigImpl(deviceId, null));}Stack trace:java.lang.ClassNotFoundException: org.concord.sensor.vernier.labquest.LabQuestSensorDeviceat java.net.URLClassLoader$1.run(Unknown Source)at java.net.URLClassLoader$1.run(Unknown Source)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at org.concord.sensor.device.impl.JavaDeviceFactory.createDevice(JavaDeviceFactory.java:179)at org.concord.frame.MRSensorService.prepareDevice(MRSensorService.java:56)
The sensor projects work fine in Eclipse. However, when I include labquest-jna in a jardesc file, the resource folder in it somehow is placed outside the org package (see the following screenshot). As a result, when I try to run the jar file, it says that the DLL file is not found. The SVN version doesn't have this problem. Can you tell me how to include the labquest-jna package in a jar?
That seems to be working in terms of including the DLL folders.
However, when the jar is run, a new problem occurred:
Loading sensor device: org.concord.sensor.vernier.labquest.LabQuestSensorDeviceerror sending command: 54org.concord.sensor.labquest.jna.LabQuestExceptionat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:525)at java.lang.Class.newInstance0(Class.java:372)at java.lang.Class.newInstance(Class.java:325)at org.concord.sensor.labquest.jna.SingleThreadDelegator.invokeMethod(SingleThreadDelegator.java:63)at org.concord.sensor.labquest.jna.SingleThreadDelegator$1.invoke(SingleThreadDelegator.java:35)at $Proxy1.getSensorId(Unknown Source)at org.concord.sensor.vernier.labquest.LabQuestSensorDevice.getCurrentConfig(LabQuestSensorDevice.java:149)at org.concord.frame.MRSensorService.run(MRSensorService.java:70)at org.concord.frame.MRFrame.main(MRFrame.java:76)Caused by: org.concord.sensor.labquest.jna.LabQuestException: org.concord.sensor.labquest.jna.NGIOExceptionat org.concord.sensor.labquest.jna.LabQuestImpl.getSensorId(LabQuestImpl.java:128)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.concord.sensor.labquest.jna.SingleThreadDelegator.run(SingleThreadDelegator.java:90)Caused by: org.concord.sensor.labquest.jna.NGIOExceptionat org.concord.sensor.labquest.jna.LabQuestImpl.sendCmdAndGetResponse(LabQuestImpl.java:392)at org.concord.sensor.labquest.jna.LabQuestImpl.getSensorId(LabQuestImpl.java:125)... 5 moreLabQuest: closingLabQuest: called closeLabQuest: claimed to closeException in thread "main" java.lang.NullPointerExceptionat org.concord.sensor.impl.SensorUtilJava.experimentConfigToString(SensorUtilJava.java:70)at org.concord.sensor.impl.SensorUtilJava.printExperimentConfig(SensorUtilJava.java:64)at org.concord.frame.MRSensorService.run(MRSensorService.java:75)at org.concord.frame.MRFrame.main(MRFrame.java:76)Closing LabQuestSensorDevice.Exception in thread "Thread-5" java.lang.IllegalStateException: The thread has exited so no more methods can be calledat org.concord.sensor.labquest.jna.SingleThreadDelegator.invokeMethod(SingleThreadDelegator.java:47)at org.concord.sensor.labquest.jna.SingleThreadDelegator$1.invoke(SingleThreadDelegator.java:35)at $Proxy1.close(Unknown Source)at org.concord.sensor.vernier.labquest.LabQuestSensorDevice.close(LabQuestSensorDevice.java:103)at org.concord.sensor.vernier.labquest.LabQuestSensorDevice$1.run(LabQuestSensorDevice.java:58)
What puzzles me is that it works fine with Eclipse. It is only the jar file that is exported that fails...
--
Sincerely yours,
Charles Xie, Ph.D.Resume: http://www.concord.org/~qxie
The Concord ConsortiumSkype: charles.xie3
Blog: http://molecularworkbench.blogspot.com/
________________________________________________
Bridging the gap between research and education
I finally got it. It is the JNA versioning problem. I used V3.0.9 inherited from SVN. After updating to 3.5.1, it works now.Thanks for your help.
On Fri, Jan 25, 2013 at 5:08 PM, Scott Cytacki <scyt...@concord.org> wrote:
One thing that just came to mind is:How are dealing with the JNA dependency?The jar exporter in eclipse using the settings I described would not include the JNA classes. So I'm guessing you have JNA added a different way.The sensor projects are currently using JNA version 3.5.1If you are using an older version I'd guess that is what is causing the error.