我想在两个类(A和B)之间共享一些信息,这些类在不同的java程序中运行.我没有编写完整的通信协议,而是想为此目的使用java内置rmi类.目前,B类能够远程运行属于A类的方法.是否有可能在A类中使用相同的"连接"来调用B类的方法?否则我可能要实施第二次rmi服务......
BR,
马库斯
任何人都可以给我一个如何使用osgi框架类的例子吗?我不知道如何使用这些类......
BR,
马库斯
基于链接中提出的想法,我实现了几种不同的"睡眠方法".其中一种方法是"二进制睡眠",它看起来像这样:
while (System.currentTimeMillis() < nextTimeStamp)
{
sleepTime -= (sleepTime / 2);
sleep(sleepTime);
}
Run Code Online (Sandbox Code Playgroud)
因为检查是否已经到达下一个时间步骤发生在开头I,所以预计该方法运行时间太长.但模拟误差的累积分布(预期时间 - 实时)如下所示:alt text http://img267.imageshack.us/img267/4224/errorvscummulativearran.jpg
有人知道我为什么会得到这个结果吗?也许方法System.currentTimeMillis()没有真正返回当前时间?
BR,
马库斯
@irreputable
当我进行评估时,我还使用德国统计程序创建了钟形曲线.因为无法更改标题,所以这里是所有相关项目的英文翻译:
Häufigkeit=频率
费勒=错误
Mittelwert =平均值
Std-Abw =标准偏差
alt text http://img694.imageshack.us/img694/2254/bellcurve.jpg
在我的代码中,a有以下抽象超类
public abstract class AbstractClass<Type extends A> {...}
Run Code Online (Sandbox Code Playgroud)
和一些儿童班一样
public class ChildClassA extends AbstractClass<GenericTypeA> {...}
public class ChildClassB extends AbstractClass<GenericTypeB> {...}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种优雅的方式,我可以通用的方式在抽象类中使用子类的泛型类型(GenericTypeA,GenericTypeB,...).
为了解决这个问题,我目前定义了这个方法
protected abstract Class<Type> getGenericTypeClass();
Run Code Online (Sandbox Code Playgroud)
在我的抽象类中实现了该方法
@Override
protected Class<GenericType> getGenericTypeClass() {
return GenericType.class;
}
Run Code Online (Sandbox Code Playgroud)
在每个儿童班.
是否可以在我的抽象类中获取子类的泛型类型而不实现此帮助器方法?
BR,
马库斯
在for-loop中,我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器SUMO.为了确保我的程序"实时"模拟(1个模拟步骤= 1秒),我想在处理阶段之后睡眠我的程序,直到下一个步骤开始.为了获得更好的结果,我正在根据最初采用的参考时间戳计算时间戳.
循环看起来像这样:
System.out.println("start of traffic simulation ...");
for (int i = 0; i < stepCount; i++)
{
System.out.println("step: " + i);
// set before timeStamp
beforeTimeStamp = System.currentTimeMillis();
if (firstStep)
{
// get reference timeStamp
referenceTimeStamp = beforeTimeStamp;
firstStep = false;
}
else
{
// get next vehicleVector
vehicleVector = masterControl.traCIclient.simulateStep();
}
// process vehicleVector
// set after timeStamp
afterTimeStamp = System.currentTimeMillis();
processingTime = afterTimeStamp - beforeTimeStamp;
// calculate sleepTime
sleepTime = referenceTimeStamp + ((i + 1) * 1000) …Run Code Online (Sandbox Code Playgroud) 因为我不想为基于客户端服务器的应用程序实现通信协议,所以我在两端都实现了RMI客户端和RMI服务器,以便在两个组件之间进行信息交换.
如果我尝试通过在同一台机器上启动两个组件来使用我的应用程序,一切正常.但是,如果我将组件拆分为两台不同的计算机(Kubuntu 9.04作为具有禁用防火墙和本机Ubuntu 9.04环境的Windows 7 RC环境中的虚拟机),似乎RMI客户端无法执行在服务器端定义.(每个函数调用都会导致RMI异常.)
目前我只将网络接口两侧的系统属性"java.rmi.server.hostname"设置为应该用于数据交换的网络接口,并注册默认端口以与rmi守护进程(?)rmid进行通信.
有人知道会出现什么问题吗?我是否必须设置一些其他参数,如"java.rmi.server.codebase"(http://java.sun.com/j2se/1.4.2/docs/guide/rmi/javarmiproperties.html)才能使用我的应用程序中的RMI功能?
编辑:好的,这里有一些额外的信息:
在初始化阶段,我的客户端尝试建立与服务器组件的RMI服务器的连接,该服务器组件使用以下两种方法进行初始化:
private void initialize()
{
// set ip address of rmi server
System.setProperty("java.rmi.server.hostname", ipAddress);
// try to register rmi server
try
{
LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
}
catch (Exception e)
{
// ignore
}
}
public void start()
{
System.out.print("starting master control RMI server ...");
try
{
Naming.rebind("MasterControl", this);
}
catch (Exception e)
{
System.out.println("error: could not initialize master control RMI server");
System.exit(1);
}
// set running flag
isRunning = true;
System.out.println(" …Run Code Online (Sandbox Code Playgroud) java ×6
rmi ×2
class ×1
connection ×1
generics ×1
networking ×1
osgi ×1
properties ×1
simulation ×1
sleep ×1
time ×1
timestamp ×1