问题描述
我按照网上写了列出电脑可用端口的程序,在Java上运行成功,用OSGI在java上也没有问题,但是当我将这个程序放入虚拟机中的OSGI上出现问题,我的虚拟机是linux系统。原因猜想是因为串口包RXTXcomm.jar是第三方包,虚拟机上不能读取路径,我已经将RXTXcomm.jar和libSerialPort.so放入虚拟机中java/lib/ext和java/bin下,但是还是报错,请问应该如何解决,报的错为:org.osgi.framework.BundleException:Theactivatorkommunication.ActivatorforbundleKommunicationisinvalidatorg.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:156)atorg.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:751)atorg.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:284)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:276)atorg.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:252)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:324)atorg.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:155)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:156)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:141)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:105)atjava.lang.Thread.run(Thread.java:534)Causedby:java.lang.ClassNotFoundException:kommunication.Activatoratorg.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)atorg.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)atjava.lang.ClassLoader.loadClass(ClassLoader.java:235)atorg.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)atorg.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:149)...14moreNestedException:java.lang.ClassNotFoundException:kommunication.Activatoratorg.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)atorg.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)atjava.lang.ClassLoader.loadClass(ClassLoader.java:235)atorg.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)atorg.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:149)atorg.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:751)atorg.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:284)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:276)atorg.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:252)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:324)atorg.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:155)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:156)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:141)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:105)atjava.lang.Thread.run(Thread.java:534)NestedException:java.lang.ClassNotFoundException:kommunication.Activatoratorg.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)atorg.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)atjava.lang.ClassLoader.loadClass(ClassLoader.java:235)atorg.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)atorg.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:149)atorg.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:751)atorg.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:284)atorg.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:276)atorg.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start(FrameworkCommandProvider.java:252)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:324)atorg.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute(FrameworkCommandInterpreter.java:155)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand(FrameworkConsole.java:156)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:141)atorg.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:105)atjava.lang.Thread.run(Thread.java:534)希望大家给予一些提点,谢谢
解决方案
解决方案二:
将RXTXcomm.jar和libSerialPort.so放入环境变量中。实在不行将jar解压缩成class跟你自己应用程序的class放在一起
解决方案三:
谢谢你的解答。但是我按照你的方法把jar解压成class,并放在应用程序下,运行还是报同样的错。