Oi pessoal tenho 3 variaveis que preciso usar os valores em outra classe, então ouvi falar que é só declarar a variável public. ai que ta o problema eu não sei fazer isso.
importjaco.mp3.player.MP3Player;importjava.io.File;importjava.util.Random;publicclassTocador{privatestaticfinalFile[]listMusic=newFile("musica").listFiles();//poem a pasta das musicas privatestaticfinalFile[]listComercial=newFile("comercial").listFiles();//poem a pasta dos comerciais privatestaticThreadcontrol=null;privatestaticMP3Playermp3;publicTocador(){Randomr=newRandom();while(true){if(control==null){finalFilefile1=listMusic[r.nextInt(listMusic.length)];finalFilefile2=listMusic[r.nextInt(listMusic.length)];finalFilefile3=listComercial[r.nextInt(listComercial.length)];Stringtitulo1,titulo2,titulo3;titulo1=file1.getName();titulo2=file2.getName();titulo3=file3.getName();control=newThread(newRunnable(){@Overridepublicvoidrun(){mp3=newMP3Player(file1,file2,file3);mp3.play();mp3IsStillPlaying();}});control.start();}else{if(!control.isAlive()){control.interrupt();control=null;}}}}privatestaticvoidmp3IsStillPlaying(){booleanplaying=true;while(playing){if(mp3.isStopped()){try{Thread.sleep(5000);if(mp3.isStopped()){playing=false;}}catch(InterruptedExceptione){e.printStackTrace();}}}}}
Preciso tornar public as variaves titulo1, titulo2, titulo3;
Você precisa criar atributos publico na classe, o que está fazendo é criando as variáveis no escopo do construtor apenas, depois que o construtor for chamado elas não existirão mais…
faça algo como:
importjaco.mp3.player.MP3Player;importjava.io.File;importjava.util.Random;publicclassTocador{privatestaticfinalFile[]listMusic=newFile("musica").listFiles();//poem a pasta das musicas privatestaticfinalFile[]listComercial=newFile("comercial").listFiles();//poem a pasta dos comerciais privatestaticThreadcontrol=null;privatestaticMP3Playermp3;publicStringtitulo1;publicStringtitulo2;publicStringtitulo3;publicTocador(){Randomr=newRandom();while(true){if(control==null){finalFilefile1=listMusic[r.nextInt(listMusic.length)];finalFilefile2=listMusic[r.nextInt(listMusic.length)];finalFilefile3=listComercial[r.nextInt(listComercial.length)];titulo1=file1.getName();titulo2=file2.getName();titulo3=file3.getName();control=newThread(newRunnable(){@Overridepublicvoidrun(){mp3=newMP3Player(file1,file2,file3);mp3.play();mp3IsStillPlaying();}});control.start();}else{if(!control.isAlive()){control.interrupt();control=null;}}}}privatestaticvoidmp3IsStillPlaying(){booleanplaying=true;while(playing){if(mp3.isStopped()){try{Thread.sleep(5000);if(mp3.isStopped()){playing=false;}}catch(InterruptedExceptione){e.printStackTrace();}}}}}
Sugiro que mantenha as variáveis como privadas e crie métodos acessores para elas para manter um padrão JavaBeans.
Espero ter ajudado.
Caio.Sergio
ao invés de criar no construtor crie as varias dentro da classe com escopo publico algo como:
porem o recomendável no Padrão orientado a objeto é definir as variaveis(Atributos) em escopo privado
e criar métodos para acessar estes atributos(get’s e set’s)
publicclassminhaClasse{//Escopo privado das variaveis(Atributos)privateintvariavel_1;//privadoprivateObjetovariavel_2;//privadopublicminhaClasse{variavel_1=5;variavel_2=newObjeto();}//////metodos de acesso as variaves - get's e set's//Atribui valor a variavel_1publicvoidsetVariavel1(intv1){this.variavel_1=v1;}//retorna o valor da variavel_1publicintgetVariavel1(){returnthis.variavel_1}//Atribui o valor a variavel_2publicvoidsetVariavel2(Objeto2){this.variavel_2=Objeto2;}//retorna valor a variavel_2publicObjetogetVariavel2(){returnthis.variavel_2;}}
O acesso pode ser feito de outra classe atraves dos metodos:
big E fiz exatamente como vc postou, mas não deu certo. vou postar a minha classe Principal onde eu preciso pegar o valor das variaveis.
importjava.awt.*;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassPrincipal{publicstaticvoidmain(String[]args)throwsException{JFramejanela=newJFrame();JButtonbotao=newJButton("Sair");JLabelplaying=newJLabel(titulo1);// Aqui preciso ter o valor da string da classe tocador.JLabelplayed=newJLabel("Musica tocada");janela.setLayout(null);janela.getContentPane().setBackground(Color.black);janela.add(playing);playing.setSize(150,20);playing.setForeground(Color.white);playing.setLocation(25,10);janela.add(played);played.setSize(150,20);played.setForeground(Color.white);played.setLocation(25,70);janela.add(botao);botao.setSize(70,30);botao.setBackground(Color.GRAY);botao.setLocation(620,5);janela.setSize(700,150);botao.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEventarg0){inti=JOptionPane.showConfirmDialog(null,"Deseja fechar a aplicação?","Saída",JOptionPane.YES_NO_OPTION);if(i==JOptionPane.YES_OPTION){System.exit(0);}}});janela.setLocationRelativeTo(null);janela.setUndecorated(true);janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);janela.setVisible(true);newTocador();}}
Big_E
digolipertte, nesse trecho você está tentando acessar diretamente a propriedade que criou na classe Tocador correto?
JLabelplaying=newJLabel(titulo1);// Aqui preciso ter o valor da string da classe tocador.
Você precisa criar uma instância da classe para acessar a partir da referência da seguinte forma:
Tocadortocador=newTocador();JLabelplaying=newJLabel(tocador.titulo1);// Aqui preciso ter o valor da string da classe tocador. // ou se você criou os métodos de acessoJLabelplaying=newJLabel(tocador.getTitulo1());// Aqui preciso ter o valor da string da classe tocador.
ViniGodoy
Em termos simples, declarar um atributo como public = cagada.
Crie métodos de acesso como já foi demonstrado no tópico.
digolipertte
ViniGodoy vc esta certo oque eu to fazendo é uma gambiarra com essa variável em public, mas o problema é o seguinte eu to fazendo um player e já ta quase pronto. dai deu um probleminha… Como vou saber que musica está tocando e que musica acabou de tocar. Como eu não sou um programador experiente apelei pra gambiarra ou jeitinho brasileiro como preferir… kkk. Então na minha logica quando tocar o file1 vai adicionar na variável titulo1 o nome da musica e assim por diante. dai tenho que exibir isso no jlabel…
E o pior de tudo quando a musica acabar de tocar tenho que passar o nome dela para a variável titulo2… isso ta me tirando o sono…
E construir os métodos get e set em duas classes ta me fundindo a cuca também, se puder me explicar os métodos get e set ficaria muito feliz.
obrigado por responderem.
digolipertte
Caio.Sergio:
ao invés de criar no construtor crie as varias dentro da classe com escopo publico algo como:
Caio.Sergio sei que esse é o jeito correto de fazer mas cara não to conseguindo intender. To tentando intender como eu vou fazer isso dentro do meu método Tocador();
porem o recomendável no Padrão orientado a objeto é definir as variaveis(Atributos) em escopo privado
e criar métodos para acessar estes atributos(get’s e set’s)
publicclassminhaClasse{//Escopo privado das variaveis(Atributos)privateintvariavel_1;//privadoprivateObjetovariavel_2;//privadopublicminhaClasse{variavel_1=5;variavel_2=newObjeto();}//////metodos de acesso as variaves - get's e set's//Atribui valor a variavel_1publicvoidsetVariavel1(intv1){this.variavel_1=v1;}//retorna o valor da variavel_1publicintgetVariavel1(){returnthis.variavel_1}//Atribui o valor a variavel_2publicvoidsetVariavel2(Objeto2){this.variavel_2=Objeto2;}//retorna valor a variavel_2publicObjetogetVariavel2(){returnthis.variavel_2;}}
O acesso pode ser feito de outra classe atraves dos metodos: