Как я могу включить папку jx /class jx / mxj в заблокированное m4l-устройство?
У меня есть устройство maxforlive, использующее java / mxj.
Я использовал все эти опции для включения моих java-файлов во время разработки:
- Включая мою (maven) директорию target / classes через max.java.config.txt.
- Добавление каталога через Параметры> Настройки файла
- Добавление банки в автоматически сгенерированный (OSX) ~/Documents/Max 7/Max для Live Devices /MyProject Project / каталог
Все эти пути работают нормально, т.е. файлы подобраны, и мой объект mxj работает.
Однако, когда я замораживаю устройство для публикации, файлы java не включаются ни в один из этих путей.
Я попытался разобраться в https://docs.cycling74.com/max7/tutorials/jitterchapter99_appendixd хотя я не собираю отдельное устройство, а замораживающее устройство maxforlive, поэтому я включил max.jar и mxj.mxo в папку Project. который тоже не работал.
Когда якопирую папку target / classes или target / classes /myproject в сгенерированную папку Project (/code, /code/classes, /classes), max перемещает все файлы классов в / code, создавая для меня много работы в то время как даже не собирая классы для разработчиков.
Я видел устройства на maxforlive.com с правильно включенными java-файлами, так что я знаю, что это можно сделать. Как мне этого добиться?
2 ответа
Итак, вот оно: Включение только одного класса без других зависимостей классов, кроме MaxObject, работает нормально. Также нет необходимости добавлять файлы.java, как я уже говорил в предыдущем комментарии.
Все, что вам нужно сделать, это:
- иметь работающий объект mxj в своем патчере (не имеет значения, где вы его сохранили)
- нажмите кнопку внизу с надписью "Показать содержащий проект" при наведении
- добавьте свой файл класса
- замерзать
Когда у вас есть больше классов, это становится сложным.
1) Если у вас есть типичная иерархия Java с папками и подпапками, это не сработает. Поскольку вы должны добавить каждый файл отдельно, иерархия будет уничтожена. Используйте банку и добавьте ее в содержащий проект.
2) Вот оно, верьте этому или нет: все классы, которые вы собираетесь использовать, должны быть загружены при первом создании. Я называю это статическим распределением классов;)
Способ достижения этого:
создайте новый экземпляр каждого класса в конструкторе класса, который расширяет MaxObject или любые другие конструкторы, которые он вызывает. Это включает в себя классы только со статическими методами.
если вам случается использовать интерфейсы и создавать их динамически (new Runnable() {...}), не делайте этого. Динамические реализации - это новые классы.
Интересный факт: вы также можете переопределять методы классов. Так иди
class Runner {
public void run() { throw new Exception("not implemented"); }
}
тогда вы можете динамически создать
new Runner() {
public void run() {
MaxObject.post("Even Mr. Gosling says interfaces were a mistake!");
}
}
Не верь этому? Я не виню тебя. Посмотрите https://github.com/mihop/mxj-wsserver и http://www.maxforlive.com/library/device/3809 для конвертации.
К сожалению, это давняя ошибка в MFL.
Вот фильм 2012 года, где я его воспроизвожу, с тех пор он не был исправлен. http://arttech.nl/projectjavaissue.mov
Это означает, что единственный способ распространять устройства MFL с файлами классов Java - включать их отдельно.