关于Server与Client的异常

u010181717 2013-09-27 07:19:15
import javax.swing.*;//客户端程序
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Client{
boolean a_key=false;
Client(){
Socket socket=null;
InputStreamReader ir=null;
BufferedReader br=null;
OutputStreamWriter ow=null;
BufferedWriter bw=null;
final PrintWriter pw=new PrintWriter(bw,true);

JFrame f1=new JFrame("客户端");
Container p1=f1.getContentPane();
final JTextArea t1=new JTextArea(30,40);
JButton b1=new JButton("发送");
JPanel panel=new JPanel();
panel.add(b1);
p1.add(panel,BorderLayout.SOUTH);
p1.add(t1);
f1.setSize(612,450);
f1.setVisible(true);
f1.pack();
System.out.println("KKK");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{

InetAddress addr=InetAddress.getByName(null);
socket=new Socket(addr,8888);
//创建个套接字,连接到本机的8888端口
InputStream in=socket.getInputStream();
ir=new InputStreamReader(in);
br=new BufferedReader(ir);
OutputStream out=socket.getOutputStream();
ow=new OutputStreamWriter(out);
bw=new BufferedWriter(ow);
String line=null;
StringBuilder sb=new StringBuilder();
if(sb!=null){
while((line=br.readLine())!=null){
if(line.equals("要签到了")){

JFrame f2=new JFrame("签到");
Container p2=f2.getContentPane();
JLabel label2=new JLabel("快点我吧!");
JButton b2=new JButton("签到");
p2.add(label2);
p2.add(b2);
f2.setSize(300,220);
f2.setVisible(true);
f2.pack();
f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){boolean a_key=false;
a_key=true;
}
});
if(a_key)
pw.println("签到了哈哈呵呵");
else
pw.println("签到失败呜呜呜");
}
sb.append(line+"\n");
}
}
String sa=null;
sa=sb.toString();
t1.append(sa);
}catch(Exception ce){ce.printStackTrace();}
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String sa=null;
sa=t1.getText();
pw.println("服务端:"+sa);
}
});
}
public static void main(String[] args){
new Client();
}
}
报错: C:\java>java Client
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.<init>(Writer.java:71)
at java.io.PrintWriter.<init>(PrintWriter.java:75)
at Client.<init>(Client.java:15)
at Client.main(Client.java:84)



求指点,本人新手,java才开始学




...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010181717 2013-10-19
  • 打赏
  • 举报
