为什么启动一个线程的时候用start()方法会出错?

superbasten 2002-09-15 10:44:43
我做了一个服务器端的程序,实现如下功能:当客户telnet到服务器时,客户端显示
hello!,程序如下:
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
public class ClientThread extends Thread {
Socket client;
public ClientThread(Socket c1)
{ try{
client=c1;
}catch(Exception ex)
{ System.out.println("Exception");}
};
public void run()
{
try{
PrintWriter out=new PrintWriter(client.getOutputStream(),true);
out.println("hello!");
out.close();
}catch(Exception ex)
{ System.out.println("Exception");}
}
}
/////////////////////////////////////////////////////////////////////
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
import df1.*;//ClientThread在df1目录下
public class myserver1{

public static void main(String args[])
{
try{
ServerSocket server=new ServerSocket(5555);
while(true)
{
ClientThread newclient=new ClientThread(server.accept());
newclient.start();
}
}
catch(Exception ex)
{ System.out.println(ex.getMessage());}
}
}
怎么老出现如下错误的?
E:\temp\ex2>javac myserver1.java
myserver1.java:14: cannot resolve symbol
symbol : method start ()
location: class ClientThread
newclient.start();
^
1 error
请指点,谢谢!
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pentax 2002-09-16
  • 打赏
  • 举报
回复
你最好都放到一个包里试一下。我试了一下没问题。
package accessible;

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
public class ClientThread extends Thread {
Socket client;
public ClientThread(Socket c1)
{
super();
try{
client=c1;
}catch(Exception ex)
{ System.out.println("Exception");}
};
public void run()
{
try{
PrintWriter out=new PrintWriter(client.getOutputStream(),true);
out.println("hello!");
out.close();
}catch(Exception ex)
{ System.out.println("Exception");}
}
}
/////////////////////////
package accessible;

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class myserver1{

public static void main(String args[])
{
try{
ServerSocket server=new ServerSocket(5555);
while(true)
{
ClientThread newclient=new ClientThread(server.accept());
newclient.start();
}
}
catch(Exception ex)
{ System.out.println(ex.getMessage());}
}
}
//////////////////////////
package accessible;


import java.net.*;
import java.io.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/

public class TestSocket {

Socket connection;
DataOutputStream output;
DataInputStream input;
public TestSocket() {
try{
this.connection = new Socket(InetAddress.getLocalHost(),5555);
input = new DataInputStream(connection.getInputStream());
output = new DataOutputStream(connection.getOutputStream());
output.write(5555);
byte bb[] = new byte[5];
input.read(bb);
String str = new String(bb);
System.out.println(str);
output.close();
input.close();
}catch(Exception ee){ee.printStackTrace();}

}
public static void main(String[] args) {
TestSocket testSocket1 = new TestSocket();
}
}
superbasten 2002-09-15
  • 打赏
  • 举报
回复
照你说的该了,依然是那个错误啊。
pentax 2002-09-15
  • 打赏
  • 举报
回复
public ClientThread(Socket c1)
{
super();/////////////////////////
try{
client=c1;
}catch(Exception ex)
{ System.out.println("Exception");}
};
upc_chenli 2002-09-15
  • 打赏
  • 举报
回复
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;
public class ClientThread extends Thread {
Socket client;
public ClientThread(Socket c1)
{ try{
client=c1;
}catch(Exception ex)
{ System.out.println("Exception");}
};
public void run()
{
try{
PrintWriter out=new PrintWriter(client.getOutputStream(),true);
out.println("hello!");
out.close();
}catch(Exception ex)
{ System.out.println("Exception");}
}
}
---
上面的代码完整吗?怎么没有package.
superbasten 2002-09-15
  • 打赏
  • 举报
回复
没明白,能不能说得再具体些。
pentax 2002-09-15
  • 打赏
  • 举报
回复
你在下线程构造函数里一开始加一句super()试一下,Thread的构造函数是没有Socket的,所以你应该调用父的来构造。
super_zzw 2002-09-15
  • 打赏
  • 举报
回复
一。需要打包
比如client打包到myClient包中(package myClient)
server打包到myServer包中(package myServer),并且引入client包 (import myClient)
或者都打包到SocketTest包中(package SocketTest),这样就无须在server中引入什么包了。

二。 while(true)
{
ClientThread newclient=new ClientThread(server.accept());
newclient.start();
}
这么设计也有问题的,将无限产生孤儿对象,内存将很快被吃掉!

62,628

社区成员

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

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