在构造器中RemoteDataServer m_rmtDataServer = new RemoteDataServer();
你的对象在,new以前,他在内存中是没有位置呢!
RemoteDataServer m_rmtDataServer = new RemoteDataServer(); 想必RemoteDataServer这个类已经有构造器了,直接写上面的代码不就行了。有构建好的是什么意思?
是不是指自己构造的? 如果是,也一样要先NEW一下
在构造器中RemoteDataServer m_rmtDataServer = new RemoteDataServer();我说的是在你的Device类的构造器中初始化 比如: public Device(){ RemoteDataServer m_rmtDataServer = new RemoteDataServer(); }
public class RemoteDataServer extends RemoteServer implements DataSender { public RemoteDataServer(int port,String name) { super(port,name); } public void SendDataToCenter(byte[] data) {
在主类定义成 public static RemoteDataServer rmtDataServer; rmtDataServer=new RemoteDataServer(lIntDataPort,"Remote Data Server"); 在device类中也定义 public static RemoteDataServer rmtDataServer; 运行到rmtDataServer.SendDataToCenter(data);出错 java.lang.NullPointerException at com.tstar.Device.setReadAllDB(Device.java:624) at com.tstar.Device.processReadAllData(Device.java:446) at com.tstar.Device.access$000(Device.java:20) at com.tstar.Device$1$ReadAllThread.run(Device.java:341) at java.lang.Thread.run(Thread.java:536)帮帮我呀,我要涂血拉
RemoteDataServer m_rmtDataServer=new RemoteDataServer();
想必RemoteDataServer这个类已经有构造器了,直接写上面的代码不就行了。有构建好的是什么意思?
如果是,也一样要先NEW一下
比如:
public Device(){
RemoteDataServer m_rmtDataServer = new RemoteDataServer();
}
...
private RemoteDataServer m_rmtDataServer
....
private void setReadAllDB(byte[] data)
{
m_rmtDataServer.SendDataToCenter(data);
}}
import com.tstar.*;
import java.io.*;
import java.net.*;
public class RemoteDataServer extends RemoteServer
implements DataSender
{
public RemoteDataServer(int port,String name)
{
super(port,name);
} public void SendDataToCenter(byte[] data)
{
System.out.println("ok");
for(int i=0;i<getWorkers().size();i++)
{
getWorkers().getWorkerAt(i).sendData(data);
} }
}
调用时候出拉问题m_rmtDataServer.SendDataToCenter(data);
如何改
...
private RemoteDataServer m_rmtDataServer = new RemoteDataServer(portNumber,name);
....
private void setReadAllDB(byte[] data)
{
m_rmtDataServer.SendDataToCenter(data);
}}
RemoteDataServer rmtDataServer=new RemoteDataServer(lIntDataPort,"Remote Data Server");
请问在Device类中如何使用
Device类中的RemoteDataServer rmtDataServer是Device的成员
它并不知道Device会被哪个类所调用,所以也就不存在主类的事情
除非你的Device是某个类的inner class你可以这样做:
class Device {
RemoteDataServer rmtDataServer;
public void setRemoteDataServer(int port,String name) {
this.rmtDataServer = new RemoteDataServer(port, name);
}
}然后在主类中这样构建:
Device device = new Device();
device.setRemoteDataServer(lIntDataPort,"Remote Data Server");
emoteDataServer rmtDataServer=new RemoteDataServer(lIntDataPort,"Remote Data Server");
rmtDataServer.start();
我想问在device类中怎么样调用这个实例
private void setReadAllDB(RemoteDataServer m_rmtDataServer, byte[] data) {
m_rmtDataServer.SendDataToCenter(data);
}
}
private void setReadAllDB(RemoteDataServer m_rmtDataServer, byte[] data)
这是重新新建立,我需要直接调用
这就是直接调用啊
你把你在主类中构建的RemoteDataServer实例作为参数传递进去就可以了
怎么将主类中的实例做为参数传到RemoteDataServer m_rmtDataServer中来
谢谢你的回答,真的感谢你
public class Device {
private void setReadAllDB(RemoteDataServer m_rmtDataServer, byte[] data) {
m_rmtDataServer.SendDataToCenter(data);
}
}那么在你的主类中:
Device device = new Device();
device.setReadAllDB(m_rmtDataServer, data);
//这里m_rmtDataServer就是你在主类中构建的RemoteDataServer对象
主类
public class StarDataServer
{
......
private void startServer()
{ devWorker.addDeviceServiceListener(rmtEventServer);
devWorker.addRemoteServer(rmtServer) ;
devWorker.addRemoteServer(rmtDataServer);
rmtEventServer.start();
rmtServer.start();
rmtDataServer.start();
}RemoteDataServer类public class RemoteDataServer extends RemoteServer
implements DataSender
{
public RemoteDataServer(int port,String name)
{
super(port,name);
}
//重载父类
public void SendDataToCenter(byte[] data)
{
System.out.println("ok");
for(int i=0;i<getWorkers().size();i++)
{
getWorkers().getWorkerAt(i).sendData(data);
} }
}device类
public class Device{
...
private RemoteDataServer m_rmtDataServer
....
private void setReadAllDB(byte[] data)
{
m_rmtDataServer.SendDataToCenter(data);
}}
主类不能动,怎么将主类中的rmtServer做为参数传到RemoteDataServer m_rmtDataServer中来
里面有一个初始化后的RemoteServer对象rmtServer
而你现在要写一个Device类
里面会用到一个继承自RemoteServer类的RemoteDataServer的对象m_rmtDataServer
你要将StarDataServer中的rmtServer在Device中当作RemoteDataServer来用,还调用了RemoteDataServer类特有的方法SendDataToCenter很遗憾,不可以!
那么这样是可以的:A a = new B();//这是java的多态性
但B b = new A();则是错误的也就是说,你不能把一个父类的对象当作它的子类的对象来用
你要将StarDataServer中的rmtServer在Device中当作RemoteDataServer来用
应该是StarDataServer中的rmtDataServer 没有继承的关系
那现在能否调用?
那是不行
除非把主类中的rtmDataServer定义为静态(static)的
就可以在Device类中操作它了
你要将StarDataServer中的rmtServer在Device中当作RemoteDataServer来用
应该是StarDataServer中的rmtDataServer 没有继承的关系
那现在能否调用?
如果rmtDataServer是StarDataServer的成员
你可以在你的Device类中创建一个StarDataServer的对象
然后调用啊:public class Device {
private void setReadAllDB(byte[] data) {
StarDataServer starDataServer= new StarDataServer();
starDataServer.rmtDataServer.SendDataToCenter(data);
}
}
public static RemoteDataServer rmtDataServer;
rmtDataServer=new RemoteDataServer(lIntDataPort,"Remote Data Server");
在device类中也定义
public static RemoteDataServer rmtDataServer;
运行到rmtDataServer.SendDataToCenter(data);出错
java.lang.NullPointerException
at com.tstar.Device.setReadAllDB(Device.java:624)
at com.tstar.Device.processReadAllData(Device.java:446)
at com.tstar.Device.access$000(Device.java:20)
at com.tstar.Device$1$ReadAllThread.run(Device.java:341)
at java.lang.Thread.run(Thread.java:536)帮帮我呀,我要涂血拉