Cannot find symbol

2 respostas
bruno_r_santana

Olá galera,

Tenho dois arquivos Java: TextFieldFrame.java e TextFieldTest.java. Quando tento compilar o TextFieldFrame.java no terminal do Linux funciona normal e são gerados 3 arquivos .class: TextFieldFrame$1.class, TextFieldFrame.class e TextFieldFrame$TextFieldHandler.class

Quando eu tento compilar o arquivo TextFieldTest.java ocorre o erro “cannot find symbol” dizendo que não acha a classe TextFieldFrame, mas a classe TextFieldFrame já está compilada. Não sei o porque ele não acha a classe. Erro de programação não é pq esse é um exemplo de um livro e estou compilando os arquivos fonte que vieram no cd junto com o livro. Seguem os comandos via terminal e os resultados:

bruno@casa:~/Meus Documentos/JAVA/JFrame$ ls
TextFieldFrame.java TextFieldTest.java
bruno@casa:~/Meus Documentos/JAVA/JFrame$ javac TextFieldFrame.java
bruno@casa:~/Meus Documentos/JAVA/JFrame$ ls
TextFieldFrame$1.class TextFieldFrame.class TextFieldFrame.java TextFieldFrame$TextFieldHandler.class TextFieldTest.java
bruno@casa:~/Meus Documentos/JAVA/JFrame$ javac TextFieldTest.java
TextFieldTest.java:9: cannot find symbol
symbol : class TextFieldFrame
location: class TextFieldTest
TextFieldFrame textFieldFrame = new TextFieldFrame();
^
TextFieldTest.java:9: cannot find symbol
symbol : class TextFieldFrame
location: class TextFieldTest
TextFieldFrame textFieldFrame = new TextFieldFrame();
^
2 errors
bruno@casa:~/Meus Documentos/JAVA/JFrame$

Espero que possam ajudar. valeu!!! =)

2 Respostas

nel

Oi!

Provavelmente está relacionado ao fato de como está compilando a sua classe TextFieldFrame.java. Está indicando que ela possui um pacote (caso a mesma possua um)?
Lembre-se que compilar via javac exige alguns cuidados e maior atenção.

Veja: http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.html

Abraços.

bruno_r_santana

Então, as classes não estão dentro de nenhum pacote, não há declaração de package. Eu estou compilando usando javac sem argumento nenhum, somente uso javac nomeDoArquivo.java. Segue o código das classes:

// Fig. 11.9: TextFieldFrame.java
// Demonstrando a classe JTextField.
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;

public class TextFieldFrame extends JFrame 
{
   private JTextField textField1; // campo de texto com tamanho configurado
   private JTextField textField2; // campo de texto construído com texto
   private JTextField textField3; // campo de texto com texto e tamanho
   private JPasswordField passwordField; // campo de senha com texto

   // construtor TextFieldFrame adiciona JTextFields a JFrame
   public TextFieldFrame()
   {
      super( "Testing JTextField and JPasswordField" );
      setLayout( new FlowLayout() ); // configura o layout de frame

      // constrói textfield com 10 colunas
      textField1 = new JTextField( 10 );    
      add( textField1 ); // adiciona textField1 ao JFrame

      // constrói campo de texto com texto padrão
      textField2 = new JTextField( "Enter text here" );
      add( textField2 ); // adiciona textField2 ao JFrame

      // constrói textfield com o texto padrão e 21 colunas   
      textField3 = new JTextField( "Uneditable text field", 21 );
      textField3.setEditable( false ); // desativa a edição       
      add( textField3 ); // adiciona textField3 ao JFrame

      // constrói passwordfield com o texto padrão
      passwordField = new JPasswordField( "Hidden text" );
      add( passwordField ); // adiciona passwordField ao JFrame

      // handlers de evento registradores
      TextFieldHandler handler = new TextFieldHandler();
      textField1.addActionListener( handler );          
      textField2.addActionListener( handler );          
      textField3.addActionListener( handler );          
      passwordField.addActionListener( handler );       
   } // fim do construtor TextFieldFrame

   // classe interna private para tratamento de evento
   private class TextFieldHandler implements ActionListener
   {
      // processa eventos de campo de texto
      public void actionPerformed( ActionEvent event )
      {
         String string = ""; // declara string a ser exibida

         // usuário pressionou Enter no JTextField textField1
         if (event.getSource() == textField1)
            string = String.format( "textField1: %s",
               event.getActionCommand());

         // usuário pressionou Enter no JTextField textField2
         else if (event.getSource() == textField2)
            string = String.format( "textField2: %s",
               event.getActionCommand());

         // usuário pressionou Enter no JTextField textField3
         else if (event.getSource() == textField3)
            string = String.format( "textField3: %s", 
               event.getActionCommand());

         // usuário pressionou Enter no JTextField passwordField
         else if (event.getSource() == passwordField)
            string = String.format( "passwordField: %s", 
               new String(passwordField.getPassword()) );

         // exibe o conteúdo de JTextField
         JOptionPane.showMessageDialog( null, string ); 
      } // fim do método actionPerformed
   } // fim da classe TextFieldHandler interna private
} // fim da classe TextFieldFrame

Agora o código da classe TextFieldTest:

// Fig. 11.10: TextFieldTest.java
// Testando TextFieldFrame.
import javax.swing.JFrame;

public class TextFieldTest
{
   public static void main( String args[] )
   { 
      TextFieldFrame textFieldFrame = new TextFieldFrame();
      textFieldFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      textFieldFrame.setSize( 325, 100 ); // configura o tamanho do frame
      textFieldFrame.setVisible( true ); // exibe o frame
   } // fim de main
} // fim da classe TextFieldTest

Não faço idéia do que possa ser. Valeu!

Criado 19 de junho de 2011
Ultima resposta 20 de jun. de 2011
Respostas 2
Participantes 2