Here are some Frequently-Asked-Questions (with answers ;-) and some
common mistakes people make when trying to run JR programs. Some of
this information applies specifically to UC Davis's CS
department's CSIF systems, but it is also likely to apply to other
systems.
- Simple things:
- "jr Foo
jrvm exception: java.lang.ClassNotFoundException: Foo
java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: Foo"
You've probably misspelled the name of your main class "Fooo".
Suggestion: use "jrgo". You don't specify the name of the main
class to "jrgo"; instead, it will be able to figure that out (in most
cases).
- "main.jr:6: unreported exception
java.lang.InterruptedException;
must be caught or declared to be thrown". Thread.sleep (or some
other
method that can throw the above exception) needs to be in a try/catch
block. See, e.g., p11 of the JR book.
- My JR program can't create all its processes!
- I get errors like "jrvm exception: unable to create new native
thread; java.lang.OutOfMemoryError: unable to create new native thread"
- Be sure you're not trying to create too many processes,
e.g., via an infinite loop that sends to an op-method.
- How many processes is "too many"? It depends on your
system, but somewhere around 200-300 should work on most systems.
(You might find the program in vsuite/environment/maxproc/jr useful to
get an idea of what your system supports.) However, an important
detail: we've seen systems configured such that they restrict the
number of threads that can be created due to their limit on
stacksize. In particular, on one such group of systems, under
[t]csh, the stacksize limit was set to 256M ("limit"), which
effectively limits the number of threads to about 12. A more
reasonable setting is 8192K ("limit stacksize 8192") or even
4096K. And you might want to change the maxproc if it's too low;
a more than reasonable setting is 1024 ("limit maxproc 1024"). Also, if
you do change stacksize or maxproc, do so in your .cshrc so that the
change also applies to multi-VM JR programs. Note that we've seen
systems whose settings vary according to which shell you're using, so
be careful with that. (Under bash, use "ulimit" instead of
"limit" and place the commands in your .bashrc file.)
- My JR program using Swing or AWT doesn't work!
- My program seems just to terminate after it starts up.
See discussion on p309 of the JR book. Add a "sleeper process" to
your JR code or use "jr -explicit name_of_main_class".
- My program just hangs without opening up any windows on the
screen. Be sure your constructors for the class that is creating
the
window terminates.
- Make sure DISPLAY is set properly (see the instructions page). If you're using
VNC, you'll need to do something like "vncserver :4" and then use
"setenv DISPLAY :4.0" in your .cshrc.
- As a good, quick test: Make sure the BnB program (in the
codeextract) runs for you.
- My multi-VM program doesn't work!
- I get errors that say something like "Cannot create
virtual machine on pc51..." or "Cannot create virtual machine on
localhost...".
- Be sure to check that the tests in Steps 4 and 5 on the instructions page work. Even if you
checked those previously and your program used to work on this
particular system, sometimes systems get upgraded, etc., which can
break the ssh setup.
- Pay special attention that CLASSPATH and DISPLAY are exactly
as specified on the instructions page.
- Try your program on a different system(s). Again,
sometime system problems or changes can break things.
- Be sure your program isn't trying to create too many
VMs. (How many you actually can create depends on system,
etc., but on CSIF I wouldn't try to create more than about 10 on a
single host.) Also, see notes on maximum
number of processes.
- My program isn't able to open files. Non-main JR VMs
execute in the home directory rather than the
current directory, which might make a difference if the JR program uses
relative pathnames for files.
- I'm getting
"edu.ucdavis.jr.jrCommunicationException: java.rmi.MarshalException:
error marshalling arguments; nested exception is:
java.io.NotSerializableException: Server
...".
You'll need to make the Server class "implements
java.io.Serializable". See p152 and p305 in the JR text.
- I'm getting a weird, ugly bunch of errors:
"java.lang.NoSuchMethodException:
MainFrame.<init>(java.lang.String)
at
java.lang.Class.getConstructor0(Class.java:2647)
at
java.lang.Class.getConstructor(Class.java:1629)
at
edu.ucdavis.jr.jrx.jrvm.innerCreateInstance(jrvm.java:163)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at
java.lang.reflect.Method.invoke(Method.java:585)
at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at
sun.rmi.transport.Transport$1.run(Transport.java:153)
at
java.security.AccessController.doPrivileged(Native Method)
at
sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at
java.lang.Thread.run(Thread.java:595)
jrvm exception: java.rmi.ServerException: RemoteException occurred in
server thread; nested exception is:
java.rmi.RemoteException:
java.lang.NoSuchMethodException:
MainFrame.<init>(java.lang.String)
edu.ucdavis.jr.jrCommunicationException:
java.rmi.ServerException:RemoteException occurred in server thread;
nested exception is:
java.rmi.RemoteException:
java.lang.NoSuchMethodException:MainFrame.<init>(java.lang.String)
at
edu.ucdavis.jr.jrx.jrvm.createInstance(jrvm.java:139)
at Start.main(Start.java:23)
...".
You probably forgot to make your remote class constructors public.
- Miscellany:
- "error: Unexpected end of file encountered while reading the
class file". You've probably exceeded your disk quota.
- "sh: Translator.out: Permission denied
expected 0, got 1 from jrc"
when running jrv. You're trying to run jrv in a directory where
you don't have write permissions. If you really want to run jrv,
then copy the vsuite to someplace where you do have write permissions
(and then use "jrv -d ." in that new directory). Do you need to
run jrv? If you're using the already installed JR implementation
in the CSIF, then no. If you've installed your own version of JR
on CSIF, then you should run jrv, but first: why do you need your own
JR when you can just use the already installed one? If you're
running JR on your home machine, then running jrv is a good idea to
check that it works.
- "An exception has occurred in the jr translator ...".
Oops, looks like you found a bug. Please send us your complete program (all .jr files) and
we'll try to fix it.