Java Invoker  Java Invoker

go to home page Student Projects full screen, hide local find menu Google search web for more information on this topic jump to foot of page translate this page with Babelfish by Roedy Green ©1996-2008 Canadian Mind Products
This essay is about a suggested student project in Java programming. This essay gives a rough overview of how it might work. It does not describe an actual complete program. I have no source, object, specifications, file layouts or anything else useful to implementing this project. Everything I have to say to help you with this project is written below. I am not prepared to help you implement it; I have too many other projects of my own.

I do contract work for a living, which could include writing a program such as this. However, I don’t do people’s homework for them. That just robs them of an education.

You have my full permission to implement this project any way you please.

This is a very simple project for a C programmer to make Java more useful in Windows. In Windows 95/98/ME/NT/W2K/XP/W2K3, you can’t just click on a jar or class file to execute it. Sun made a deliberate and stubborn error in the design of java.exe that made it impossible to set up .class as a standard executable file extension. To run a class file, from the command line you must write:
java.exe X … -cp … etc.
without the .class , not:
java.exe X.class … -cp … etc.
Windows has a mechanism for adding extra junk to the command line for extension associations, but not for stripping the extension. To invoke a jar file from the command line, happily you don’t need to strip the .jar extension, like this.
java.exe -jar X.jar -cp … etc.
This means you can directly set up .jar association like this:
java.exe -jar "%1" -cp… etc.
How then to make *.class files similarly clickably executable? You need to write a little C program called invoke, that simply strips the .class and passes the command line parameters on to java.exe with the exec function.

Then to set up your .class association you write:

C:\someplace\invoke.exe "%1" -cp… etc.
There is a second problem. The parameter you put on the java command line is not a file name. It is the name of a class. Java.exe won’t accept things like this:
java.exe C:\mdir\X … -cp … etc.
What were these turkeys at Sun thinking? So one other thing invoke has to do is change the current directory to where the class file lives, so that the generated unqualified class name will work on the java.exe command line.

Now what happens when the class in a package? The class name is something like com.mindprod.mypackage.X . The relationship between this and the filename is tenuous. You might run screaming from the room.

Alternatively you could disassemble java.exe and fix it. If you want to get fancy, you should be able to configure the directory where java.exe lives, and have invoke automatically add some standard gobbledegook to the command line for you, either by hard coding it in, or by putting it in an INI file, or by taking it off a special invoke command line switch.

SmartJ took this idea considerably further. Unfortunately it does not support Java 1.2 or 1.3. Perhaps you might eventually write a SmartJ capable of dealing with all JVMs.


CMP homejump to top
CMP logo
feedback Please email your feedback for publication, errors, omissions, broken/redirected link reports
and suggestions to improve this page to Roedy Green : feedback email
made with CSS
HTML Checked!
ICRA ratings logo
mindprod.com IP:[65.110.21.43]
Your face IP:[38.103.63.18] The information on this page is for non-military use only.
You are visitor number 4,070. Military use includes use by defence contractors.
You can get a fresh copy of this page from: or possibly from your local J: drive (Java virtual drive/mindprod.com website mirror)
http://mindprod.com/project/javainvoker.html J:\mindprod\project\javainvoker.html