我有一个我在下面粘贴的java代码:
package lreal.server;
import fb.datatype.LREAL;
import fb.rt.AbstractEvent;
import fb.rt.EventServer;
import fb.rt.FBRManagementException;
import fb.rt.net.SERVER;
import java.util.*;
public class Double5 {
public SERVER server = new SERVER(0, 1); // creating a server
static LREAL rd1 = new LREAL(); // the variable in which the value received
// from client is stored
// it is initialized to zero on declaration.
public double m;
public Double5() {
// initialize the service / server
server.QI.value = true;
server.ID.value = "10.0.0.3:4410";
server.INIT.serviceEvent(null);
try {
// establishing connection to the client.
server.connectOV("RD_1", rd1);
} catch (FBRManagementException e1) {
e1.getMessage();
}
// Set up output event handling
final EventServer initoServer = new AbstractEvent() {
@Override
public void serviceEvent(EventServer e) {
System.out.println("INITO(QO=" + server.QO + ",STATUS= "
+ server.STATUS + "RD_1= " + rd1);
}
};
server.INITO.connectTo(initoServer);
server.IND.connectTo(new AbstractEvent() {
@Override
public void serviceEvent(EventServer e) {
initoServer.serviceEvent(e);
System.out.println("INDICATE(QO=" + server.QO + ",STATUS= "
+ server.STATUS + "RD_1= " + rd1.value);
m = rd1.value;
System.out.println(" value recived inside is " + rd1);
server.QI.value = false;
server.INIT.serviceEvent(null);
}
});
}
public static void main(String[] args) {
Double5 demo1 = new Double5();
synchronized (demo1) {
while (demo1.m == 0) {
try {
System.out.println(" zero value received");
demo1.wait();
} catch (InterruptedException e2) {
e2.getMessage();
}
}
System.out.println(demo1.m);
demo1.notify();
}
}
}
这是我得到的输出:
zero value received
INITO(QO=true,STATUS= "OK"RD_1= 45.65
INDICATE(QO=true,STATUS= "OK"RD_1= 45.65
value recived inside is 45.65
INITO(QO=false,STATUS= "TERMINATED"RD_1= 45.65
本程序的基本功能是创建一个接受客户端值的服务器。接收的值存储在类LREAL()的实例rd1中。运行此代码后,我初始化另一个软件FBDK上的客户端。编码用于与该软件通信。
首先执行initoserver然后执行indserver。
我怀疑的是:我写了一个声明为m = rd1.value。 value的类型为double。当我运行这个程序时,m被存储为零。它应该具有客户发送的值(在这种情况下:45.65)。我想知道在main方法中初始化对象demo1之后是否有阻止执行print语句的方法,直到45.65的值存储在m中。我希望异步这样做。我查看了wait和notify方法,但不确定它们是否可以按照我在这种情况下使用的方式使用,因为我想在同一个类中控制执行。谢谢。
答案 0 :(得分:0)
我现在尝试使用while循环并且它有效。我能够解决它。猜猜我没有必要深入同步。结果比这更简单。无论如何,感谢您的所有帮助和见解。欣赏它。
public static void main(String[] args) {
Double5 demo1 = new Double5();
while (demo1.m==0)
{
System.out.println(" zero value received");
}
System.out.println(" value received is "+ demo1.m);
}