powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Threads.
12 сообщений из 12, страница 1 из 1
Threads.
    #38375556
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таймер, он каждые 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
Threads.
    #38375575
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Threads.
    #38375579
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая книжка - "Killer Game Programming in Java"
Так как раз написано как на JSE делать игры. Рекомендую почитать.
...
Рейтинг: 0 / 0
Threads.
    #38375879
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так нынче потоки запускаются? 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
Threads.
    #38375897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, начнем с двух вопросов.
Первый. Как FileInputStream будет открывать файлы, которые вы собираетесь поместить внутрь jar-а.
Второй. Чем такой вариант плох
Код: java
1.
new Player(getClass().getClassLoader().getResourceAsStream(path)));
...
Рейтинг: 0 / 0
Threads.
    #38376005
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ:
1. Никак.
2. getResourceAsStream() - идеален.
getResourceAsStream не делает чтение файла(resource) каждый раз?
...
Рейтинг: 0 / 0
Threads.
    #38376018
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eldarkaagetResourceAsStream не делает чтение файла(resource) каждый раз?
Делает. Но это было к вопросу о простоте кода. А не кешировании.
Это же игра. Если все время читать звуки с диска, то могут, например, появится задержки, если HDD будет занят чем-то другим.
С другой сторы файлы достаточно небольшие...
...
Рейтинг: 0 / 0
Threads.
    #38376099
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как нормально преобразовать к InputStream для ImageIcon? (не убирая при этом getResourceAsStream(); )[/b])
...
Рейтинг: 0 / 0
Threads.
    #38376106
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как нормально преобразовать к InputStream для ImageIcon? (не убирая при этом getResourceAsStream(); )[/b])
...
Рейтинг: 0 / 0
Threads.
    #38376115
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
воу воу прощу прощения........
...
Рейтинг: 0 / 0
Threads.
    #38376116
eldarkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения* , мдя 3 поста вместо 1-го
...
Рейтинг: 0 / 0
Threads.
    #38376129
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не обязательно слепо следовать всему что пишут на форумах. Оставьте иконки в покое. Пусть будет getResource.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Threads.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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