我正在爲學校開展一個項目。我們正在建造一個可以裝載和卸載船隻的港口。控制部分在Netbeans
和JME
模擬。 我們通過套接字將數據從Netbeans發送到JME
。 JME正在運行一個服務器端口,接受Netbeans
的輸入。jmonkey和netbeans之間的連接
例如Netbeans
發送一個容器的ID,並在JME
的起重機獲取該容器並將其放在岸上,以便車輛可以拿起它。
我們更改主計數(Main.count = 2
),因此SimpleUpdate
可以調用方法。問題是有時候東西會被跳過。另外我認爲,當我們發送更多信息,例如獲取容器的車輛時,情況會變得更糟。我怎樣才能解決這個問題?還有其他方法可以獲得良好的聯繫嗎?
代碼:
Netbeans的
發送端
public static void run() throws Exception
{
Socket socket = new Socket("Localhost", 4321);
out = new ObjectOutputStream(socket.getOutputStream());
}
//Sent arraystring to Simulation
public void sent(String sentString){
try {
out.writeObject(sentString);
} catch (IOException ex) {
Logger.getLogger(CommunicationWithSimulatoin.class.getName()).log(Level.SEVERE, null, ex);
}
}
主送些東西,例如
for(int i = Calculator.getContainersFromMaritime(); i > 1; i--)
{
Thread.sleep(50);
sim.sent("craneCon;" + i + ";");
System.out.println(i);
}
JME
監聽
public static void Listener() throws Exception {
boolean isRunning = true;
//Creates the server socket
ServerSocket sSocket = new ServerSocket(4321);
//Acception a connection from the client
Socket socket = sSocket.accept();
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
//Get the input from the client
while (isRunning) {
//Reads and prints the input
test = (String) in.readObject();
System.out.println(test);
String[] parts = receivedString.split(";");
if(parts[0].equals("ContainerPositionsMaritime"))
{
Maritime.ContainersOnBoard = receivedString.split(";");
Main.count = 0;
}
if(parts[0].equals("craneCon"))
{
int containerId = Integer.parseInt(parts[1]);
SeagoingCranes.idContainer = containerId;
Main.count = 2;
}
}
}
主要simpleupdate
public void simpleUpdate(float tpf) {
if(count == 0)
{
InitContainers();
//martime.setLocalTranslation(0, 500.0f, 0);
count = 999;
}
if(count == 2)
{
InitCrane(SeagoingCranes.idContainer);
count = 999;
}
if(martime != null)
{
martime.move(0,0,0.25f*tpf);
}
}
netbeans中的控件是什麼意思?你的意思是你在netbeans中運行一個簡單的應用程序? –
控制系統的意思是發送JME零件必須做的事情,比如拿到那個容器或者把那輛車送到那個地方拿起那個容器。 –
我無法回答這個問題,但請注意netbeans只是一個IDE,它不是您的程序的一部分;這是你寫你的程序與 –