nachdem mir mit dem codefragment scheinbar keiner helfen kann hier mal der gesamte code
es ist aus Darwins Java Kochbuch
ich hab es etwas umgeschrieben und in zeile 178 etwas zum debugen eingefügt
interessant finde ich das zwar der text aus readline() nicht ankommt aber der punkt aus zeile 178 erscheint :confused:
PHP-Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class ChatRoom extends Applet {
/** Whether we are being run as an Applet or an Application */
protected boolean inAnApplet = true;
/** The state of logged-in-ness */
protected boolean loggedIn;
/* The Frame, for a pop-up, durable Chat Room. */
protected Frame cp;
/** The default port number */
protected static int RECVPORTNUM = 1550;
protected static int SENDPORTNUM = 1555;
/** The actual port number */
protected int recvport;
protected int sendport;
/** The network socket */
protected Socket recvsock;
protected Socket sendsock;
/** BufferedReader for reading from socket */
protected BufferedReader is;
/** PrintWriter for sending lines on socket */
protected PrintWriter pw;
/** TextField for input */
protected TextField tf;
/** TextArea to display conversations */
protected TextArea ta;
/** The Login button */
protected Button lib;
/** The LogOUT button */
protected Button lob;
/** The TitleBar title */
final static String TITLE = "Chat: Ian Darwin's Toy Chat Room Client";
/** The message that we paint */
protected String paintMessage;
/** Init, inherited from Applet */
public void init() {
paintMessage = "Creating Window for Chat";
repaint();
cp = new Frame(TITLE);
cp.setLayout(new BorderLayout());
String recvportNum = null;
String sendportNum = null;
if (inAnApplet) {
recvportNum = getParameter("recvport");
sendportNum = getParameter("sendport");
}
recvport = RECVPORTNUM;
sendport = SENDPORTNUM;
if (recvportNum != null)
recvport = Integer.parseInt(recvportNum);
if (sendportNum != null)
sendport = Integer.parseInt(sendportNum);
// The GUI
ta = new TextArea(14, 80);
ta.setEditable(false); // readonly
ta.setFont(new Font("Monospaced", Font.PLAIN, 11));
cp.add(BorderLayout.NORTH, ta);
Panel p = new Panel();
Button b;
// The login button
p.add(lib = new Button("Login"));
lib.setEnabled(true);
lib.requestFocus();
lib.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
login();
lib.setEnabled(false);
lob.setEnabled(true);
tf.requestFocus(); // set keyboard focus in right place!
}
});
// The logout button
p.add(lob = new Button("Logout"));
lob.setEnabled(false);
lob.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
logout();
lib.setEnabled(true);
lob.setEnabled(false);
lib.requestFocus();
}
});
p.add(new Label("Message here:"));
tf = new TextField(40);
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (loggedIn) {
pw.println(tf.getText());
tf.setText("");
}
}
});
p.add(tf);
cp.add(BorderLayout.SOUTH, p);
cp.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// If we do setVisible and dispose, then the Close completes
ChatRoom.this.cp.setVisible(false);
ChatRoom.this.cp.dispose();
logout();
}
});
cp.pack();
// After packing the Frame, centre it on the screen.
Dimension us = cp.getSize(),
them = Toolkit.getDefaultToolkit().getScreenSize();
int newX = (them.width - us.width) / 2;
int newY = (them.height- us.height)/ 2;
cp.setLocation(newX, newY);
cp.setVisible(true);
paintMessage = "Window should now be visible";
repaint();
}
protected String serverHost = "192.168.2.2";
/** LOG ME IN TO THE CHAT */
public void login() {
showStatus("In login!");
if (loggedIn)
return;
if (inAnApplet)
serverHost = getCodeBase().getHost();
try {
recvsock = new Socket(serverHost, recvport);
is = new BufferedReader(new InputStreamReader(recvsock.getInputStream()));
} catch(UnknownHostException e) {
showStatus("Unknown host " + serverHost + "/" + recvport + ": " + e);
} catch(NoRouteToHostException e) {
showStatus("No rout to host " + serverHost + "/" + recvport + ": " + e);
} catch(ConnectException e) {
showStatus("Connect failed " + serverHost + "/" + recvport + ": " + e);
} catch(IOException e) {
showStatus("Can't get recvsocket to " + serverHost + "/" + recvport + ": " + e);
cp.add(new Label("Can't get recvsocket: " + e));
return;
}
showStatus("Got recvsocket");
try {
sendsock = new Socket(serverHost, sendport);
pw = new PrintWriter(sendsock.getOutputStream(), true);
} catch(UnknownHostException e) {
showStatus("Unknown host " + serverHost + "/" + sendport + ": " + e);
} catch(NoRouteToHostException e) {
showStatus("No rout to host " + serverHost + "/" + sendport + ": " + e);
} catch(ConnectException e) {
showStatus("Connect failed " + serverHost + "/" + sendport + ": " + e);
} catch(IOException e) {
showStatus("Can't get sendsocket to " + serverHost + "/" + sendport + ": " + e);
cp.add(new Label("Can't get sendsocket: " + e));
return;
}
showStatus("Got sendsocket");
// Construct and start the reader: from server to textarea.
// Make a Thread to avoid lockups.
new Thread(new Runnable() {
public void run() {
String line;
try {
while (loggedIn && ((line = is.readLine()) != null) && (sendsock != null) && (recvsock != null)) {
ta.append(line + "\n");
ta.append(".");
}
} catch(IOException e) {
showStatus("GAA! LOST THE LINK!!");
return;
}
}
}).start();
// FAKE LOGIN FOR NOW
//pw.println("AppletUser");//Chat.CMD_LOGIN +
loggedIn = true;
}
/** Log me out, Scotty, there's no intelligent life here! */
public void logout() {
if (!loggedIn)
return;
loggedIn = false;
try {
if (recvsock != null)
recvsock.close();
} catch (IOException ign) {
// so what?
}
try {
if (sendsock != null)
sendsock.close();
} catch (IOException ign) {
// so what?
}
}
/** Paint paints the small window that appears in the HTML,
* telling the user to look elsewhere!
*/
public void paint(Graphics g) {
Dimension d = getSize();
int h = d.height;
int w = d.width;
g.fillRect(0, 0, w, 0);
g.setColor(Color.black);
g.drawString(paintMessage, 10, (h/2)-5);
}
/** a showStatus that works for Applets or non-Applets alike */
public void showStatus(String mesg) {
if (inAnApplet)
super.showStatus(mesg);
System.out.println(mesg);
}
/** A main method to allow the client to be run as an Application */
public static void main(String[] args) {
ChatRoom room101 = new ChatRoom();
room101.inAnApplet = false;
room101.init();
room101.start();
}
}