Variavel public

7 respostas
digolipertte
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.
import jaco.mp3.player.MP3Player;  
  
import java.io.File;  
import java.util.Random;  
  
public class Tocador {  
  
    private static final File[] listMusic = new File("musica").listFiles();  //poem a pasta das musicas  
    private static final File[] listComercial = new File("comercial").listFiles(); //poem a pasta dos comerciais  
    private static Thread control = null;  
    private static MP3Player mp3;  
      
    public Tocador()  
    {  
        Random r = new Random();  
          
        while(true)  
        {  
            if(control == null)  
            {  
                   final File file1 = listMusic[r.nextInt(listMusic.length)];  
                   final File file2 = listMusic[r.nextInt(listMusic.length)];      
                   final File file3 = listComercial[r.nextInt(listComercial.length)];  
               
                   String titulo1,titulo2,titulo3;        
                   
                   titulo1 = file1.getName();        
                   titulo2 = file2.getName();        
                   titulo3 = file3.getName(); 
                   
                   control = new Thread(new Runnable() {  
                  
                @Override  
                public void run() {  
                    mp3 = new MP3Player(file1,file2,file3);  
                    mp3.play();  
                    mp3IsStillPlaying();  
                  }  
               });  
                
              control.start();  
          }  
          else  
          {  
              if(!control.isAlive())  
              {  
                  control.interrupt();  
                  control = null;  
              }  
          }  
       }  
      
    }  
      
