Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Threads. / 12 сообщений из 12, страница 1 из 1
23.08.2013, 11:03:55
    #38375556
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
Есть таймер, он каждые 0.02 секунды делает действия.
В действиях существует проверка на условие, если она выполняется - вызвать поток для проигрывания музыки.
Проблема в том, что пока мелодия проигрывается, это условие снова и снова проверяется. В итоге Exception:
Код: java
1.
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException


Background.java
Код: java
1.
2.
3.
4.
....
 Thread eventMusic = new Thread(new EventMusic());
... check different conditions ... (every 0.02s)
 if everything is ok  -> eventMusic.run();

EventMusic.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package Shooter2Dv23082013;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class EventMusic implements Runnable{
    @Override
    public void run() {

        try {
            Player p = new Player(new FileInputStream(getClass().getClassLoader().getResource("res/nameSong.mp3").getPath()));
            p.play();
        } catch (JavaLayerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();}


    }
}


Вопрос такой.
1. Создать много потоков? Как создавать потоки для каждого условия (то есть много потоков, но я не знаю сколько их будет, после выполнения - должны умирать)
2. Честно говоря, напрашивается observer template , если все условия выполнены - notify() поток, который хочет воспроизвести мелодию, для разных случаев.
...
Рейтинг: 0 / 0
23.08.2013, 11:18:29
    #38375575
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
eldarkaaЕсть таймер, он каждые 0.02 секунды делает действия.
Прям даже не знаю с чего начать.

eldarkaa
Код: java
1.
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException



A stacktrace как всегда унесли враги, чтобы никто ни в жизни не догадался где же произошло исключение.

eldarkaaeventMusic.run();

Так нынче потоки запускаются? Thread.run()? Really?

eldarkaa public void run() {
Player p = new Player(new FileInputStream(getClass().getClassLoader().getResource("res/nameSong.mp3").getPath()));

Это просто взрыв мозга. Файл каждый раз читается с диска? А проще способа получить InputStream небыло? Player что за класс-то?

eldarkaa1. Создать много потоков?
Вы ещё конкретно не знаете в чем проблема, но методом научного тыка пытаетесь подобрать решение?

eldarkaaКак создавать потоки для каждого условия (то есть много потоков, но я не знаю сколько их будет, после выполнения - должны умирать)

Самое время почитать что-нибудь про java.util.concurrent.Executors

eldarkaa2. Честно говоря, напрашивается observer template , если все условия выполнены - notify() поток, который хочет воспроизвести мелодию, для разных случаев.
Для чего напрашивается? Для "разных случаев"? Какую проблему это решает?
...
Рейтинг: 0 / 0
23.08.2013, 11:20:12
    #38375579
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
Есть такая книжка - "Killer Game Programming in Java"
Так как раз написано как на JSE делать игры. Рекомендую почитать.
...
Рейтинг: 0 / 0
23.08.2013, 14:25:07
    #38375879
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
Так нынче потоки запускаются? Thread.run()? Really?
Мдя, после таких ошибок мне следует удалить JDK.
А проще способа получить InputStream небыло? Player что за класс-то?
Player - класс из пакета Jlayer , который помогает реализовать воспроизведение .mp3, с помощью удобного стат. метода play() ;
---------
java.util.concurrent.Executors помог сделать то, чего я хотел.
Но никак не дает покоя фраза.
авторЭто просто взрыв мозга. Файл каждый раз читается с диска?
Как считать файлы один раз?
У меня сейчас вот так:
EventMusic.java (аккуратно, код не для слабонервных)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
package Shooter2Dv23082013;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Random;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

public class EventMusic implements Runnable{
    private int countCollisions;
        @Override
        public void run() {
            String path=null;
            switch (this.countCollisions){
                case 1: path="res/firstblood.mp3"; break;
                case 2: path="res/megakill.mp3"; break;
                case 3: path="res/tripplekill.mp3"; break;
                case 4: path="res/ultrakill.mp3"; break;
                case 10: path="res/ownage.mp3"; break;
                case 20: path="res/unstoppable.mp3"; break;
                case 30: path="res/godlike.mp3"; break;
                case 40: path="res/holyshit.mp3"; break;
                    default:
                        Random rand = new Random();
                        int value = rand.nextInt(3)+1;
                        if (value==1){ path="res/defaultkill1.mp3"; break;}
                        if (value==2){ path="res/defaultkill2.mp3"; break;}
                        else { path="res/defaultkill3.mp3"; break;}
            }
            try {
                Player p = new Player(new FileInputStream(getClass().getClassLoader().getResource(path).getPath()));
                p.play();
                p.close();
            } catch (JavaLayerException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();}
        }
    public EventMusic(Integer countCollisions){
        this.countCollisions=countCollisions;
    }
 }

...
Рейтинг: 0 / 0
23.08.2013, 14:34:59
    #38375897
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
Ну, начнем с двух вопросов.
Первый. Как FileInputStream будет открывать файлы, которые вы собираетесь поместить внутрь jar-а.
Второй. Чем такой вариант плох
Код: java
1.
new Player(getClass().getClassLoader().getResourceAsStream(path)));
...
Рейтинг: 0 / 0
23.08.2013, 15:33:11
    #38376005
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
Ответ:
1. Никак.
2. getResourceAsStream() - идеален.
getResourceAsStream не делает чтение файла(resource) каждый раз?
...
Рейтинг: 0 / 0
23.08.2013, 15:38:49
    #38376018
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
eldarkaagetResourceAsStream не делает чтение файла(resource) каждый раз?
Делает. Но это было к вопросу о простоте кода. А не кешировании.
Это же игра. Если все время читать звуки с диска, то могут, например, появится задержки, если HDD будет занят чем-то другим.
С другой сторы файлы достаточно небольшие...
...
Рейтинг: 0 / 0
23.08.2013, 16:31:17
    #38376099
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
как нормально преобразовать к InputStream для ImageIcon? (не убирая при этом getResourceAsStream(); )[/b])
...
Рейтинг: 0 / 0
23.08.2013, 16:38:57
    #38376106
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
как нормально преобразовать к InputStream для ImageIcon? (не убирая при этом getResourceAsStream(); )[/b])
...
Рейтинг: 0 / 0
23.08.2013, 16:45:32
    #38376115
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
воу воу прощу прощения........
...
Рейтинг: 0 / 0
23.08.2013, 16:46:10
    #38376116
eldarkaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
прошу прощения* , мдя 3 поста вместо 1-го
...
Рейтинг: 0 / 0
23.08.2013, 16:55:52
    #38376129
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Threads.
Не обязательно слепо следовать всему что пишут на форумах. Оставьте иконки в покое. Пусть будет getResource.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Threads. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]