2012-02-21 25 views
0

我寫了一個從Matlab環境調用的java代碼。代碼返回一個DATE object.I想使用這個Date對象進行進一步處理。但是如何?捕獲日期對象進一步處理

import java.io.IOException; 
import org.apache.commons.net.TimeTCPClient;// third party class 
import java.util.Date; 
public final class TimeClient 
{ 

public static final Date timeTCP(String host) throws IOException 
{ 
TimeTCPClient client = new TimeTCPClient(); 
try 
{ 
// We want to timeout if a response takes longer than 4 seconds 
client.setDefaultTimeout(4000); 
client.connect(host); 
Date t=client.getDate(); 
System.out.println(t); 
return t; 
} 
finally 
{ 
client.disconnect(); 
} 
} 


public static final void main(String[]args) 
{ 
{ 
try 
{ 
timeTCP(args[0]); 
} 
catch (IOException e) 
{ 
e.printStackTrace(); 
System.exit(1); 
} 
} 
} 
} 

這是我的Matlab代碼它調用上面的Java code.I保存它作爲一個M文件

function t = gettime() 

    import java.io.IOException 
    import java.util.Date 
    import org.apache.commons.net.TimeTCPClient 
    import MATLAB.project.* 
    tc= TimeClient 
    tc.main('time-a.timefreq.bldrdoc.gov') 
end 

回答

1

由於DNA mentioned,你應該直接調用timeTCP,你可以扔掉你的main函數在Java中(就Matlab而言)。你最後MATLAB線必須

t = tc.timeTCP('time-a.timefreq.bldrdoc.gov') 

否則你的MATLAB函數只顯示日期(由於在該行的末尾缺少分號),但你的變量t仍然未設置,這將導致運行時錯誤如果有人調用你的函數gettime明確期待輸出,例如variablename = gettime;

+0

thanx Jonas你再次來拯救我。 – shree 2012-02-21 23:07:08

2

如果我理解的Matlab代碼的權利,您呼叫的TimeClientmain()方法。在Java中,main()方法的返回類型爲void,即它們不返回任何內容,因此您的Matlab代碼無法獲取時間值。

另外,從main()你叫timeTCP(),它返回一個Date,但你不這樣做與返回任何有價值的東西,所以它會被丟失,即使main()可以返回。

您需要調用一個返回合適值的非void方法(並可能將該值賦給Matlab中的一個變量)。

更新時間:看起來你可以只調用timeTCP()直接,而不是main(),因爲timeTCP()不會返回Date

我對MATLAB不太熟悉,所以不確定是否需要從gettime()明確地返回它,或者這是否由最後一條語句暗示。

+0

@ DNA我應該在哪裏更改代碼? – shree 2012-02-21 22:47:29

+0

查看我更新的答案。 – DNA 2012-02-21 22:51:50

+0

@ DNA我在matlab中展示了最後一行代碼,因爲main是TCPClient類的方法,因此我必須創建一個類的對象。在該對象的幫助下,我調用它的main方法,main方法的參數是時間服務器的地址。 t變量在matlab代碼中不存儲任何值,完全沒用。 – shree 2012-02-21 22:58:30