Meaningless Drivel is fun!*
The moose likes Beginning Java and the fly likes Running jar file on another computer Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Running jar file on another computer" Watch "Running jar file on another computer" New topic
Author

Running jar file on another computer

Edward Mulligan
Greenhorn

Joined: Feb 19, 2006
Posts: 5
I recently created a jar file out of a program I'd made using the command prompt. I included a manifest file and since I wasn't sure what other files to include I added the entire folder my program was in. The jar ran perfectly on my computer. However, when I tried e-mailing it and running it on a different computer I was told the main class couldn't be found. How do I fix this?

Sorry if this is the wrong place to post this.
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 42599
    
  65
Including a folder in the jar file sounds like a dubious proposition (or did you mean the contents of the folder?)

Have a look at the jar file section of the Java Tutorial, particularly "Working with Manifest Files". It explains how to set the Main-CLass and Class-Path headers, which I think are what you need to use.


Ping & DNS - my free Android networking tools app
Edward Mulligan
Greenhorn

Joined: Feb 19, 2006
Posts: 5
Sorry, I was unclear. I included the entire contents of the folder my program was in, not the folder.

I used the command jar cmf manifest.txt myProgram.jar * in command prompt.

My manifest file was Main-Class: mainClass
(blank line)

As a test I sent my folder with the program in it to the trash can along with the jar. Then I downloaded the jar I e-mailed myself and ran it. It still worked. However, on a different computer with java installed I'm told the main class cant be found.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

I'll be honest: I've encountered this problem as well, and haven't been able to figure it out. So if there are any executable jar experts here...


"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
Edward Mulligan
Greenhorn

Joined: Feb 19, 2006
Posts: 5
Alright, so apparently this wasn't as much of a beginner's question as I thought this was. Anyway this topic can get moved to a different forum where someone might know the answer?
Ken Blair
Ranch Hand

Joined: Jul 15, 2003
Posts: 1078
Need more information. What does your manifest file look like? How is it being run on the other system (e.g. command line, double click)? Have you tried running it another way, for example running it from the command line successfully and failing on a double click could indicate a problem with the association in the OS. Creating an executable JAR file is pretty simple really, it's just common stupid mistakes that get people, including myself.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Okay, I decided to dig into this.

When I tried to run the jar from the command line on another Windows machine, I got an UnsupportedClassVersionError (Unsupported major.minor version 49.0). It turns out the program was compiled with Java 1.5, but the destination machine has a 1.4 JRE.

So I made a simplier test program (just a JFrame) that doesn't use any new 5.0 features and made a new jar. Then I recompiled using -source and -target options of 1.4, and made another new jar. As expected, the 5.0 jar failed on the destination machine. The 1.4 jar worked when running from the command line, but double-clicking on the jar just quickly opened and closed the Command window. So I re-associated the jar file type to open with javaw (to suppress the Command Prompt window), and this finally corrected the problem.

Edward: I would be very interested to know if this helps with your situation.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Originally posted by Ken Blair:
... Creating an executable JAR file is pretty simple really...

Maybe. But getting it to run consistently on Windows machines is pretty frustrating.

After getting the jar to work on a test machine (see above), I tried sending it to a regular user. They report the following error when attempting to run the jar: "Java Virtual Machine Launcher: fatal exception occured. Program will exit."

I've seen some threads on the Sun boards about this, but no answers. I also found this thread here in Java Beginners, but the proposed solution doesn't look promising for any wide-scale deployment (and I don't have a jar inside the jar).

I'm thinking it might be this bug, but it's odd that the jar works fine on a test machine (supposedly configured the same way with Java 1.4.2 and associating jar files with javaw).
[ July 21, 2006: Message edited by: marc weber ]
Ken Blair
Ranch Hand

Joined: Jul 15, 2003
Posts: 1078
It still usually boils down to the system being configured improperly or an application doing something it probably shouldn't. An executable JAR should run fine on any machine that's properly configured. Of course, the properly configured part is the key. In many cases it's probably enough to simply have them install the latest version of the JRE. For other cases I think that's when it's time to look at a Java-aware installer. We've all grown used to needing installers for applications, why does Java seem to be the exception?
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Originally posted by Ken Blair:
...In many cases it's probably enough to simply have them install the latest version of the JRE...

Yes, but unfortunately this is a huge roadblock in many business environments. They just upgraded a few months ago to 1.4.2, and users are prohibited from downloading/installing new software.

(Note: This is not a live project I'm working on. I'm just pursuing this out of my own curiosity.)
Ken Blair
Ranch Hand

Joined: Jul 15, 2003
Posts: 1078
I understand your point, but is your application not new software to begin with? If they can install your new software then what's to keep your software from using a Java-aware installation tool to provide a compatible JRE if one is necessary? Software bundled with a compatible version of DirectX as an example is pretty common in my experience. I don't view bundling a JRE with it any differently.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Originally posted by Ken Blair:
... If they can install your new software then what's to keep your software from using a Java-aware installation tool to provide a compatible JRE if one is necessary? ...

This is a corporate environment. It's not rational. (Think of Dilbert's Mordac character, Preventer of Information Technology, who "believes his mission is to make it as difficult as possible for employees to use their computers or the network.") If this were a "real" application, we would probably need to bury the code inside a Lotus Notes database to get it out there. But as I said, I'm just pursuing this out of my own curiosity to see how viable an executable jar really is on Windows machines.

Okay, to be more specific (or honest)... Let's say I wanted to write a silly little app as a joke -- like a "Project Cost Estimator" that basically just spits out random numbers -- and send it to a few people as an email attachment. For something on that scale, it would be nice to send a small "executable" file without a whole new runtime environment.
Ken Blair
Ranch Hand

Joined: Jul 15, 2003
Posts: 1078
Then it still comes back to them having a properly configured machine and writing code for the oldest JRE you're willing (or forced) to deal with. I mean, if I compiled a C++ program that required DirectX 9 and they hadn't upgraded yet I'd have the same problems. The solution is to either update the platform or write applications that don't require DirectX 9.

In a more 'serious' application you'd have to update the platform. For your purposes you'd have to stick to what they've got available. Of course, nothing can help you when their system isn't properly configured. But that applies to anything and you can always include a run.bat for those with associations that aren't setup right.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Originally posted by Ken Blair:
Then it still comes back to them having a properly configured machine and writing code for the oldest JRE you're willing (or forced) to deal with...

Absolutely. I still have things to test next week, but I'm leaning towards that bug I mentioned above as being the main glitch here. Thanks for your help!
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Running jar file on another computer