关于控制台输入中文出现英文的问题!

jo5690 2013-09-04 12:21:47
一个简易聊天工具,测试都还Ok,就是在控制台输入中文的时候会带拼音,有没有技术大佬能指正,没有分数了,只能这么点了~



客户端
public class Client {
private Socket client;
public Client() {
try {
client=new Socket("localhost",8088);
} catch (Exception e) {
e.printStackTrace();
}
}
public void start(){
GetServerInfoHandler handler=new GetServerInfoHandler(client);
Thread thread=new Thread(handler);
thread.setDaemon(true);
thread.start();
try {
PrintWriter writer=new PrintWriter(client.getOutputStream());
System.out.println("请输入你的昵称(不少于2位):");
Scanner sc=new Scanner(System.in);
String nickName="";
while(nickName.length()<2){
System.out.println("请输入你的昵称:");
nickName=sc.nextLine().trim();
}
System.out.println("你好!"+nickName+"可以聊天啦");
while(true){
System.out.println(nickName+":"+sc.nextLine());
writer.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
class GetServerInfoHandler implements Runnable{
private Socket socket;
public GetServerInfoHandler(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
while(true){
System.out.println(reader.readLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Client().start();
}

}

服务端
public class Server {
private ServerSocket server;
private ExecutorService threadPool;
private Vector<PrintWriter> allOut;
private BlockingQueue<String> messageQueue;
public Server() {
try {
server=new ServerSocket(8088);
threadPool=Executors.newCachedThreadPool();
allOut=new Vector<PrintWriter>();
messageQueue=new LinkedBlockingQueue<String>();

} catch (Exception e) {
e.printStackTrace();
}
}
public void start(){
try {
SendMsgToAllClientHandler sendThread=new SendMsgToAllClientHandler();
Thread thread=new Thread(sendThread);
thread.setDaemon(true);
thread.start();
while(true){
System.out.println("等待客户端连接。。。");
Socket socket=server.accept();
System.out.println("一个客户端连接。。");
ClientHandler handler=new ClientHandler(socket);
threadPool.execute(handler);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public class ClientHandler implements Runnable{
private Socket client;
public ClientHandler(Socket client) {
this.client = client;
}
public void run() {
PrintWriter writer=null;
try {
writer=new PrintWriter(client.getOutputStream());
allOut.add(writer);
BufferedReader reader=new BufferedReader(
new InputStreamReader(client.getInputStream()));
while(true){
messageQueue.offer(reader.readLine(),5,TimeUnit.SECONDS);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
synchronized (allOut) {
allOut.remove(writer);
}

}
}
}
class SendMsgToAllClientHandler implements Runnable{
public void run() {
while(true){
if(messageQueue.peek()!=null){
String str=messageQueue.poll();
synchronized (allOut) {
for(PrintWriter writer:allOut){
writer.println(str);
writer.flush();
}

}
}
try {
if(messageQueue.size()==0){
Thread.sleep(250);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Server server=new Server();
server.start();
}
}
...全文
371 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPF1024 2013-09-13
  • 打赏
  • 举报
回复
建议楼主去看下Swing,然后找个文本框,找个按钮,会比控制台好很多。出现英文就是因为输入法的问题,我以前遇到过。 可以在有聊天信息来的时候弹出一个文本框,也可以接收输入。 没学过Swing.代码搞不了,估计也不难。加油
逍遥jc 2013-09-12
  • 打赏
  • 举报
回复
的确一个客户端就够用了。但是要保证多台机子上啊。不然自己和自己聊么?
jo5690 2013-09-07
  • 打赏
  • 举报
回复
引用 11 楼 a1006570862 的回复:
真正的聊天器是要有两个客户端和一个服务端
你为什么觉得我只有一个客户端呢。。。其实我这是群聊功能的聊天群,接收2个到无数个客户端,前提是你的电脑能跑得起来
jo5690 2013-09-07
  • 打赏
  • 举报
回复
引用 12 楼 zyb134506 的回复:
[quote=引用 9 楼 jo5690 的回复:] [quote=引用 2 楼 zyb134506 的回复:] 输入法的问题,用智能ABC试试
一个正常的聊天工具应该不会受输入法的限制的吧。。。[/quote] 看你的截图你用的是Eclipse中的Console做的输入,用这个的确会有限制.[/quote] 好吧,之前不知道,现在知道了。。。又想起前人说的话,java的控制台做的真是不咋地
jo5690 2013-09-07
  • 打赏
  • 举报
回复
引用 10 楼 e274794140 的回复:
[quote=引用 8 楼 jo5690 的回复:] [quote=引用 1 楼 e274794140 的回复:] 你先写在记事本里再粘到控制台里就不会有那窜英文了吧
这样做也太不符合日常操作了,你跟别人聊天会先在记事本写好,然后一句句CV大法挪到聊天框么[/quote] 这个我以前也做过,遇到跟你的问题是一样的。你可以自己做一个聊天框,别在控制台输入就好了。现在也没有聊天软件是用控制台输入聊天的你说是吧[/quote] 看来是我太高估了java控制台的功能啦。。。当然,现在的聊天工具都是有自己的聊天框的
快乐的2 2013-09-05
  • 打赏
  • 举报
回复
引用 9 楼 jo5690 的回复:
[quote=引用 2 楼 zyb134506 的回复:] 输入法的问题,用智能ABC试试
一个正常的聊天工具应该不会受输入法的限制的吧。。。[/quote] 看你的截图你用的是Eclipse中的Console做的输入,用这个的确会有限制.
地下室森林 2013-09-04
  • 打赏
  • 举报
回复
真正的聊天器是要有两个客户端和一个服务端
马达马达达 2013-09-04
  • 打赏
  • 举报
回复
引用 8 楼 jo5690 的回复:
[quote=引用 1 楼 e274794140 的回复:] 你先写在记事本里再粘到控制台里就不会有那窜英文了吧
这样做也太不符合日常操作了,你跟别人聊天会先在记事本写好,然后一句句CV大法挪到聊天框么[/quote] 这个我以前也做过,遇到跟你的问题是一样的。你可以自己做一个聊天框,别在控制台输入就好了。现在也没有聊天软件是用控制台输入聊天的你说是吧
jo5690 2013-09-04
  • 打赏
  • 举报
回复
引用 2 楼 zyb134506 的回复:
输入法的问题,用智能ABC试试
一个正常的聊天工具应该不会受输入法的限制的吧。。。
jo5690 2013-09-04
  • 打赏
  • 举报
回复
引用 1 楼 e274794140 的回复:
你先写在记事本里再粘到控制台里就不会有那窜英文了吧
这样做也太不符合日常操作了,你跟别人聊天会先在记事本写好,然后一句句CV大法挪到聊天框么
oh_Maxy 2013-09-04
  • 打赏
  • 举报
回复
引用 6 楼 jo5690 的回复:
[quote=引用 5 楼 oh_Maxy 的回复:] [quote=引用 4 楼 oh_Maxy 的回复:] 话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。
好吧,看错了,内部类。。[/quote] 我是问如何解决这个控制台输入会出现英文的问题。。。 [/quote] 我也是运行你的代码的,看3L的截图,“中文问什么”前面没有出现英文呀?估计你带吗改过了吧?你再试试输入“中文问什么”,看看会出现自动给你翻译的情况么?(我只开了一个客户端)
jo5690 2013-09-04
  • 打赏
  • 举报
回复
引用 5 楼 oh_Maxy 的回复:
[quote=引用 4 楼 oh_Maxy 的回复:] 话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。
好吧,看错了,内部类。。[/quote] 我是问如何解决这个控制台输入会出现英文的问题。。。
oh_Maxy 2013-09-04
  • 打赏
  • 举报
回复
引用 4 楼 oh_Maxy 的回复:
话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。
好吧,看错了,内部类。。
oh_Maxy 2013-09-04
  • 打赏
  • 举报
回复
话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。
oh_Maxy 2013-09-04
  • 打赏
  • 举报
回复


试了下LZ的代码,运行良好。。
快乐的2 2013-09-04
  • 打赏
  • 举报
回复
输入法的问题,用智能ABC试试
马达马达达 2013-09-04
  • 打赏
  • 举报
回复
你先写在记事本里再粘到控制台里就不会有那窜英文了吧

62,614

社区成员

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

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