我用Netbeans 6.8构建了我的应用程序。该应用程序包含对第三方产品(如用于SQL Server和JIDE的Microsoft数据库驱动程序)的各种引用。
在编译时,它会生成一个dist文件夹,我想您可以简单地将它xcopy到一个位置,它就可以工作了。
当我运行我的应用程序时,只要它在表单中遇到对JIDE类的引用,应用程序就会报告错误并退出。
从本质上讲,堆栈跟踪是:
java.lang.reflect.InvocationTargetException
Caused by: java.lang.ClassNotFoundException: com.jidesoft.gantt.PeriodBackgroundPainter 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)
我将JAR文件复制到jar文件所在文件夹的lib文件夹中。
\MyApp\MyJar.jar
\MyApp\lib\所有应用程序jars
但是,当我将lib文件夹的内容复制到C:\Program Files\Java\jre6\lib\ext时,一切工作正常。
我是不是遗漏了什么?我在Vista SP2上运行。
我用对JIDE组件的相同引用构建了一个新的简单项目,并对其进行了编译。当我运行jar文件时,应用程序启动并显示组件。我能看到的两个项目之间唯一明显的区别是使用的包的命名约定。我们的主应用程序不符合标准的com.company.application命名,其中包含不同的包名。我的应用程序使用com.company.application约定。
干杯,
Andez
发布于 2010-08-12 20:44:21
为试图帮助乔恩干杯。
我试图简化这里的帖子,因为我认为这是一个类路径问题。你给了我一些抱怨,办公室里的人说了一些关于清单的话,我看了一下jar文件的内容。
我们的应用程序由许多第三方jars和许多包组成-其中包括从第三方导入的类文件。
我偶然发现了jar中的META-INF文件夹,并注意到一个INDEX.LIST和MANIFEST.MF。我的另一个clean项目只有MANIFEST.MF文件。我从我们的应用程序jar文件中删除了INDEX.LIST,一切都正常。但每次我编译它时都会生成INDEX.LIST,我在ANT网站上看了看,但不明白为什么会生成这个was。
我再次查看了源代码,发现项目中有一个META-INF包。不太确定它是从哪里来的或者是谁放的。但我删除了它,一切似乎都在那一刻正常工作--尽管我只测试了应用程序的5%。
干杯,
Andez
发布于 2010-08-12 16:39:37
这可能是类路径问题,当你执行一个java程序时,你需要设置类路径来包含你的程序所需要的所有库。默认情况下,您将加载jre范围的库,这就是将jar文件放在%JAVA_HOME%/lib或%JAVA_HOME%/lib/ext中的原因(但这些jar将可用于您执行的任何代码,而这些代码可能不是您想要的)。
确保在命令行中提供-classpath参数,例如
java foo.bar.Baz -classpath .;./lib/jide-oss.jar
https://stackoverflow.com/questions/3465923
复制相似问题