新手,第一次使用单例模式,想写一个很简单很简单的类似聊天室的玩意。代码如下:第一个能编译通过,但第二个使用它的时候不行。
package com.google;import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;public class TalkThread extends Thread {
private static TalkThread TT = new TalkThread();
private static final Map<String,PrintWriter> m = new ConcurrentHashMap<String,PrintWriter>();
private static final ConcurrentLinkedQueue<String> c = new ConcurrentLinkedQueue<String>();
private TalkThread() {
}
public void addClient(PrintWriter PW) {
synchronized (this) {
m.put(Thread.currentThread().getName(),PW);
}
}
public static TalkThread getTInstance() {
return TT;
}
public void removeClient() {
synchronized (this) {
m.remove(Thread.currentThread().getName());
}
}
public void addmessage(String msg) {
synchronized (this) {
c.offer(msg);
notify();
}
}
public void run() {
String msg = null;
while(true) {
synchronized(this) {
if(msg ==null) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if((msg = c.poll()) != null) {
Collection<PrintWriter> cc = m.values();
for (Iterator iterator = cc.iterator(); iterator.hasNext();) {
PrintWriter printWriter = (PrintWriter) iterator.next();
printWriter.println(msg);
}
}
}
}
}
}
package com.google;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8029);
Socket s = null;
TalkThread tt = TalkThread.getTInstance();//这里提示没有TalkThread这个符号,我就奇怪了
while(true) {
s = ss.accept();
BufferedReader Br = new BufferedReader(
new InputStreamReader(
s.getInputStream()
)
);
PrintWriter PW= new PrintWriter(
new OutputStreamWriter(
s.getOutputStream()
),
true);
String message = null;
while((message = Br.readLine()) != null) {
if(message.equals("88")) {
System.out.println("对方请求断开");
s.close();
}
// TT.addmessage(message);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
类Server中提示找不到TalkThread,我知道应该有些地方错了,但不知道哪里错了,望指教。
package com.google;import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;public class TalkThread extends Thread {
private static TalkThread TT = new TalkThread();
private static final Map<String,PrintWriter> m = new ConcurrentHashMap<String,PrintWriter>();
private static final ConcurrentLinkedQueue<String> c = new ConcurrentLinkedQueue<String>();
private TalkThread() {
}
public void addClient(PrintWriter PW) {
synchronized (this) {
m.put(Thread.currentThread().getName(),PW);
}
}
public static TalkThread getTInstance() {
return TT;
}
public void removeClient() {
synchronized (this) {
m.remove(Thread.currentThread().getName());
}
}
public void addmessage(String msg) {
synchronized (this) {
c.offer(msg);
notify();
}
}
public void run() {
String msg = null;
while(true) {
synchronized(this) {
if(msg ==null) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if((msg = c.poll()) != null) {
Collection<PrintWriter> cc = m.values();
for (Iterator iterator = cc.iterator(); iterator.hasNext();) {
PrintWriter printWriter = (PrintWriter) iterator.next();
printWriter.println(msg);
}
}
}
}
}
}
package com.google;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8029);
Socket s = null;
TalkThread tt = TalkThread.getTInstance();//这里提示没有TalkThread这个符号,我就奇怪了
while(true) {
s = ss.accept();
BufferedReader Br = new BufferedReader(
new InputStreamReader(
s.getInputStream()
)
);
PrintWriter PW= new PrintWriter(
new OutputStreamWriter(
s.getOutputStream()
),
true);
String message = null;
while((message = Br.readLine()) != null) {
if(message.equals("88")) {
System.out.println("对方请求断开");
s.close();
}
// TT.addmessage(message);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
类Server中提示找不到TalkThread,我知道应该有些地方错了,但不知道哪里错了,望指教。
哥跑的很正常,什么问题都没有。
我建议你用project---clean重新编译下
编译也不报错
jdk我用的6.0
找不到符号,我估计可能是path或者classpath问题
这一行中我的Eclipse报的警告是tt从来没有被读(使用)过,话说你这行的用意是什么?同样没有用过的还有下边定义的PW