这个是错误的提示,所以说老师我想问一下错在了哪里?
MyXML.rar
这一堆的红色警告怎么解决
老师您好,请问为什么我的最后一行输出value包含123的结果是false呢、?
public class TestTreeMap { public static void main(String[] args) { //创建集合对象 TreeMap treeMap = new TreeMap(); //添加数据 treeMap.put("hello",123); treeMap.put("word",456); treeMap.put("hello",789); treeMap.put("java",1000); System.out.println("集合中元素的个数:"+treeMap.size()); System.out.println(treeMap); System.out.println(treeMap.containsKey("word")+"\t"+treeMap.containsKey("sql")); System.out.println(treeMap.containsValue(123)+"\t"+treeMap.containsValue(456)); } }
运行结果:
在服务器启动完毕后,客户端1链接成功,这时启动了接收客户端消息的线程和用于发送给客户端消息的线程,客户端2链接成功再次启动一对接收线程和发送线程,此时,客户端1和客户端2对应的发送线程都处于等待状态(启动发送线程的前提是公共区有数据),当客户端1发送消息到服务端时,服务端的接收线程将客户端1发来的数据存入公共数据区,并去唤醒全部等待的发送线程,发送线程1和2从公共数据区中读取数据,将这些数据发送给不同的客户端。
印象中之前讲过,PrintWriter输出流有自动刷新缓冲功能。
这节课中,如果不加pw.flush(),好像又不行,很奇怪啊
老师帮我看看注释部分我理解的对吗
public static byte[] write(){ ByteArrayOutputStream bos=null; //将任意的数据类型都转为字节类型 DataOutputStream dos=null; try{ //创建字节数组流对象,目的地是字节数组,底层创建一个长度数为32的字节数组 //ByteArrayOutputStream的作用就是在内存中创建一个byte数组存储写入的数据 bos=new ByteArrayOutputStream(); //数据处理流,往数组内写入指定类型的数据并转化为byte类型存储到数组中 dos=new DataOutputStream(bos); dos.writeBoolean(true); dos.writeInt(98); dos.writeChar('c'); dos.writeDouble(99.9); }catch (IOException e){ e.printStackTrace(); }finally { try{ if(dos!=null){ dos.close(); } }catch (IOException e){ e.printStackTrace(); } } //返回该数组 return bos.toByteArray(); }
老师,那个字符串类型我写字母也报错了为什么?
这有返回值和没有返回值有什么区别吗?
停止客户端之后,服务器会持续接受信息是为什么?
这节课一开始就是写好的代码,前面的内容呢
@Test public void test4(){ Set<Student> set = new TreeSet<Student>(new StudentComparator()); Student s1 = new Student("zhang",18); Student s2 = new Student("wang",17); Student s3 = new Student("an",18); Student s4 = new Student("an",18); set.add(s1); set.add(s2); set.add(s3); set.add(s4); for (Student s:set ) { System.out.println(s.toString()); } } package com.bjsxt.test.container; public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } } package com.bjsxt.test.container; import java.util.Comparator; public class StudentComparator implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { if(o1.getAge()>o2.getAge()){ return 1; }else{ if(o1.getAge()==o2.getAge()){ return o1.getName().compareTo(o2.getName()); } return -1; } } }
老师,为什么使用treeSet,我不重写Student的hashCode和equals也能分辨出来s3,和s4是同一个对象?
老师您好,老师讲的自己手动配制IP地址是有什么用呢?可以随便配制?
老师,请问,这个static方法为什么有问题啊
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 接收客户端发送消息的线程类 */ class ChatReceive extends Thread{ private Socket socket; public ChatReceive(Socket socket){ this.socket=socket; } @Override public void run() { this.receiveMsg(); } /** * 实现接收客户端发送的消息 */ private void receiveMsg(){ BufferedReader br=null; try { br=new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while (true){ String msg=br.readLine(); synchronized ("abc"){ //把读取到的数据写入公共数据区 ChatRoomServer.buf="["+this.socket.getInetAddress()+"] "+msg; //唤醒发送消息的线程对象 "abc".notifyAll(); } } }catch (Exception e){ e.printStackTrace(); }finally { if (br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } if (this.socket!=null){ try { this.socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } /** *向客户端发送消息的线程类 */ class ChatSend extends Thread { private Socket socket; public ChatSend(Socket socket) { this.socket = socket; } @Override public void run() { this.sendMsg(); } /** * 将公共数据区的消息发送给客户端 */ private void sendMsg() { PrintWriter pw = null; try { pw = new PrintWriter(this.socket.getOutputStream()); while (true) { synchronized ("abc") { //让发送消息的线程处于等待状态 "abc".wait(); //将公共数据区中的消息发送给客户端 pw.println(ChatRoomServer.buf); pw.flush(); } } } catch (Exception e) { e.printStackTrace(); } finally { if (pw != null) { pw.close(); } if (this.socket != null) { try { this.socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public class ChatRoomServer { //定义公共数据区 public static String buf; public static void main(String[] args) { System.out.println("Chat Server Version 1.0"); System.out.println("Listen at 8888....."); ServerSocket serverSocket=null; try { serverSocket=new ServerSocket(8888); while (true){ Socket socket=serverSocket.accept(); System.out.println("连接到"+socket.getInetAddress()); new ClientReceive(socket).start(); new ClientSend(socket).start(); } }catch (Exception e){ e.printStackTrace(); }finally { if (serverSocket!=null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
我按老师的代码一模一样敲的,为什么运行的时候和老师的不一样;我感觉向客户端发送消息的线程没有执行。这是怎么回事呢
请问这里的输入输出流能用缓冲字节流吗?我自己使用缓冲字节流封装,服务器端和客户端都收不到发送的内容。其他代码一样,就是输入输出流换了。
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637