高手来帮忙啊~
java断断续续学了不到半年,找了本<<java2从入门到精通>>,看到现在慢脑子问号,实在吃不消了,还是请高手们帮忙了.下面是参考上面一本书联想到的一个聊天程序雏形.有点问题.
server很简单,是简单的读写,我就照书板上来了:
public class CServer
{
final static int SERVER_PORT=8001; //server's own port
public static void main(String args[]){
Server server;
String clientRequest;
BufferedReader reader;
PrintWriter writer;
server = new Server(SERVER_PORT);
reader = new BufferedReader(new InputStreamReader(server.in));
writer = new PrintWriter(new OutputStreamWriter(server.out),true);
//send initial string to client.
writer.println("Java Chat Programming Test,"+ new Date());
while(true){
try{
//what does client have to say to us?
clientRequest=reader.readLine();
System.out.println("Client says:"+clientRequest);
if (clientRequest.startsWith("HELP")){
writer.println("Vocabulary:HELP QUIT");
}else {
if(clientRequest.startsWith("QUIT")){
System.exit(0);
} else {
writer.println("ERR:Command'"+clientRequest+"'not understood.");
}
}
}catch (IOException e){
System.out.println("IOEx in server"+e);
}
}
}
}
//----------------------------------------------------------------------
class Server{
private ServerSocket server;
private Socket socket;
public InputStream in;
public OutputStream out;
public Server(int port){
try {
server = new ServerSocket(port);
System.out.println("ServerSocket before accept:" + server);
System.out.println("Java Test server v1.0,on-line!");
//wait for a client to connect to our port
socket = server.accept();
System.out.println("ServerSocket after accept:" + server);
in=socket.getInputStream();
out=socket.getOutputStream();
}catch(IOException e){
System.out.println("Server constructor IOEx:" + e);
}
}
}
////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
///////////////////
/
/
//
下面是client,做了个界面,问题就烦了,用过mirc的人应该明白大致的样子,上面工具栏,右面是nick列表,中间显示区,下面输入区.点击工具栏的button时,建立一个socket连接,在输入区接收到回车的时候向服务器提交文本,并返回消息,可是在读取的时候就出问题了,死机.下面出问题的地方有标注.还有我觉得自己的oop思想好像太差了,希望哪位大侠能指导我一下,应该看什么书好,看了看这里的帖子,发现学java好像还要学好多东西,真是可怕,原来好像跟vc不一样啊,不知道能不能找到一位上海的师傅,最后还有问一个小问题和小要求,问题:java中怎么让一个frame自动最大化?要求:有空帮帮改改我程序的样子,我自己决的太乱了,没有一点思想,把我的程序改的更oop一点,呵呵~~,thanks all.
///
////
/*
* Author: CQH
* Created: 06/05/2001 11:13:42
* Modified: 06/05/2001 11:13:42
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.io.*;
import java.net.*;
public class Chat{
static boolean online=false;
public static void main(String args[]) {
JFrame f=new MainWindow(); //生成新窗口類
f.setSize(800,600);
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing (WindowEvent e){
System.exit(0);
}
});
}
static class MainWindow extends JFrame {
public static BufferedReader reader;
public static PrintWriter writer;
public static Client client;
public String serverstr,tempstr;
public JTextArea mainboard;
public JTextField entertext;
public MainWindow() { //窗口的構造函數
super("Java Demo");
//////////////////////////////
////////////菜单//////////////
//////////////////////////////
FileMenu fileMenu = new FileMenu();
//EditMenu editMenu = new EditMenu();
//ViewMenu viewMenu = new ViewMenu();
//ToolMenu toolMenu = new ToolMenu();
//MailMenu mailMenu = new MailMenu();
HelpMenu helpMenu = new HelpMenu();
JMenuBar mb = new JMenuBar();
mb.add(fileMenu);
//mb.add(editMenu);
//mb.add(viewMenu);
//mb.add(toolMenu);
//mb.add(mailMenu);
mb.add(helpMenu);
//mb.setHelpMenu(helpMenu);
setJMenuBar(mb);
/////////////////////////////
///////工具栏//////////////////
/////////////////////////////
JButton TBar=new JButton("工具栏");
TBar.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if (online == true) {
System.out.println(online);
mainboard.append("You Have Connect allready.\n");
System.out.println("Have Been Connected.");
}
if (online==false){
try{
client=new Client("zhouxingxing","localhost",8001);
reader =new BufferedReader(new InputStreamReader(client.in));
writer=new PrintWriter(new OutputStreamWriter(client.out));
writer.println("Hello");
serverstr=reader.readLine();
mainboard.append(serverstr+"\n");
online=true;
}catch(Exception e1){
mainboard.append("Can't connect!\n");
System.out.println(e1);
System.out.println("Not Connect!");
online=false;}
}
}
});
JPanel jp= new JPanel(new BorderLayout());
Border border=BorderFactory.createLineBorder(Color.black);
jp.setBorder(border);
jp.add(TBar,BorderLayout.WEST);
getContentPane().add(jp,BorderLayout.NORTH);
///////////////////////
/////////NIKC列表///////
//////////////////////
NameList namelist=new NameList();
JList j=new JList(namelist);
jp=new JPanel(new BorderLayout());
jp.setBorder(border);
jp.add(j,BorderLayout.EAST);
getContentPane().add(jp,BorderLayout.EAST);
//////文本显示区//////
mainboard=new JTextArea();
mainboard.setEditable(false);
JScrollPane jspane=new JScrollPane(mainboard);
getContentPane().add(jspane,BorderLayout.CENTER);
/////文字输入区/////
entertext=new JTextField(30);
entertext.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==10){
tempstr=entertext.getText();
if (online==true){
try{
writer.println("hello");
serverstr=reader.readLine();
}catch(Exception e2){online=false;}
//if (tempstr != "" ){
mainboard.append(serverstr+"\n");
tempstr="";
entertext.setText(tempstr);
//}
}
if (online==false){
entertext.setText("");
mainboard.append("Not connected to the server..\n");
}
} //if e.getkeycode end
} // keyevent e end
}); //Adapter end
getContentPane().add(entertext,BorderLayout.SOUTH);
}
}
static class FileMenu extends JMenu {
public FileMenu() {
//file menu
super("文件",true);
//file menu item
JMenu SubNew = new JMenu("连接");
//connect menu
JMenuItem servermenu = new JMenuItem("服务器");
SubNew.add(servermenu);
SubNew.add(new JMenuItem("新聞郵件"));
SubNew.addSeparator();
SubNew.add(new JMenuItem("文件夾"));
SubNew.addSeparator();
SubNew.add(new JMenuItem("聯係人"));
add(SubNew);
add(new JMenuItem("打開"));
add(new JMenuItem("另存為"));
addSeparator();
//exit menu
JMenuItem ExitMenu=new JMenuItem("退出");
ExitMenu.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
System.exit(0);
}
});
add(ExitMenu);
}
}
static class HelpMenu extends JMenu {
public HelpMenu(){
super("帮助",true);
add(new JMenuItem("帮主主题"));
addSeparator();
JMenuItem AboutMenu=new JMenuItem("关于");
AboutMenu.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
JOptionPane pane=new JOptionPane();
pane.showMessageDialog(null,"感谢使用本产品","关于",2);
}
});
add(AboutMenu);
}
}
}
//class MenuClickLis MouseListener { //菜单响应事件
// public void mousePressed(){
////////////////
// 连接驱动事件///
////////////////
// }
//}
class NameList extends DefaultListModel implements ComboBoxModel{
Object currentValue;
String nameList[]={"禇琦辉","装声","周星星","我的老婆","你的情人","f","g","h","i","j","k","l","m","n","o","p","q"};
public NameList(){
for (int i=0,n=nameList.length;i<n;i++){
addElement(nameList[i]);
}
}
public Object getSelectedItem(){
return currentValue;
}
public void setSelectedItem(Object anObject){
currentValue=anObject;
fireContentsChanged(this,-1,-1);
}
}
class Client {
public InputStream in;
public OutputStream out;
private Socket client;
public Client(String nick,String host ,int port){
try{
System.out.println("Trying connectting to the server");
client=new Socket (host,port);
System.out.println("Clinet socket:"+client);
System.out.println("Connection OK!!");
in=client.getInputStream();
out=client.getOutputStream();
}catch(IOException e){
System.out.println("Can't find the server!");
System.out.println("IOEx:"+e);
}
}
}