高手来帮忙啊~

usstdiy 2001-07-22 04:06:18
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);
}

}
}
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lp_dragon 2001-07-24
  • 打赏
  • 举报
回复
我也是菜鸟,你看这样可不可以:用一个Vector成员变量在"连接"的时候装下你的Socket,用完之后再把它抡了.
usstdiy 2001-07-24
  • 打赏
  • 举报
回复
是这样,有一个client类,工具栏上有一个"连接"按钮,点击时,在它的事件函数里面建立一个socket实例,in和out负责读写,在下面的文本输入区域的时间函数里,当接收到回车时,再利用这个socket的in和out向服务器读写信息,但是这个socket类时再按钮的事件函数里生成的,对于文本输入函数是不可以调用的,如果我在主函数里声明这个socket实例,那末,"连接"按钮就失去意义了.我该怎么处理?谢谢~~
RedGuest 2001-07-23
  • 打赏
  • 举报
回复
哇塞,太多了,你把你的问题精简一点提出来吧:)
nielinjie 2001-07-23
  • 打赏
  • 举报
回复
谁要看你这么多。
usstdiy 2001-07-23
  • 打赏
  • 举报
回复
怎么没人啊 ??

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