views:

52

answers:

2

Hi,

I've built my application in Netbeans 6.8. The application contains various references to third party products (such as Microsoft database driver for SQL Server and JIDE).

When compiled it produces a dist folder that I thought you could simply xcopy to a location and it would work.

When I run my application, as soon as it encounters a reference in a form to the JIDE classes the application reports an error and exits.

Essentially the stack trace is:

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)

I have the JAR files copied into the lib folder in the folder where my jar file is.
\MyApp\MyJar.jar
\MyApp\lib\all application jars

However, when I copy the contents of the lib folder to C:\Program Files\Java\jre6\lib\ext then everything works fine.

Am I missing something? I am running on Vista SP2.

I have built a new simple project with the same reference to the JIDE components and compiled it. When I run the jar file, the application runs up and displays the components. The only visible difference I can see between the projects is naming conventions on the packages used. Our main application does not conform to standard com.company.application naming and has various package names contained within. My application uses the com.company.application convention.

Cheers,

Andez

+2  A: 

This may be a classpath problem, when you execute a java program you need to set the classpath to include all the libraries your program needs. By default you will load jre-wide libraries, which is why placing jar files in %JAVA_HOME%/lib or %JAVA_HOME%/lib/ext will work (but these jar's will be available to any code you execute which you probably didn't intend).

Make sure you are providing a -classpath argument in your command line, for example

java foo.bar.Baz -classpath .;./lib/jide-oss.jar

Jon Freedman
s/may be/is/ :-) Welcome to SO.
pst
So something like: C:\Windows\System32\java.exe -jar "MyAppJarFile.jar" -classpath .;./lib/My3rdPartyLib.jar Do I need to specify each jar file I am referencing? Or can I supply a * wildcard? I did try this but seems to throw the same exception on the same line of code. I'm looking at http://download-llnw.oracle.com/javase/1.4.2/docs/tooldocs/windows/classpath.html
Andez
I played about in the Jar file. I opened it using WinRAR. When netbeans compiled my application it created a INDEX.LIST file under folder META-INF. I simply deleted this file and everything is fine. I noticed in my other application that it did not build this and I am unsure why? Any ideas? Cheers Andez
Andez
INDEX.LIST should't cause you any issues, see http://download.oracle.com/javase/6/docs/technotes/tools/windows/jar.html#i for an explaination of what that file isSee http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath for details of setting multiple jars on the classpath
Jon Freedman
Yep it shouldnt cheers Jon put was a spurious META-INF package that somebody added to our application.
Andez
A: 

Cheers for trying to help Jon.

I tried to simplify the post on here as I thought it was a classpath issue. Having you giving me some incling and something someone in the office said about the manifest I had a look at the jar file contents.

Our application consists of many 3rd party jars and many packages - which included imported class files from the 3rd parties.

I came across the META-INF folder in the jar and noticed an INDEX.LIST and MANIFEST.MF. My other clean project only had the MANIFEST.MF file. I deleted the INDEX.LIST from our application jar file and everything worked. But everytime I compiled it generated the INDEX.LIST. I had a look on the ANT site but could not see why this was being generated.

I looked at the souce code again and there was a META-INF package in the project. Not too sure where it came from or who put it there. But I deleted it and everything seems to work at the minute - although I've only tested about 5% of the application.

Cheers,

Andez

Andez