Это - пока-что не проект, просто - мысли вслух.
Попользовавшись сторонними программами,
помучавшись с РНР - рано или поздно всё равно приходишь к пониманию необходимости определённой
самостоятельности, хотя-бы в малом.
Конечно, можно скачать (к примеру) готовый плеер и установить его на свой
сайт, можно воспользоватся <iframe>. Вариантов много - сеть большая. Но, со временем, понимаешь
- то, что работает на твоём сайте, необязательно будет работать на любом устройстве, имеющем процессор.
После довольно долгого ковыряния в славной NET-помойке выяснилось - язык любого процессора - машинный (исполняемый) код.
Общатся с процессором на этом языке - голова заболит. Но можно попоьзоватся услугами толмача - Virtual Machine (VM).
В случае с Java, это Java Virtual Machine (JVM), которая знакома с байткодом. Существуют различные программы (компиляторы) по переводу
некоторых языков программирования в этот самый байткод. Наиболее, на мой взгляд, оптимальные
варианты - это VB или Java. Компилируются в байткод : для андроида - в apk-файл и для ОС типа
винды - в class-файл. Андроид меня не очень вдохновляет - пусто там, в нутри, как-то. А вот накропать
программку на Java и перевести её в class - это интригует.
Оптимальный вариант, в этом случае
- компилятор : нарисовал код - скомпилировал - посмотрел, что получилось. Однако, поиметь в наше время такую
программу - практически нереально. Не подпускают мокро-мягкие к закромам. По сети гуляет легенда о существовании
J2SE SDK - эдакий компилятор java-class. Только, этой легенде более 20 лет и ссылки на скачивание этого чудо
компилятора давно протухли. То, что от него осталось, на компилятор мало похоже, а об автономности и говорить
нечего. Но попользоваться кое-чем можно.
Современный процессор без JVM - как свадьба без невесты.
JVM транслирует байткод в такой формат, который понимает целевая платформа. А эта платформа непременно запустит созданную нами программу.
Попробуем оперется на эту народную мудрость и сотворить что-то вроде видео (- аудио) плеера. А начнём мы с
прорисовки внешнего вида нашего плеера - с панели.
Создаём java - файлы :
Рисовать плеер мы будем опираясь на библиотеку AWT, хотя SWING и более современная.
Выбирать вам. Разница в оформлении - небольшая. Мы будем создавать не
frame, а обычный
applet. Задача эта, прямо скажем - неблагодарная. Более половины того, что есть во frame,
в applet - отсутствует (читай - не поддерживается). Это понятно - frame создаётся в
cmd.exe
т.е. под контролем ОС, а applet нам придется создавать самим. И делать это придётся так, что-бы он
понравился браузеру (на уровне - доверия).
Если верить америкосам -
делать это не сложно. Берёте свой любимый редактор и набираете в нём следующий код :
Затем переименовываем созданный текстовый файл в
aplayer.java и сохраним его. Где вы будете хранить
этот файл - решайте сами. Что - бы не усложнять связи, все файлы своего сайта я храню в корневом каталоге, без
подкаталогов. Теперь мы подробно разберёмся с тем, что изображено на рис.1 :
Структура класса следующая : внутри класса находится метод(-ы), внутри метода - события, то, что происходит
под воздействием этого метода. Метод можно создать самому, а можно воспользоватся
готовым, подключив необходимый пакет. Не стоит заморачиватся насчёт определений : класс (под-класс), метод и
функция - это одно и то - же. Всё зависит от уровня расположения компонента на иерархической лестнице.
Мы создали java - файл, который будет компилироваться. Поэтому - думать о нём лучше как о сlass - файле. Не
смотря на внешний вид - это не очень сложный код, просто - в нём много повторений. Начинается код с
комментариев (01-05), содержащих
элемент (03), который в последсвии будет вставлен в html - разметку.
Далее идут импорт - файлы (06-08), это пакет(-ты) содержащий(-ие) метод(-ы) исползуемый в нашем коде.
Где содержатся эти подключаемые пакеты - мы узнаем чуть позже, а сейчас остановимся на них чуть
подробнее.
***
Использование импорта, не смотря на всю его значимость, вещь добровольная, и вот почему:
выражение (43, рис.1):
pkn.setLayout(new FlowLayout(FlowLayout.LEFT));
можно представить в виде:
pkn.setLayout(new FlowLayout(java.awt.FlowLayout.LEFT));
а выражение:
public void actionPerformed(ActionEvent ae);
можно представить в виде:
public void actionPerformed(java.awt.event.ActionEvent ae);
и т.д.
Если указать по ходу кода прямые пути к компонентам и методам,
то от пакета импорта (06-08, рис.1) можно отказатся. И ещё одна вещь, с которой вы столкнётесь
на начальном этапе: в сетевых примерах, перед пакетом импорта, может встретится выражение:
package name1.name2.name3...;Не стоит на эту тему заморачиватся - у нас файл будет
одиночный, без пакета.
***
Наш класс
aplayer (09)
открыт для общего пользования
public и является наследником (extends) класса компонентов Applet -
библиотеки
AWT (02). Почему не Swing ? Большой разницы, в нашем случае, я не вижу.
Applet - контейнер библиотеки верхнего уровня.
Все имеющиеся у него компоненты добавляются в панель содержимого так - же, как и у контейнера
Frame. Мы попытаемся создать не frame, а applet. Вслед за открывающей скобкой класса (10)
следует перечень переменных (11-15). Что-бы в будущем не сталкиваться с излишним количеством ошибок, необходимо сразу
уяснить - что это за зверь - переменные. Коротко - это утверждённый набор символов, в виде осмысленных слов/словосочетаний,
за которыми стоит машино-комманда. По сути - это ячейка памяти определённого размера, которую вы резервируете для
выполнения своего кода. Если вы столкнётесь с "несовместимостью типов" - вспомните об этом.
Начинается класс
aplayer с метода
init() (16 ) -
это первый (и обязательный) из методов обеспечения жизненного цикла. Кроме него в этот цикл входят методы
start(), stop() и...не будем увлекаться - просто init() - обязателен. Остальные методы цикла программа добавит
сама, если мы забудем. Компилятор - таки имеет много гитик ! В этом методе мы создаём компоненты
панели плеера. Метод
init() должен быть в каждом апплет - файле. В большинстве случаев он
заменяет (выражение "заменяет" - условно) метод
main(). Именно с него начинается исполнение нашей программы.
Внешне это будет выглядеть как
окно заданного размера (03). Само окно (panel) будет "cyan" (20) цвета. В него
мы добавим несколько компонентов, количество которых и их расположение, зависит от типа диспетчера компоновки.
В нашем случае - это BorderLayout (19). Хотя, кое - где мы его заменим (27 и 43).
Он делит фрейм на пять секторов : NORTH (30), SOUTH (49), WEST, EAST (39) и CENTER (23). Сектор EAST (39) мы
отведём под меню будущего плейлиста (31-36). В каждый сектор мы поместили по
одному компоненту. А в такие
компоненты, как - panel (41), мы поместили ещё
пять компонентов (44-48).
Панели можно задать собственный цвет (20,22,26,38,42). Логика примерно такая : выбираем необходимый компонент и, если
он поддерживается родителем (панель), добавляем его, с указанием месторасположения.
Пусть это будет графической
частью нашей задумки.
На всякий случай,
просто - на всякий случай, сотворим похожий
плеер, но по SWING - говски. Хуже не будет.
Основной смысл нашего мероприятия вовсе не создание панели будущего плеера. Главное - наша панель должна
появлятся (а в будущем - и работать)
в любой среде. Как минимум, она должна появится в Window, после
включения её в html - раэметку.
дальше...