新手,第一次使用单例模式,想写一个很简单很简单的类似聊天室的玩意。代码如下:第一个能编译通过,但第二个使用它的时候不行。
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,我知道应该有些地方错了,但不知道哪里错了,望指教。

解决方案 »

  1.   

    坑爹呢
    哥跑的很正常,什么问题都没有。
    我建议你用project---clean重新编译下
      

  2.   

    虽说程序有些问题,但是运行完全没问题
    编译也不报错
    jdk我用的6.0
      

  3.   

    我用的是jdk自带的编译器,在命令行下使的,它说找不到符号TalkThread= =
      

  4.   

    我用的myeclipse9.0。
    找不到符号,我估计可能是path或者classpath问题
      

  5.   

    但是我用的是eclipse写的,因为它里面显示的错误警告我看得纠结,所以索性在命令行下编译看看哪里错了= =
      

  6.   

    在eclipse那行左边没有红色的叉,但是有黄色的警告。= =用eclipse次数表示不超过十次
      

  7.   

    TalkThread tt = TalkThread.getTInstance();
    这一行中我的Eclipse报的警告是tt从来没有被读(使用)过,话说你这行的用意是什么?同样没有用过的还有下边定义的PW
      

  8.   

    命令行的classPath比较复杂,还是建议用IDE
      

  9.   

    弄好了。貌似我上面的与2楼说的一样,没错误,估计是ide没及时自动保存还是啥的= =第一个十分雏形聊天室写好了哇哈哈