Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с отсутствием множественного наледования. 
:(
    Опции темы
Сергей Р.
Дата 20.4.2005, 17:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здавствуйте. Изучаю самостоятельно Java и наткнулся на такую проблему. Если создаешь простейший AudioPlayer на базе applet, то все хорошо и прекрасно. Но как только попытался его усложнить (например, сделать Frame, в котором можно выбирать звуковые файлы из списка) наткнулся на невозможность использовать методы интерфейса AudioClip.java. Объект который наследует Frame их использовать не может. Та же ситуация и с приложением. Как это обойти? Бандитский метод из книжек: class MyWindow extends Frame implements AudioClip{ не помогает, так как этот класс должен быть абстракным и для него не возможено создание объекта используя new. Как решаются такие проблемы?

  Вверх
Domestic Cat
Дата 20.4.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



А можно поподробнее, т.к. я вообще с трудом понимаю что ты хочешь сделать. Можно с кодом.


--------------------

PM   Вверх
AntonSaburov
Дата 20.4.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Бандитский метод из книжек: class MyWindow extends Frame implements AudioClip

А что это он вдруг "бандитский" ?

Множественное наследование в JAVA не предусмотрено. А вот интерефейсы можно реализовывать хоть десяток. Просто надо реализовать все методы. А еще лучше код показать - тут соглашусь с Котом.
PM MAIL WWW ICQ   Вверх
batigoal
Дата 20.4.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Этот класс не должен быть абстрактным, но он им будет, если ты не реализуешь все методы интерфейса AudioClip. И ничего бандитского в таком объявлении нет, так и должно быть.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Guest
Дата 21.4.2005, 11:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Например методы play(); loop(); stop(); из AudioClip.java без проблем можно использовать в апплете, но они не доступны объекту на базе Frame.
Как к этим методам, по-простому, получить доступ в MyWindow, там, где находтится обработчик событий нажатия на соответствующие кнопки расположенные во фрейме? Понятно, что код не полный. Нужно получить путь к файлам и брать аудио фаил из списка и проигрывать. Но интересует как именно получить доступ к методам play(); loop(); stop();, все остальное просто.
Код


import java.awt.*;
import java.applet.*;

public class AudioP extends java.applet.Applet {
        
        public void start() {
        new MyWindow("AudioPlayer");
        resize(300, 150);
        show();
    }
}


class MyWindow extends Frame{
     private Panel panel;    
    
    MyWindow(String title){
        super(title);
        setLayout(new BorderLayout());
        panel = new Panel();
        add("Center", panel);
        setLayout(new FlowLayout(FlowLayout.LEFT));
        panel.add(new Button("Play"));
        panel.add(new Button("Stop"));
        panel.add(new Button("Loop"));    

    // .........
    }

// .........

public boolean handleEvent(Event evt) {
        
        switch(evt.id){
            case(Event.ACTION_EVENT): {
                System.out.println(evt.arg);
                
                if (evt.arg == "Play") {
                    audioClip.play();
                }
        else if 
           (evt.arg == "Stop") {
                    audioClip.stop();
                    }
                else if 
           (evt.arg == "Loop") {
                   audioClip.loop();
                }else
                   return false;
            }
            default: {
                   return false;
            }
        }


}

  Вверх
jer1
Дата 21.4.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

Репутация: 4
Всего: 5



в код я не вникал, но для доступа верхнему классу пригодиться конструкция
Код

ИмяОкружающегоКласса.this.(имя_метода | атрибут )


т.е. внутри class MyWindow extends Frame
можно использовать
Код

AudioP.this.play();
(в примере из данного топика)
--------------------
:w!q
PM MAIL   Вверх
batigoal
Дата 21.4.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Повторяю: AudioClip - это не класс, а интерфейс. В нем нет реализации, все его методы пусты. Просто класс Applet обеспечивает реализацию этих методов. Если ты хочешь проигрывать файлы вне апплета, тебе необходимо самому обеспечить реализацию этого интерфейса.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Zandr
Дата 21.4.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: 9
Всего: 13



Вот тебе плаер:
Код

import java.io.File;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

public class Player extends JFrame implements ActionListener
{
    private AudioClip currentClip;
    private JFileChooser fChooser = new JFileChooser();
    private JButton btnOpen = new JButton( "Open");
    private JButton btnPlay = new JButton( "Play");
    private JButton btnLoop = new JButton( "Loop");
    private JButton btnStop = new JButton( "Stop");

    public static void main( String[] args)
    {
        new Player();
    }
    
    public Player() 
    {
        super( "Super MPlayer");
        Box btnBox = Box.createHorizontalBox();
        JButton[] buttons = new JButton[] { btnOpen, btnPlay, btnLoop, btnStop };
        for (int i = 0; i < buttons.length; i++)
        {
            buttons[ i].addActionListener( this);
            btnBox.add( buttons[ i]);
        }
        getContentPane().add( btnBox, BorderLayout.SOUTH);
        setDefaultCloseOperation( EXIT_ON_CLOSE);
        setResizable( false);
        pack();
        show();
    }

    public void actionPerformed( ActionEvent e)
    {
        Object src = e.getSource();
        if (src == btnOpen)
        {
            if (JFileChooser.APPROVE_OPTION == fChooser.showOpenDialog( null))
            {
                if (currentClip != null)
                {
                    currentClip.stop();
                }
                File file = fChooser.getSelectedFile();
                try
                {
                    currentClip = Applet.newAudioClip( file.toURL());
                }
                catch ( Exception ex) 
                {
                    ex.printStackTrace();
                }
            }
        }
        if (currentClip != null)
        {
            if (src == btnStop)
            {
                currentClip.stop();
            }
            if (src == btnPlay)
            {
                currentClip.play();
            }
            if (src == btnLoop)
            {
                currentClip.loop();
            }
        }
    }
}

Но вся соль вот здесь:
Код

AudioClip clip = Applet.newAudioClip( clipUrl);

То есть совершенно пофиг - во фрейме ты, или вообще без ГУИ. У класса Applet есть static метод newAudioClip( URL url) который сделает тебе клип. Только на поддержку mp3, тракинг текущей позиции, изъятие мета-информации не надейся smile

Это сообщение отредактировал(а) Zandr - 21.4.2005, 13:29
PM MAIL   Вверх
batigoal
Дата 21.4.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Класс! А как компактно!


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Zandr
Дата 21.4.2005, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: 9
Всего: 13



2 Lamer George:
Пасиба smile

2 Сергей Р.
А Java тут почти все самостоятельно изучают smile
PM MAIL   Вверх
batigoal
Дата 21.4.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Zandr @ 21.4.2005, 13:31)
А Java тут почти все самостоятельно изучают

Да в России, похоже, Java вобще мало преподают. Это мне повезло - в универе вбивали smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Kurt
Дата 21.4.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 1
Всего: 36



[offtop]
Пофиг. Вбивай - не вбивай, пока сам не возьмешься, ничего не получится.
[/offtop]


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
batigoal
Дата 21.4.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Преподша у меня была большая ..., но вбивала крепко. А опыт начал копиться, когда уже на работу устроился. smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Guest
Дата 22.4.2005, 14:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Проблему уже решил сам, но всем спасибо за помощь. Многие вещи можно делать разными путями. Буду изучать, что посоветовали.
  Вверх
AntonSaburov
Дата 22.4.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Ну ты нас не забывай - заходи. Мы тут постоянно. Будем рады smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.