Не удалось создать прокси-сервер MATLAB за 180000 миллисекунд - PullRequest
2 голосов
/ 20 марта 2012

Я использую библиотеку matlabcontrol-4.0.0.jar для вызова Matlab из Java.Это на Ubuntu 11.10, Matlab r2011b и Java версии "1.6.0_23".

При попытке запустить эту простую программу:

public static void main(String[] args) throws MatlabConnectionException,
      MatlabInvocationException {

   //Create a proxy, which we will use to control MATLAB
   MatlabProxyFactory factory = new MatlabProxyFactory(options);
   MatlabProxy proxy = factory.getProxy();

   //Display 'hello world' just like when using the demo
   proxy.eval("disp('hello world')");

   //Disconnect the proxy from MATLAB
   proxy.disconnect();
}

У меня появляется, после появления экрана запуска Matlab (что хорошо), время ожидания:

Исключение в потоке "main" matlabcontrol.MatlabConnectionException: Невозможно создать прокси MATLAB за 180000 миллисекунд в matlabcontrol.RemoteMatlabProxyFactory.getProxy (RemoteMatlabProxyFactory.javaProxy.javaFact.Fact.xyxyFact.Fact.Fac.xyxyFact.Fact.xyxyFact.Fact.Fac.xyxyFact.Fac.xyxFatFactory.xybFat.Fact.Axy.Fact.Fxy.FactFact.Fac.xybFatFactory.Factory.xyxyFact.Fac.FatFactory.xyxyFact.Fac.FatFact.Fac.Fact.Fact.Fact.Fact.Fact.Fact.Fact.Fact.Fact.Fact.Fact.FX для файловой системы:81) на Main.main (Main.java:15)

Я искал повсюду, включая все подсказки от stackoverflow, но, похоже, ничто не подходит к проблеме, с которой я сталкиваюсь

* ОБНОВЛЕНИЕ *

Я запрещаю упоминать, что я уже попробовал сценарий, описанный Джошуа Капланом (спасибо!). Кажется, это будет для моегослучай не поможет, это означает, что он просто ждет.Может ли кто-нибудь рассказать о протоколе связи между Java и прокси-сервером Matlab?-> Это также может быть проблема несовместимости, я разместил на сайте, предоставляющем ресурс, до сих пор не получил ответа ...

* END UPDATE *

Итак, любой из вас, с чего начать, это было бы замечательно, спасибо

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Метод getProxy() - это операция блокировки с тайм-аутом по умолчанию, равным 3 минутам (или 180 секундам, или 180000 миллисекундам). Для машин большинства людей это достаточно долго, если соединение не было установлено за это время, что-то пошло не так. Однако это время ожидания можно изменить, создав экземпляр MatlabProxyFactoryOptions, который выполняется с помощью MatlabProxyFactoryOptions.Builder. Созданный вами экземпляр MatlabProxyFactoryOptions передается в конструктор MatlabProxyFactory . Вот пример с 5-минутным таймаутом:

MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
                                     .setProxyTimeout(300000L)
                                     .build();
MatlabProxyFactory factory = new MatlabProxyFactory(options);
MatlabProxy proxy = factory.getProxy();

В качестве альтернативы вы можете запросить прокси, который является неблокирующей операцией без тайм-аута. Как только прокси будет создан, он будет передан в предоставленный обратный вызов. Пример:

MatlabProxyFactory factory = new MatlabProxyFactory();
factory.requestProxy(new MatlabProxyFactory.RequestCallback()
{
    public void proxyCreated(MatlabProxy proxy)
    {
        //TODO: Make use of the proxy
    }
});
0 голосов
/ 15 апреля 2012

У меня похожая проблема. Основная проблема заключается в том, что в вашем импортированном файле .jar "matlabcontrol-4.0.0.jar" есть значение по умолчанию, конфигурация в классе Configuration.java. В моем случае была проблема, что библиотеки не могут правильно вызывать matlab со всеми аргументами. Попробуйте добавить в свой проект не файл .jar, а пакет matalbcontrol со всеми исходными файлами .java. Вы можете скачать его с той же страницы http://code.google.com/p/matlabcontrol/downloads/list,, где вы получили .jar libs. Затем в Configuration.java отредактируйте getMatlabLocation() строк:

else if(isWindows() || isLinux())
{
       matlabLoc = "matlab";
}

заменить на:

    else if(isLinux())
    {
        matlabLoc = "/usr/local/MATLAB/R2011b/bin/matlab"; //or place where you got installed your matlab, directory bin, in my case, like in example
    }
    else if(isWindows())
    {
        matlabLoc = "matlab";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...