BufferedWriter send = (BufferedWriter) clients.get(1)返回错误lang.ClassCastException

向云 2015-10-09 03:24:06
这个改怎么弄呀!
clients.add(1,out);//保存终端的连接信息
BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
send.write(str);//向终端发送信息
send.flush();

当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException:


Object x = new Integer(0);
System.out.println((String)x);
...全文
127 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
向云 2015-10-09
  • 打赏
  • 举报
回复
关闭控制台才能收到信息,不知道什么原因
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

public class success extends Thread {
    private Socket client;
	static Vector<Object> clients = new Vector<Object>();//保存客户端和终端的连接信息 
    public success(Socket c) {
        this.client = c;//创建与客户端连接的socket
    }

	public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + " start");
            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            //利用BufferedReader实现数据的快速接收,getInputStream()获取socket底层数据输入流,InputStreamReader()实现字节到字符串的高校读取
            BufferedWriter out =new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
            //利用BufferedWriter实现数据的快速写入,getOutputStream()获取socket底层数据输出流,OutputStreamWriter()实现字节到字符串的高校写入
            String str = in.readLine();//此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)\
            while(str != null){
            	System.out.println("server receive: " + str);
            	if(str.indexOf("1")>=0){//如果是客户端发来消息,则执行指定操作
            		clients.add(0,out);//保存客户端的连接信息
                    out.write("客户端已成功连接!\r\n");//信息写入输出流
                    out.flush();//写回client需要flush
                    System.out.println("客户端连接成功! ");
                    str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
                    System.out.println("server receive: " + str);
                    while(true){
                    	if(str.indexOf("1.1")>=0){//如果客户端发来“打开”命令,则执行指定操作
                        	clients.add(0,out);//保存客户端的连接信息
                        	BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
                        	send.write("1.1\r\n");//向终端发送信息
                        	send.flush();
                           	System.out.println("打开箱子");
                    	}else if(str.indexOf("1.2")>=0){//如果客户端发来“关闭”命令,则执行指定操作
                    		System.out.println("关闭箱子");
//                    		BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
//                    		send.write("1.1");
//                    		send.flush();
                    	}
                    	str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
                    }
            	}else if(str.indexOf("2")>=0){
            		if(clients.get(1)=="0")
            		{
            			clients.remove(1);
            			clients.remove(1);
            		}
            		clients.add(1,out);//保存客户端的连接信息
            		System.out.println("终端端连接成功! ");
                    str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
                    System.out.println("server receive: " + str);
                    while(true){
                    	if(str.indexOf("2.1")>=0){//如果客户端发来“打开”命令,则执行指定操作
                        	System.out.println("箱门已打开!");
//                        	BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
//                        	send.write("2.1");
                    	}else if(str.indexOf("2.2")>=0){//如果客户端发来“关闭”命令,则执行指定操作
                    		System.out.println("箱子已关闭!");
//                    		BufferedWriter send = (BufferedWriter) clients.get(1);//取得终端连接信息
//                    		send.write("2.1");
                    	}
                    	str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
                    }
            	}
            }
            
            System.out.println(Thread.currentThread().getName() + " end");
            out.close();
        } catch (IOException e) {
        }
    }

    public static void main(String[] args) throws IOException {
		clients.add(0,0);//初始化列表,否则会出错
		clients.add(1,0);
        ServerSocket server = new ServerSocket(1234);//监听1234端口
        System.out.println("server is start!");
        while (true) {
            success mc = new success(server.accept());//阻塞,开始监听
            if(server.getInetAddress().getHostAddress().indexOf("0.0.0.0")<0){
            	System.out.println("accept connect: " + server.getInetAddress().getHostAddress());
            }     
            mc.start();//一旦有连接请求,则建立一个线程
        }
    }
}
向云 2015-10-09
  • 打赏
  • 举报
回复
clients是vectot数组类型,用来存储客户端连接信息的,
BufferedWriter out =new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
            //利用BufferedWriter实现数据的快速写入,getOutputStream()获取socket底层数据输出流,OutputStreamWriter()实现字节到字符串的高校写入
tony4geek 2015-10-09
  • 打赏
  • 举报
回复
(BufferedWriter) 和 clients有关系吗

62,614

社区成员

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

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