поймать дату объекта для дальнейшей обработки - PullRequest
0 голосов
/ 22 февраля 2012

Я написал код Java, который вызывается из среды Matlab. Код возвращает объект DATE . Я хочу использовать этот объект 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. Я сохранил его как 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

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Если я правильно понимаю код Matlab, вы вызываете метод main() для TimeClient.В Java методы main() имеют тип возврата void, то есть они ничего не возвращают, поэтому ваш код Matlab не может получить значение времени.

Кроме того, из main() вы вызываетеtimeTCP(), который возвращает Date, но тогда вы ничего не делаете с возвращаемым значением, поэтому оно будет потеряно, даже если main() сможет его вернуть.

Вам нужно вызвать не-void метод, который возвращает подходящее значение (и, вероятно, присваивает это значение переменной в Matlab).

Обновлено: Похоже, вы могли бы просто вызвать timeTCP() напрямую, а не main(), потому что timeTCP() возвращает Date.

Я не очень знаком с MATLAB, поэтому не уверен, нужно ли вам явно возвращать его из gettime() или это подразумевается в последнем утверждении.

1 голос
/ 22 февраля 2012

Поскольку DNA упоминает , вы должны вызвать timeTCP напрямую, и вы можете выбросить вашу main функцию в Java (что касается Matlab).Ваша последняя строка MATLAB должна быть

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

, в противном случае ваша функция MATLAB только отображает дату (из-за отсутствия точки с запятой в конце строки), но ваша переменная t остаетсяunset, что вызовет ошибку времени выполнения, если кто-то вызовет вашу функцию gettime, явно ожидая вывода, например, variablename = gettime;.

...