Por som em arquivos, que estejam acoplados ao projeto, ou seja, ao jar, final

tenho dois métodos… :

       public void carregarSom(int posSom) {
        File soundFile = new File(LOCAL_SONS + colecao_sons[posSom] + ".wav");



        AudioInputStream sound = null;
        try {
            sound = AudioSystem.getAudioInputStream(soundFile);
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
        try {
            clip = (Clip) AudioSystem.getLine(info);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        }
        try {
            clip.open(sound);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        contador_sons++;
    }
    public void tocaSom() {
        clip.start();
    } 

o problema está em acoplar o arquivo de som ao projeto jar, assim como fiz recentemente com as imagens, que antes ficavam só no c…
deve ser nesta parte aqui…

     File soundFile = new File(LOCAL_SONS + colecao_sons[posSom] + ".wav");

seguem as variáveis:

//arquivos para som private Clip clip; private int contador_sons = 0; private String[] colecao_sons = {"a12", "a13", "27inicio","37_recua8casas", "39flauta_bomparaavanca9", "perdeu","ganhou"}; private static final String LOCAL_SONS = "c:/sonsjogo37/";

queria que não fosse no C://

  private static final String LOCAL_SONS = "c:/sonsjogo37/";

nas imagens uso este comando:

   ImageIcon Dado1 = new ImageIcon(getClass().getResource("/IMAGENS/dado1.gif"));

e é perfeito…

mas com File não funciona…Pesquisei a classe no site da Oracle , mas não achei nada. algum “help” ?

Me mandaram uma ajuda, mas funciona somente para applets, no tópico do ‘despertador java’ recentemente postado aqui, e meu interesse é para swing puro, inclusive para acoplar o som deste despertador ao projeto, sem precisar por o som do beep, no c:/.

deu para entender?

aguardo ajudo e agradeço desde já…

deixo aqui a dica do post excelente, recente aqui, para quem usa jar e não gosta daquela pasta lib separada ao lado. é muito fácil de elimina-la. veja o post. mas isto é outro assunto. o importante aqui neste tópico, que é o que procuro está acima…
http://www.guj.com.br/java/263687-jogo-de-forca-e-associar-pasta-lib-ao-jar-----
exemplo perfeito para tirar lib e ter um jar só:
http://preclog.blogspot.com/2010/03/criando-jar-no-netbeans-sem-pasta-lib.html

grato. :roll:

:? :shock: :frowning: :-o :slight_smile: :slight_smile: :slight_smile:

Estranho cara, teoricamente voce poderia carregar qualquer tipo de coisa com o getResource(); Ja carreguei arquivos com ele sem problemas. Basicamente ele vai retornar o caminho completo do seu arquivo.

Voce esta jogando seus sons dentro de um pacote(vamos dizer SONS) e quando tenta carregar dá o que? Excessao, nada?

opa obrigado. isto me interessa, para várias coisas…

vc conseguiu testar isto aí?

é só chamar os métodos dentro um método main, talvez eles precisem passar por algum outro construtor coisa ou método coisa parecida para funcionarem… enfim…

enfim, só testando ( o comando a por) , já dá o erro, sem nem chamar o método.

na documentação também não vejo nada que ajude, e não tem exemplo também relacionado.

tá complicado e é importante.
espero que apareça uma luz…

:roll: :roll: :roll: :roll:

como disse se a LOCAL_SONS for c:// e o arquivo estiver lá. funciona numa boa… toca o som , tudo perfeito…

mas ao mudar não… por um momento parece que funcionou, mas não por muito tempo. tirei a pasta do c… e :

run: java.io.FileNotFoundException: \sonsjogo37\a13.wav (O sistema não pode encontrar o caminho especificado) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(WaveFloatFileReader.java:164) at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1179) at Jogo_do_37.Jogo_do_37.carregarSom(Jogo_do_37.java:579) at Jogo_do_37.Jogo_do_37.comUmDado(Jogo_do_37.java:1350) at Jogo_do_37.Jogo_do_37.jBdado1ActionPerformed(Jogo_do_37.java:2918) at Jogo_do_37.Jogo_do_37.access$100(Jogo_do_37.java:29) at Jogo_do_37.Jogo_do_37$2.actionPerformed(Jogo_do_37.java:1983) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Jogo_do_37.Jogo_do_37.carregarSom(Jogo_do_37.java:585) at Jogo_do_37.Jogo_do_37.comUmDado(Jogo_do_37.java:1350) at Jogo_do_37.Jogo_do_37.jBdado1ActionPerformed(Jogo_do_37.java:2918) at Jogo_do_37.Jogo_do_37.access$100(Jogo_do_37.java:29) at Jogo_do_37.Jogo_do_37$2.actionPerformed(Jogo_do_37.java:1983) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Vou fazer um aqui de teste so pra voce ver. Mando nessa mensagem mesmo editada.

ok. acho estranho que mudei a variável, tirei o endereço de c:// mas se a pasta sons estiver no c, o programa funciona com o som,

senão ele não vai para a frente mesmo…

não entendo como enxerga que está no c, se não estou falando que está…

aguardo :roll: :roll: :smiley: :smiley: :shock: :shock: :slight_smile: :slight_smile: :cry: :cry:

[code]
//private static final String LOCAL_SONS = “c:/sonsjogo37/”;

 private static final String LOCAL_SONS = "/sonsjogo37/";[/code]

fiz isto e funcionou, mas só se a pasta estiver no c.
bastante incompreensivel.

estou aguardando…

Fiz logo outro post pra ficar mais facil de voce ver que foi respondido =D

Desconsidere a gambiarra de criar uma instancia de Main pra pegar a fonte. Mas como o metodo é estatico e eu fiz com pressa… :roll:

Lembro vagamente que tinha um jeito de pegar os fontes em um metodo estatico sem ter que instanciar a classe que contem o metodo estatico mas agora esqueci. Mas como suponho que voce deve ter uma classe onde sao carregados os arquivos que nao a classe Main não terá que se preocupar com isso.

Veja que abri meu arquivo sem problemas…

Té.

ok estou olhando. a principio parece que vai funcionar. 1 segundo.

Aff viajei…era so colocar Main.class

Deve ser o sono. Enfim, substitui essa instancia de Main simplesmente por Main.class e fica tudo certo.

Té.

ola muito obrigado.

a solução parece estar perto disso…

de fato , quando executo o arquivo diretamente, através do netbeans, funciona … bem…

mesmo sem a pasta sonsjogo37 no c://

mas quando gero o jar, então não funciona… o que será que está havendo? qual seria a diferença?

:roll:

o jar é grande para mandar por aqui, mas se vc quer ver o projeto te mando um jar, com a pasta sons para o diretorio c, por exemplo, aí funcionará, enfim…

tem coisas no java que não consigo descobrir sozinho… se funcionar logo, vc foi fera nesta.

porque não enxergo o fato de ter que chamar o construtor principal (sendo que quando faço isso nas imagens não é preciso)

e ainda mais o fato de ter aquele .getFile() no final… faz uma baita diferença, sem ele, fica dando erro…

como disse, nas imagens, não precisa deste ‘formato’…

é muito intrigante… como vc chegou a esta conclusão…?

ou já tinhas algum exemplo pronto, parecido?

valeu… :roll: :shock: :lol: :x :cry:

como assim o main class???

estou fazendo isto… segura aí um pouco se vc puder, por favor… 8) :lol:

    
     private static final String LOCAL_SONS = "../sonsjogo37/";