    private static void mp3IsStillPlaying()  
    {  
        boolean playing = true;  
        while(playing)  
        {  
            if(mp3.isStopped())  
            {  
                try {  
                    Thread.sleep(5000);  
                    if(mp3.isStopped())  
                    {  
                        playing = false;  
                    }  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}
Preciso tornar public as variaves titulo1, titulo2, titulo3;
String titulo1,titulo2,titulo3;        
                   
                   titulo1 = file1.getName();        
                   titulo2 = file2.getName();        
                   titulo3 = file3.getName(); String titulo1,titulo2,titulo3;        
                   
                   titulo1 = file1.getName();        
                   titulo2 = file2.getName();        
                   titulo3 = file3.getName();

7 Respostas

Big_E

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:

import jaco.mp3.player.MP3Player;  
  
import java.io.File;  
import java.util.Random;  
  
public class Tocador {  
  
    private static final File[] listMusic = new File("musica").listFiles();  //poem a pasta das musicas  
    private static final File[] listComercial = new File("comercial").listFiles(); //poem a pasta dos comerciais  
    private static Thread control = null;  
    private static MP3Player mp3;  
    public String titulo1;
    public String titulo2;
    public String titulo3;        
                   
      
    public Tocador()  
    {  
        Random r = new Random();  
          
        while(true)  
        {  
            if(control == null)  
            {  
                   final File file1 = listMusic[r.nextInt(listMusic.length)];  
                   final File file2 = listMusic[r.nextInt(listMusic.length)];      
                   final File file3 = listComercial[r.nextInt(listComercial.length)];  
              
                   titulo1 = file1.getName();        
                   titulo2 = file2.getName();        
                   titulo3 = file3.getName(); 
                   
                   control = new Thread(new Runnable() {  
                  
                @Override  
                public void run() {  
                    mp3 = new MP3Player(file1,file2,file3);  
                    mp3.play();  
                    mp3IsStillPlaying();  
                  }  
               });  
                
              control.start();  
          }  
          else  
          {  
              if(!control.isAlive())  
              {  
                  control.interrupt();  
                  control = null;  
              }  
          }  
       }  
      
    }  
      
    private static void mp3IsStillPlaying()  
    {  
        boolean playing = true;  
        while(playing)  
        {  
            if(mp3.isStopped())  
            {  
                try {  
                    Thread.sleep(5000);  
                    if(mp3.isStopped())  
                    {  
                        playing = false;  
                    }  
                } catch (InterruptedException e) {  
                    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:

public class MinhaClasse {
	
	public int variavel_1;
	public Objeto variavel_2;
	
	public MinhaClasse{
		variavel_1 = 5;
		variavel_2 = new Objeto();
	
	}
}

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)

public class minhaClasse {
	
	//Escopo privado das variaveis(Atributos)
	private int variavel_1; //privado
	private Objeto variavel_2; //privado
	
	public minhaClasse{
		variavel_1 = 5;
		variavel_2 = new Objeto();
	
	}
	
	////
	//metodos de acesso as variaves - get's e set's
	
	
	//Atribui valor a variavel_1
	public void setVariavel1(int v1){
		this.variavel_1 = v1;
	}
	
	
	//retorna o valor da variavel_1
	public int getVariavel1(){
		return this.variavel_1
	}
	
	//Atribui o valor a variavel_2
	public void setVariavel2(Objeto2){
		this.variavel_2 = Objeto2;
	}
	
	//retorna valor a variavel_2
	public Objeto getVariavel2(){
		return this.variavel_2;
	}
	
	
	
}

O acesso pode ser feito de outra classe atraves dos metodos:

MinhaClasse objeto - new MinhaClasse();

objeto.setVariavel1(5); // atrubuit 5 a variavel 1

int x = objeto.getVariavel1(); // atribui o valor da Variavel 1 a variavel x.... ou seja 5

Cara espero ter ajudado… Abraço

digolipertte
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.
import java.awt.*;

import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;





public class Principal {
	
	
	public static void main (String [] args) throws Exception {
		
		JFrame janela = new JFrame(); 
		JButton botao = new JButton("Sair");
		
                JLabel playing = new JLabel(titulo1); // Aqui preciso ter o valor da string da classe tocador.


		JLabel played = new JLabel("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(new ActionListener() {    
           
			
			
            @Override    
            public void actionPerformed(ActionEvent arg0) {    
                   
            	   int i = 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);
		
		
		new Tocador ();
	}

}
Big_E

digolipertte, nesse trecho você está tentando acessar diretamente a propriedade que criou na classe Tocador correto?

JLabel playing = new JLabel(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:

Tocador tocador = new Tocador();
JLabel playing = new JLabel(tocador.titulo1); // Aqui preciso ter o valor da string da classe tocador. 

// ou se você criou os métodos de acesso

JLabel playing = new JLabel(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:

public class MinhaClasse {
	
	public int variavel_1;
	public Objeto variavel_2;
	
	public MinhaClasse{
		variavel_1 = 5;
		variavel_2 = new Objeto();
	
	}
}

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)

public class minhaClasse {
	
	//Escopo privado das variaveis(Atributos)
	private int variavel_1; //privado
	private Objeto variavel_2; //privado
	
	public minhaClasse{
		variavel_1 = 5;
		variavel_2 = new Objeto();
	
	}
	
	////
	//metodos de acesso as variaves - get's e set's
	
	
	//Atribui valor a variavel_1
	public void setVariavel1(int v1){
		this.variavel_1 = v1;
	}
	
	
	//retorna o valor da variavel_1
	public int getVariavel1(){
		return this.variavel_1
	}
	
	//Atribui o valor a variavel_2
	public void setVariavel2(Objeto2){
		this.variavel_2 = Objeto2;
	}
	
	//retorna valor a variavel_2
	public Objeto getVariavel2(){
		return this.variavel_2;
	}
	
	
	
}

O acesso pode ser feito de outra classe atraves dos metodos:

MinhaClasse objeto - new MinhaClasse();

objeto.setVariavel1(5); // atrubuit 5 a variavel 1

int x = objeto.getVariavel1(); // atribui o valor da Variavel 1 a variavel x.... ou seja 5

Cara espero ter ajudado… Abraço

Criado 7 de maio de 2012
Ultima resposta 9 de mai. de 2012
Respostas 7
Participantes 4