回复
附聊天代码: import java.io.*;(服务器端,加了背景图片所以程序有点长) import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.util.*; import java.text.*; public class ChatServer{ class B implements Runnable{ public void run(){ while(true){ try{ t1.append(in.readUTF()+"\n"); t1.setCaretPosition(t1.getText().length()); }catch(Exception e){e.printStackTrace();} } } } JTextArea t1; JTextArea t2; private JFrame f; private JOptionPane jop; private ServerSocket ss; private Socket socket; private DataInputStream in; private DataOutputStream out; SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期格式 public ChatServer(){ try{ ss=new ServerSocket(9999); socket=ss.accept(); in=new DataInputStream(socket.getInputStream()); out=new DataOutputStream(socket.getOutputStream()); }catch(Exception e){e.printStackTrace();} f=new JFrame("服务器端程序"); ImageIcon icon=new ImageIcon("信纸背景1.png"); JLabel label=new JLabel(icon);//给标签加上图片 label.setBounds(0,0,icon.getIconWidth(),icon.getIconHeight()); //设置标签大小即为图片大小 JPanel p1=(JPanel)f.getContentPane(); //把内容窗格转化为JPanel p1.setLayout(null); //设置p1的布局为空 p1.setOpaque(false); //把p1设置透明,以显示图片 f.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); //把图片添加到分层窗口的最底层 t1=new JTextArea(60,40); t1.setLineWrap(true); t2=new JTextArea(10,20); t2.setLineWrap(true); JScrollPane jsp1=new JScrollPane(t1); JScrollPane jsp2=new JScrollPane(t2); JButton send=new JButton("发 送"); JButton clear=new JButton("清 空"); t1.setOpaque(false); t2.setOpaque(false);//设置文本域透明 jsp1.setOpaque(false); jsp1.getViewport().setOpaque(false); jsp2.setOpaque(false); jsp2.getViewport().setOpaque(false); //把滚动条设置为透明 jsp1.setBounds(0,0,453,465); jsp2.setBounds(0,465,453,115); send.setBounds(150,580,100,40); clear.setBounds(250,580,100,40); //通过绝对布局给组件布局 Font font=new Font("楷体",Font.PLAIN,16); t1.setFont(font); t2.setFont(font);//设置字体 send.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ String s1=null; s1=t2.getText(); t2.setText(" "); System.out.println(s1); //t1.append(in.readUTF()+"\n"); t1.append(df.format(new Date())+" Server:"+"\n"+s1+"\n"); out.writeUTF(df.format(new Date())+" Server:"+"\n"+s1); t1.setCaretPosition(t1.getText().length()); }catch(Exception ce){ce.printStackTrace();} } }); p1.add(jsp1); p1.add(jsp2); p1.add(send); p1.add(clear); f.setSize(460,656); f.setLocation(500,400); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); B b=new B(); Thread k=new Thread(b); k.start(); // k.sleep(2000); } public static void main(String[] args){ new ChatServer(); } } import java.io.*;(客户端) import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.util.*; import java.text.*; public class ChatClient{ class A implements Runnable{ public void run(){ while(true){ try{ t1.append(in.readUTF()+"\n"); t1.setCaretPosition(t1.getText().length()); }catch(Exception e){e.printStackTrace();} } } } private JTextArea t1; private JTextArea t2; private JFrame f; private JOptionPane jop; private Socket socket; private DataInputStream in; private DataOutputStream out; SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期格式 public ChatClient(){ try{ socket=new Socket("192.168.24.44",9999); in=new DataInputStream(socket.getInputStream()); out=new DataOutputStream(socket.getOutputStream()); }catch(Exception e){e.printStackTrace();} f=new JFrame("客户端程序"); ImageIcon icon=new ImageIcon("信纸背景1.png"); JLabel label=new JLabel(icon);//给标签加上图片 label.setBounds(0,0,icon.getIconWidth(),icon.getIconHeight()); //设置标签大小即为图片大小 JPanel p1=(JPanel)f.getContentPane(); //把内容窗格转化为JPanel p1.setLayout(null); //设置p1的布局为空 p1.setOpaque(false); //把p1设置透明,以显示图片 f.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); //把图片添加到分层窗口的最底层 t1=new JTextArea(60,40); t1.setLineWrap(true); t2=new JTextArea(10,20); t2.setLineWrap(true); JScrollPane jsp1=new JScrollPane(t1); JScrollPane jsp2=new JScrollPane(t2); JButton send=new JButton("发 送"); JButton clear=new JButton("清 空"); t1.setOpaque(false); t2.setOpaque(false);//设置文本域透明 jsp1.setOpaque(false); jsp1.getViewport().setOpaque(false); jsp2.setOpaque(false); jsp2.getViewport().setOpaque(false); //把滚动条设置为透明 jsp1.setBounds(0,0,453,465); jsp2.setBounds(0,465,453,115); send.setBounds(150,580,100,40); clear.setBounds(250,580,100,40); //通过绝对布局给组件布局 Font font=new Font("楷体",Font.PLAIN,16); t1.setFont(font); t2.setFont(font);//设置字体 send.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ String s=null; s=t2.getText(); t2.setText(" "); //t1.append(in.readUTF()+"\n"); System.out.println(s); t1.append("Client "+df.format(new Date())+"\n"+s+"\n"); out.writeUTF(df.format(new Date())+" Client:"+"\n"+s); t1.setCaretPosition(t1.getText().length()); }catch(Exception ce){ce.printStackTrace();} } }); p1.add(jsp1); p1.add(jsp2); p1.add(send); p1.add(clear); f.setSize(460,656); f.setLocation(500,400); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); A a=new A(); Thread q=new Thread(a); q.start(); //q.sleep(2000); } public static void main(String[] args){ new ChatClient(); } }
u010181717 2013-10-03
  • 打赏
  • 举报
回复
第一次写客户端,服务端程序,上面的代码是我根据一个程序仿得,我后来换了思路,用了DataInputStream和DataOutputStream。
闲鱼野鹤-PJY 2013-09-30
  • 打赏
  • 举报
回复
引用 5 楼 stubble 的回复:
[quote=引用 4 楼 u010684923 的回复:] [quote=引用 3 楼 zsjpower 的回复:] final PrintWriter pw=new PrintWriter(bw,true); bw为空,代码要自己调的
代码这么乱你都能看出来,大神呀[/quote]你是来搞笑的么[/quote] 来学习的
zsjpower 2013-09-30
  • 打赏
  • 举报
回复
at java.io.PrintWriter.<init>(PrintWriter.java:75)
引用 4 楼 u010684923 的回复:
[quote=引用 3 楼 zsjpower 的回复:] final PrintWriter pw=new PrintWriter(bw,true); bw为空,代码要自己调的
代码这么乱你都能看出来,大神呀[/quote] at java.io.PrintWriter.<init>(PrintWriter.java:75)
异常异长 2013-09-30
  • 打赏
  • 举报
回复
引用 4 楼 u010684923 的回复:
[quote=引用 3 楼 zsjpower 的回复:] final PrintWriter pw=new PrintWriter(bw,true); bw为空,代码要自己调的
代码这么乱你都能看出来,大神呀[/quote]你是来搞笑的么
闲鱼野鹤-PJY 2013-09-30
  • 打赏
  • 举报
回复
引用 3 楼 zsjpower 的回复:
final PrintWriter pw=new PrintWriter(bw,true); bw为空,代码要自己调的
代码这么乱你都能看出来,大神呀
zsjpower 2013-09-30
  • 打赏
  • 举报
回复
final PrintWriter pw=new PrintWriter(bw,true); bw为空,代码要自己调的
闲鱼野鹤-PJY 2013-09-30
  • 打赏
  • 举报
回复
是不是还有个init()方法?在哪?
闲鱼野鹤-PJY 2013-09-30
  • 打赏
  • 举报
回复
不是告诉你15行报空指针么? 你的15行在哪呀

23,407

社区成员

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

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