当前位置:编程学习 > JAVA >>

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

一个简易聊天工具,测试都还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();
}
}
控制台 技术 java 聊天工具 测试 --------------------编程问答-------------------- 你先写在记事本里再粘到控制台里就不会有那窜英文了吧 --------------------编程问答-------------------- 输入法的问题,用智能ABC试试 --------------------编程问答--------------------

试了下LZ的代码,运行良好。。 --------------------编程问答-------------------- 话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。 --------------------编程问答--------------------
引用 4 楼 oh_Maxy 的回复:
话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。

好吧,看错了,内部类。。 --------------------编程问答--------------------
引用 5 楼 oh_Maxy 的回复:
Quote: 引用 4 楼 oh_Maxy 的回复:

话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。

好吧,看错了,内部类。。

我是问如何解决这个控制台输入会出现英文的问题。。。
--------------------编程问答--------------------
引用 6 楼 jo5690 的回复:
Quote: 引用 5 楼 oh_Maxy 的回复:

Quote: 引用 4 楼 oh_Maxy 的回复:

话说,想模仿多线程的么?要继承Thread或者实现Runnable,你这直接写了个start方法,没有多线程的效果的。。

好吧,看错了,内部类。。

我是问如何解决这个控制台输入会出现英文的问题。。。

我也是运行你的代码的,看3L的截图,“中文问什么”前面没有出现英文呀?估计你带吗改过了吧?你再试试输入“中文问什么”,看看会出现自动给你翻译的情况么?(我只开了一个客户端) --------------------编程问答--------------------
引用 1 楼 e274794140 的回复:
你先写在记事本里再粘到控制台里就不会有那窜英文了吧

这样做也太不符合日常操作了,你跟别人聊天会先在记事本写好,然后一句句CV易做图挪到聊天框么 --------------------编程问答--------------------
引用 2 楼 zyb134506 的回复:
输入法的问题,用智能ABC试试

一个正常的聊天工具应该不会受输入法的限制的吧。。。 --------------------编程问答--------------------
引用 8 楼 jo5690 的回复:
Quote: 引用 1 楼 e274794140 的回复:

你先写在记事本里再粘到控制台里就不会有那窜英文了吧

这样做也太不符合日常操作了,你跟别人聊天会先在记事本写好,然后一句句CV易做图挪到聊天框么

这个我以前也做过,遇到跟你的问题是一样的。你可以自己做一个聊天框,别在控制台输入就好了。现在也没有聊天软件是用控制台输入聊天的你说是吧 --------------------编程问答-------------------- 真正的聊天器是要有两个客户端和一个服务端 --------------------编程问答--------------------
引用 9 楼 jo5690 的回复:
Quote: 引用 2 楼 zyb134506 的回复:

输入法的问题,用智能ABC试试

一个正常的聊天工具应该不会受输入法的限制的吧。。。

看你的截图你用的是Eclipse中的Console做的输入,用这个的确会有限制. --------------------编程问答--------------------
引用 10 楼 e274794140 的回复:
Quote: 引用 8 楼 jo5690 的回复:

Quote: 引用 1 楼 e274794140 的回复:

你先写在记事本里再粘到控制台里就不会有那窜英文了吧

这样做也太不符合日常操作了,你跟别人聊天会先在记事本写好,然后一句句CV易做图挪到聊天框么

这个我以前也做过,遇到跟你的问题是一样的。你可以自己做一个聊天框,别在控制台输入就好了。现在也没有聊天软件是用控制台输入聊天的你说是吧

看来是我太高估了java控制台的功能啦。。。当然,现在的聊天工具都是有自己的聊天框的 --------------------编程问答--------------------
引用 12 楼 zyb134506 的回复:
Quote: 引用 9 楼 jo5690 的回复:

Quote: 引用 2 楼 zyb134506 的回复:

输入法的问题,用智能ABC试试

一个正常的聊天工具应该不会受输入法的限制的吧。。。

看你的截图你用的是Eclipse中的Console做的输入,用这个的确会有限制.

好吧,之前不知道,现在知道了。。。又想起前人说的话,java的控制台做的真是不咋地 --------------------编程问答--------------------
引用 11 楼 a1006570862 的回复:
真正的聊天器是要有两个客户端和一个服务端

你为什么觉得我只有一个客户端呢。。。其实我这是群聊功能的聊天群,接收2个到无数个客户端,前提是你的电脑能跑得起来 --------------------编程问答-------------------- 的确一个客户端就够用了。但是要保证多台机子上啊。不然自己和自己聊么? --------------------编程问答-------------------- 建议楼主去看下Swing,然后找个文本框,找个按钮,会比控制台好很多。出现英文就是因为输入法的问题,我以前遇到过。

可以在有聊天信息来的时候弹出一个文本框,也可以接收输入。

没学过Swing.代码搞不了,估计也不难。加油
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,