Special Effects and Game Development
in Java(TM) - Exceptions, static classes and how to put a
thread to sleep
by Anibal Wainstein
3.0.3 Exceptions, static
classes and how to put a thread to sleep
You may have notice that the applet in the last section was
very processor intensive. Maybe it is not necessary to update
"Hello Sweden!" every millisecond, it is enough
doing that once per second or less. We must now put a delay
in the run() method's loop. With the method sleep(), which
exist in the Thread class, we can get the thread to "sleep"
a number of milliseconds. This method is a so-called static
method. A method of this type may be called without having
to create an instance of the class (in other words, without
having to create an object, based on that class). So you can
simply write:
Thread.sleep(1000); Now the thread
will sleep for exactly 1000 milliseconds (which is exactly
one second). Static classes can be useful sometimes if you
happen to have a very useful function in a class that you
use a lot. Then it can be a good idea top make the function
static and to be able to save some memory by not having to
allocate memory for a new object. The memory that is required
for a static method is allocated first when the Java VM encounters
the class where the static method is. All the future objects
created and based on that class will always use the same memory
cell where the static method exist.
There is something that you must consider. Static methods
cannot work with non-static variables in the same class. However,
this is not true if the variables are also static.
Why, do you ask? Because you have not allocated memory for
these variables (created a new object). They simply do not
exist when the static function is called! The effect
of using static variables is that if you have several objects
based on the same class, then they will all share the same
variable. That means that if a static variable is manipulated
in one object then the content of the other statical variables
in the other objects are also changed.
Now you probably think that you can use this method freely
and put it in your loop. No, I am sorry, we are not quite
there yet. The problem with the sleep() method is that it
throws an exception that you must catch. Exceptions
are used in Java by methods to tell to the class calling them
that something went wrong. In this case another thread may
interrupt the sleeping process. You must know what
happened and therefore the function throws an exception. This
is of more bother than use, because if you do not catch the
exception, then the applet is stopped, or as in some cases,
the compiler will simply not accept it. First, you place the
method in a try-loop and then you catch its exception
in a catch statement:
try {
Thread.sleep(1000);
}
catch (InterruptedException e)
{
System.out.println("Something interrupted the sleep() method")
}
The catch loop requires an argument which must be an exception
class. The interruption class is named InterruptedException
and it is thrown by sleep(). There are many types of exceptions,
and all are subclasses to the Exception class. Other well
known exceptions are NullPointerException (appears when you
have tried to use a null reference), ArrayIndexOutOfBoundsException
(appears when you have specified a negative or too high index
on an array) and IOException (an error occurred when reading
a file).
To make our "effect" more interesting, we remake
the run() method in the last section:
public void run()
{ while (true)
{
showStatus("Long");
try {Thread.sleep(1000);}
catch(InterruptedException e) {}
showStatus("Live");
try {Thread.sleep(1000);}
catch(InterruptedException e) {}
showStatus("Java!");
try {Thread.sleep(1000);}
catch(InterruptedException e) {}
}
}
In order to make the code more easy to read, I have written
the pause code on two lines and removed the println() message,
because it is not very interesting in this case to know if another
thread interrupts the waiting process. Can you guess what will
happen now? First, the message "Long" is written to
the status window, then the thread will wait one second and
then "Live" will be written, after another second,
the string "Java!" is written. One second later, the
program will start over again.
Click here and you will
see.
Now you will also notice that your computer is not working
so hard compared with the other example.
Next Page >>
|
| |
|