Transcript notes
Graphics in Java
CS 21b
The paint() Method
Method in a visual component that
specifies what that component looks
like
Particularly important for applets,
panels, and frames
Takes a Graphics object as a parameter
signature: void paint(Graphics g)
Graphics class contains drawing methods
Example
import java.awt.*;
import java.applet.Applet;
public class HelloAgain extends Applet {
public void paint(Graphics g) {
g.drawString(“Hello”,50,50);
}
}
The Graphics class
Methods: drawing commands such as
drawOval(int x, int y, int width, int height)
setColor(Color c)
fillOval(int x, int y, int width, int height)
For a complete listing of available
methods,
javap java.awt.Graphics
About paint()
Describes “current” picture
Not cumulative
if variables are used as arguments to the
drawing commands, and the variables are
updated, the drawing changes
repaint()
method called to explicitly update drawing
called automatically every few seconds
Animation Example
paint() defined as follows:
public void paint(Graphics g) {
g.drawString(“Hello”,x, 50);
}
init() with code that updates x:
x += 5;
repaint();
effect: String “moves” to the right
Listeners in Java
CS 21b
Listeners
ActionListener
used for button and text field events
refer to discussion on event models for
examples
WindowListener
when windows are closed, minimized, etc
Listeners, continued
MouseListener
when the mouse is clicked, pressed, or
released
MouseMotionListener
when the mouse is moved or dragged
Listeners are Interfaces
A listener imposes on the implementing
class that particular methods be defined
To find out what methods need to be
implemented, use javap
e.g., javap java.awt.event.MouseListener
Associating Listeners
to Visual Objects
Use addxyzListener() methods associate
listener objects to visual components
called on the visual object that needs
listening to
takes a listener object as a parameter
Effect:
a method on the listener object is invoked
when an event occurs on the visual object
WindowListener Methods
void
void
void
void
void
void
void
WindowActivated(WindowEvent)
WindowClosed(WindowEvent)
WindowClosing(WindowEvent)
WindowDeactivated(WindowEvent)
WindowDeiconified(WindowEvent)
WindowIconified(WindowEvent)
WindowOpened(WindowEvent)
WindowAdapter
Class that implements WindowListener
and provides defaults definitions for the
methods
Default definition: { }
When creating a listener, instantiate the
adapter and then override the methods
of interest (using anonymous classes)
Example:
Closing a Frame
// in the constructor ...
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
// no need to define the other methods
});
MouseListener Methods
void
void
void
void
void
MouseClicked(MouseEvent)
MouseEntered(MouseEvent)
MouseExited(MouseEvent)
MousePressed(MouseEvent)
MouseReleased(MouseEvent)
MouseMotionListener Methods
void MouseMoved(MouseEvent)
void MouseDragged(MouseEvent)
Mouse Event
Represents the state of the mouse
pointer when the event occurs
Most useful methods: getX() and
getY()
returns the coordinates of the mouse
Mouse Adapter Classes
MouseAdapter
implements MouseListener
{} definitions for all methods
MouseMotionAdapter
implements MouseMotionListener
{} definitions for all methods
Example:
Dragging a Circle
In paint(),
g.drawCircle(x, y, 10, 10);
Define:
MousePressed(): compare mouse pointer
coordinates with x and y, and check if circle
was “selected”
MouseDragged(): update x and y so that
the circle “moves” with the mouse
The Applet as Listener
Make the applet implement
MouseListener and
MouseMotionListener
In init(),
addMouseListener(this);
addMouseMotionListener(this);
define all seven mouse methods as
methods of the applet
Third-Party Listeners and
Adapters
In init(), create separate MouseListener
and MouseMotionListener objects
instantiate the corresponding adapters and
then, using anonymous classes, define only
the methods you care to define
associate these listeners to the applet
Exceptions
CS 21b
Definition
Exception: something unexpected that
can occur in the execution of a program
e.g., divide by zero or attempt to open a
file that does not exist
Java provides a way to handle
exceptions that are thrown:
the try-catch statement
Try-catch Statement
Syntax:
try { … } catch(Exception e) { ... }
Example:
try {
System.out.println(5/x);
} catch(Exception e) {
System.out.println(“/ by zero”);
}
Breaking out of the try Block
try {
statement1;
statement2; // if exception occurs here,
// statement3 will be skipped
statement3;
} catch(Exception e) {
statement4; // executed after exception
occurs
}
Why Use Try-catch ?
Alternative: if-statement
will be complex and hard to read if there
are several exceptions
what if the exception occurs within a loop ?
(will need to worry about breaking out of
the loop)
Using try-catch is a more robust and
structured way of handling exceptions
Exception Classes
Classes that extend the Exception class
Allows the programmer to be more
specific about the exception:
try { … } catch (ArithmeticException e) { …
}
Useful in a try-catch chain
Try-catch Chain
try { …
}
catch(SomeException se) { …
}
catch(AnotherException ae) { …
}
catch(YetAnotherException yae) { …
}
…
Files
CS 21b
File
Unit of secondary storage
Stores a sequence of bytes/characters
Stream
operations: read from stream, write to
stream
Associated with a filename
Often organized under a directory
hierarchy
Input/Output Classes
in Java
I/O viewed as a stream of bytes
As a stream of (Unicode) characters
parent classes: InputStream,
OutputStream
parent classes: Reader, Writer
Need to import java.io.*;
* An application employing files will use a subclass of
one of the above classes
Text Files
To create a text file, use PrintStream
To write to the text file use print
methods
f = new PrintStream(new
FileOutputStream(“filename.txt”));
f.println(…); // use like System.out
Make sure to close the file before
exiting the program
f.close(); // ensures contents are updated
Text Files, continued
To read from text files, use either
DataInputStream or BufferedReader
f = new DataInputStream(
FileInputStream(“filename.txt”));
f = new BufferedReader(new
FileReader(“filename.txt”));
Use read methods to read from file
s = f.readLine(); // reads a string
Exceptions
File operations throw exceptions so
make sure statements are enclosed in a
try-catch statement
Exceptions thrown:
IOException
Common (specific) exception:
FileNotFoundException
Reading a File from the Web
Use URL class from java.net
To open ,
wpage = new URL(address);
f = new BufferedReader(new
InputStreamReader(wpage.openStream()))
);
* address is a String specifying the webpage
address (e.g., “http://www.admu.edu.ph”)
Binary Files
Text files are often sufficient but
sometimes we want to store objects as
they are (not their text forms) in a file
Use ObjectOutputStream and
ObjectInputStream
operations: writeObject() and
readObject()
common technique: store objects in a
Vector and then save the Vector in the file
java.io.* Summary
There is a host of classes under this
package that serve a variety of
purposes
Hints:
use “javap java.io.classname” to find out
available constructors and methods
you often need to use FileInputStream,
FileOutputStream, FileReader, and
FileWriter to associate a name to the file
Threads
CS 21b
Threads in Java
Definition
unit of program control that represents an
execution sequence
Java supports multi-threaded execution
* Programs we have written up to this point
have been on a single thread of control
The Thread class
Thread creation
instantiate a class that extends Thread
instantiate the class Thread but provide a
run() method
Thread execution
let t refer to a thread object
t.start() causes the thread to execute its
run() method “in the background”
Example 1: PrintThread
PrintThread class extends Thread
Attributes: name & timedelay
Constructor sets name and timedelay
run method prints name twice but with
a time delay in between the print
statements
use Thread method sleep(timedelay)
run() Method
for PrintThread
public class PrintThread extends Thread {
...
public void run() {
System.out.println(name);
try { sleep(timedelay); }
catch(Exception e) {}
System.out.println(name);
}
…
}
Using PrintThread
PrintThread t1,t2,t3;
t1 = new PrintThread("tic",5000);
t2 = new PrintThread("tac",1000);
t3 = new PrintThread("toe",3000);
t1.start();
t2.start();
t3.start();
// expected output ? last output line should be tic
Example 2: MovingCircle
MovingCircle class extends Applet
Attributes: xpos & size (of circle)
paint() method: draws the circle
Thread created inside init()
provide initial values
run() method has a loop that continuously
updates xpos & size and then repaints
A button executes the thread (t.start())
MovingCircle class (attributes
& paint())
// sample animation using Threads
public class MovingCircle extends Applet {
int xpos = 5; // these variables will be updated
int size = 10; // on a different thread
...
public void paint(Graphics g) {
g.drawOval(xpos,50,size,size);
}
…
}
MovingCircle class
(thread code)
t = new Thread() {
public void run() {
while (xpos < 80) {
try {sleep(1000);} catch(Exception e) {}
xpos +=5;
size += 3;
repaint(); // forces paint() to be reexecuted
}
}}; // this statement placed inside the init() method
The Runnable Interface
Runnable is an interface that contains
the run() method
One of the constructors for Thread:
public Thread(Runnable r)
Can create a thread by giving it an
argument (object) that implements
run()
alternative to extending thread and then
overriding run()
Networking
CS 21b
Client/Server Computing
Communication over the network often
occurs between a client and a server
A server listens for connection requests
and then responds to messages
A client establishes a connection to a
server and then sends messages
TCP/IP: abstract layer that simplifies
the above activities
Hosts, Ports, and Sockets
Computers on the network are
(uniquely) specified by a host name or
an IP address
Communication between hosts occurs
through their ports
each port allows several connections
Socket
connection handle that facilitates
communication over the network
Networking in Java
java.net package
import java.net.*;
Most important classes
Socket
ServerSocket
URL (discussed earlier)
The Socket class
Constructor requires a host and port
that the client intends to connect to
Useful Socket methods
InputStream getInputStream()
OutputStream getOutputStream()
Use file/stream interfaces to carry out
the communication
The ServerSocket class
Constructor requires a port number that
the server wishes to listen from
accept() method returns a Socket
object once a connection from a client
has been established
blocks (hangs) until the connection occurs
On the Server Program ...
Create a ServerSocket object
Invoke accept() on that object
Obtain Socket object
specify port
returned by accept()
Obtain I/O streams from the socket
carry out communication using these
streams
On the Client Program ...
Create Socket object
specify host and port of server
Obtain I/O streams from the socket
carry out communication using these
streams
* execute the server before the client
Allowing Multiple Connections
to a Server
Use Threads
Have a loop that continuously calls
accept()
main thread
Create and start a thread whenever
accept() returns a socket
facilitate communication on the socket
using a separate thread