как поймать исключение Java из кода MATLAB

1

когда я вызываю myFunction(test) он идет правильно, но генерирует исключение Java

java.lang.StringIndexOutOfBoundsException: String index out of range: -1

и я хотел бы поймать его и/или поймать любое исключение Java.

Я пытался:

try
  myFunction(test)
catch exp
  mess = exp.message
end 

но mess пуст... как я могу проверить, что myFunction не поймает какое-либо исключение Java?

  • 1
    Смотрите пример с mathworks.com/help/matlab/ref/… .
  • 0
    но, как я уже сказал, беспорядок возвращается пустым, тогда как он должен вернуть исключение
Показать ещё 1 комментарий
Теги:
exception
try-catch
matlab-java

2 ответа

0

Возможность доступа к исключениям Java из MATLAB была добавлена в R2012b. Если я не ошибаюсь, предыдущие версии могли бы перехватывать исключения только в общих чертах без конкретной информации об ошибках ошибки Java.

Пример (проверен на R2014a):

try
    openStream(java.net.URL('http://non.existant'))
catch ME
end

Исключением является объект MATLAB, который обертывает исходное исключение Java:

>> ME
ME = 
  JavaException with properties:

    ExceptionObject: [1x1 java.net.UnknownHostException]
         identifier: 'MATLAB:Java:GenericException'
            message: 'Java exception occurred: 
java.net.UnknownHostException: non.existant

    at java.net.AbstractPlainSocketImpl.connect(Unk...'
              cause: {}
              stack: [0x1 struct]

поэтому мы можем получить доступ ко всей трассировке стека ошибок:

>> printStackTrace(ME.ExceptionObject)
java.net.UnknownHostException: non.existant
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
0

Любой из нижеприведенных может быть использован

  1. Вместо "exp" используйте ME, это переменная MATLABException, которая фактически захватывает и сохраняет в Message

  2. используйте "ERROR" вместо "exp", а затем отобразите сообщение непосредственно в командном окне MATLAB

Ещё вопросы

Сообщество Overcoder
Наверх
Меню