e no método…

public void carregarSom(int posSom) { File soundFile = new File(new Jogo_do_37().getClass().getResource(LOCAL_SONS + colecao_sons[posSom] + ".wav").getFile() ); AudioInputStream sound = null; try { sound = AudioSystem.getAudioInputStream(soundFile); } catch (UnsupportedAudioFileException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat()); try { clip = (Clip) AudioSystem.getLine(info); } catch (LineUnavailableException e) { e.printStackTrace(); } try { clip.open(sound); } catch (LineUnavailableException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } contador_sons++; } public void tocaSom() { clip.start(); }

é isso aí tá funcionando… mas quando gero o jar, aí não funciona e não entendo o porque. algum help?

desculpa ficar pedindo assim, mas é que de fato, não vejo mais solução…

mudei o getFile do fim por getPath e também funcionou igual…

tem coisas que no java que são misteriosas…

as vezes programo por conheço os exemplos, fica dificil estar entendo tudo que está acontecendo por detrás…

(até fazia tempo, que estava deixando de entender algo, mas agora…)

Ja tentou limpar e reconstruir o projeto?

jjá. as vezes é coisa do netbeans , eu sei…

mas não vejo o que possa ser… as vezes ligo e desligo o computador e tento de novo, pode ser que funcione… mas não acho que este seje o método padrão. deveria funcionar independente disto…

recentemente estava tentando gerar jar sem sucesso… aí fui no propriedades, código fonte, e mudei a versão do java, para uma inferior

aaah não… ok. agora o erro meu foi crasso… era que a classe estava apontada para outra… de fato esta era para teste. só tive que mudar a classe e funcionou. beleza . resolvido… muito grato.

dupliquei o post, pois deu problema no envio…

está uma beleza o funcionamento.

puxa isto vai me adiantar muitos projetos, em que não gosto de usar sons, pois as pastas tem que ir para o c, todas separadas…

queres conhecer o jar deste projeto que tenho dito?

além do mais, não sei se visse algo do tópico que criei a pouco sobre o despertador java… ???

a idéia era essa acoplar o som ao despertador. e agora isto é possível…

mas de fato, estou achando que ele consome muita memória do micro, e acho que é por causa do repaint() do método paint… enfim outro problema… preciso mostrar as horas sem o repaint… vou ver como faço…

Sim, manda pra eu executar aqui. Questao do repaint que voce falou nao acho que ele aumente o consumo de memoria nao…Quer uma outra dica? Pra saber quais os gargalos da sua aplicacao use o Profiler do netbeans. Mostra direitinho quem esta consumindo o que com graficos e tudo mais…

vou precisar do seu email…

o atachment aqui é muito pequeno…

bem, voltei a ter problemas no ojar, mas estou tentando resolver…

agora não acha o método main, novamente, como o problema que tive antes…

podes escrever para raghy@ig.com.br