Unable to Run Sample JDI Trace: Error: Can not Find or Load Main Class


I run in command line the following program as an example app:

java -cp "D:\projects\PDFJavaFX\lib\PDFRenderer-0.9.1.jar" com/sun/pdfview/PDFViewer

Then I run in command line the JDI trace example:

java -cp "C:\Program Files\Java\jdk1.7.0_13\lib\tools.jar;D:\projects\JDI_Trace\jar\trace.jar;D:\projects\PDFJavaFX\lib\PDFRenderer-0.9.1.jar" com/sun/tools/example/trace/Trace com/sun/pdfview/PDFViewer

I get this error:

Error: Could not find or load main class com.sun.pdfview.PDFViewer
 -- VM Started --
 -- The application exited --

The example app runs correctly, and it is included in the classpath. What's the cause of this? What am I missing?


Edit: It looks like it is classpath related.

I did get this to work (well, it popped up the GUI but then crashed pretty quickly). I used the classpath environment variable instead of -cp:

C:\cos126\dev\debug>set CLASSPATH=%CLASSPATH%;c:\tmp\PDFRenderer-0.9.1.jar;c:\tmp\debug

So, not pretty, but then it did work. So it looks like the newly created VM doesn't automatically inherit -cp. I am optimistic, but not sure, that there might be an option you can change when starting the new VM to do this for you. To see the "documentation" for the VM launching options, you can add some code like

for (Map.Entry<String, Connector.Argument> arg : arguments.entrySet()) {
   System.out.println(arg.getValue().name()+" "+arg.getValue().description());

to Trace.java. When I do this, it prints out

home Home directory of the SDK or runtime environment used to launch the application
options Launched VM options
main Main class and arguments, or if -jar is an option, the main jar file and arguments
suspend All threads will be suspended before execution of main
quote Character used to combine space-delimited text into a single command line argument
vmexec Name of the Java VM launcher

so maybe one of those is useful? Good luck!

By the way, this is what I used JDI for:


I am in the process of making the source shareable, if you want to see it (although I'm not 100% sure it will be of use).