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

Когда я звоню 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?

2 ответа

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

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

  2. используйте "ОШИБКА" вместо "exp", а затем отобразите сообщение непосредственно в командном окне MATLAB

Возможность доступа к исключениям 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)
Другие вопросы по тегам