2016-10-18 3 views
0

Я хотел бы запустить простой медиаплеер сделанный в Java из MATLAB, точнее это один: https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/mediaplayerjava.htmОшибка: Неопределенная функция или переменная - Java в MATLAB

Этот код компилируется без каких-либо проблем и работает, как при попытке запустить его в IntelliJ и при компиляции с javac и запустить файл .class.

Он успешно компилируется под той же версией Java, что и мой MATLAB, поэтому я рассказываю, где находятся java-файлы с javaaddpath(pwd). По какой-то причине я получаю сообщение об ошибке «Неопределенная функция или переменная« MediaPlayer »при запуске кода, приведенного в приведенной выше ссылке, делая так: test = MediaPlayer или test = MediaPlayer(); Чтобы быть уверенным, что все работает, я попытался скомпилировать, а затем запустить простой java Hello Мир в MATLAB, который отлично работал.

В чем проблема? Если у вас есть время, пожалуйста, помогите мне, скомпилировав код по ссылке выше (2 файла, нажмите «Следующая страница для второго java-файла») и попробуйте запустить его в MATLAB. Я был бы очень благодарен за любую помощь!

ответ

1

Короткий ответ:

MediaPlayer определен в пакете mediaplayer в вашем (FX) кода Java:

package mediaplayer; 

Таким образом, правильная инициализация будет:

test = mediaplayer.MediaPlayer(); 

Длинный ответ:

С этого момента этот вопрос становится действительно специфичным для JavaFX, а не о тривиальной взаимозаменяемости Matlab-Java.

Проблемы:

  • JavaFX поставляется в Java8 по умолчанию, и даже Matlab R2016 поставляется с Java7, поэтому пакет JavaFX (javafx.*) будет не на пути к классам виртуальной машины Java в Matlab, так что вы должен гарантировать, что JavaFX на пути к классам JVM.
  • Как только вам удастся запустить Application (например, test = mediaplayer.MediaPlayer(); test.main({''});), он заблокирует поток Matlab. Хуже того, когда вы закрываете окно, Application все равно не выйдет, а поток Matlab останется заблокированным. Это можно обойти, вызвав setImplicitExit(true) в методе startApplication. Это заставит Application выйти, когда все Stage s закрыты, поэтому поток Matlab больше не блокируется.
  • На этом этапе проблема заключается в том, что Application не может быть запущен более одного раза. Поэтому, если вы вышли, вы не сможете снова запустить тот же Application.

Что вы можете сделать, чтобы обрабатывать последние две точки, - это реализовать «запуск приложения» на Java, который работает на отдельном потоке и может использоваться для приложений JavaFX.

+0

Я действительно удалил пакет в коде, поэтому скомпилирую его, как описано. В любом случае проблема все еще существует. У вас есть право на Matlab R2016 поставляется с Java7, поэтому я скомпилирую код, подобный этому (OS X): javac -source 1.7 -target 1.7 MediaPlayer.java, и он работает, я могу нажать на файл класса и запустить медиаплеер. Я попытаюсь добавить пакет JavaFX в JVM MATLAB. Что касается проблем, которые вы упомянули, эта информация была очень ценна для меня, большое спасибо! PS. Есть ли хороший источник для такого рода информации относительно MATLAB и Java? –

+0

Я приму ваш ответ в течение одного дня! –

+1

Мне пришлось в прошлом связывать бэкэнд Matlab с интерфейсом JavaFX, и в те дни в этой теме не было ничего действительно достойного материала. Содержание этого ответа на самом деле является тем, с чем я столкнулся, выполняя эту задачу, и решения в основном касались экспериментов и чтения документации JavaFX (особенно javadoc класса «Application» может быть действительно ценным, чтобы понять, почему все происходит:)). – DVarga

Смежные вопросы