Erro "Cannot find symbol" ao compilar [Problema contornado]

6 respostas
PhoenixWings

Bom dia. Estou com problemas para compilar uma classe que contém o método main. Quando tento compilá-la com javac, recebo o seguinte erro:

AsteriscoQuadradoTest.java:15: cannot find symbol
symbol : class AsteriscoQuadrado
location : class asteriscoquadrado.AsteriscoQuadradoTest
AsteriscoQuadrado q = new AsteriscoQuadrado();
^

steriscoQuadradoTest.java:15: cannot find symbol
symbol : class AsteriscoQuadrado
location : class asteriscoquadrado.AsteriscoQuadradoTest
AsteriscoQuadrado q = new AsteriscoQuadrado();
^

2 errors

não sei por que o erro está apontando para a criação do objeto já que a execução acontece normalmente. As classes que criei foram:

package asteriscoquadrado;

/**
 *
 * @author Eduardo Felipe
 */
public class AsteriscoQuadrado
{

    private int L;
    int i = 0;

    public void setL(int L)
    {
        this.L = L;
    }

    public void geraLinha()
    {

        i = 0;
        while (i < L)
        {
            System.out.print("*");
            ++i;
        }
        System.out.println();
    }

    public void geraHorizontal()
    {

        i = 0;
        int espaco = L - 2;
        while (i < L - 2)
        {
            System.out.printf("%s%" + espaco + "s%s", "*", " ", "*");
            System.out.println();
            ++i;
        }

    }
}
package asteriscoquadrado;

/**
 *
 * @author Eduardo Felipe
 */
import java.util.Scanner;
public class AsteriscoQuadradoTest
{

   public static void main(String[] args)
   {

      int L = 0;
      AsteriscoQuadrado q = new AsteriscoQuadrado();
      Scanner input = new Scanner(System.in);

      while( L < 1 || L > 20)
      {
           System.out.print("Informe o tamanho do lado do quadrado (entre 1 e 20): ");
           L = input.nextInt();
           
      }

        q.setL(L);

        q.geraLinha();
        q.geraHorizontal();
        q.geraLinha();
    }

}

Agradeço desde já a ajuda!

6 Respostas

thiago.correa

Você compilou a sua classe AsteriscoQuadrado antes da AsteriscoQuadradoTest, se sim, você indicou ao compilador o local da classe AsteriscoQuadrado?!

PhoenixWings

thiago.correa:
Você compilou a sua classe AsteriscoQuadrado antes da AsteriscoQuadradoTest, se sim, você indicou ao compilador o local da classe AsteriscoQuadrado?!

1ª pergunta: sim. 2ª pergunta: não. Como eu faço para indicar ao compilador o local da classe AsteriscoQuadrado?

thiago.correa

java -cp
para maiores esclarecimentos java -help

PhoenixWings

No caso, você quer dizer que eu tenho que explicitar o pacote como acontece na execução? como deve ser escrita a sintaxe para isso? meu .java do AsteriscoQuadradoTest está em: E:\Documentos\NetBeansProjects\AsteriscoQuadrado\src\asteriscoquadrado . Eu devo escrever: javac -cp E:\Documentos\NetBeansProjects\AsteriscoQuadrado\src\asteriscoquadrado.AsteriscoQuadradoTest.java ? Obrigado pelo esclarecimento!

thiago.correa

Cara, fiz um teste para lhe passar o passo a passo, mas a questão é que ele compilou sem a opção -cp

Segue a saída do meu prompt de comando
C:\Users\Thiago>cd \temp\src

C:\temp\src>javac -d ../classes A.java

C:\temp\src>javac -d ../classes B.java

C:\temp\src>cd ..

C:\temp>cd classes

C:\temp\classes>dir
 O volume na unidade C não tem nome.
 O Número de Série do Volume é 6668-7C6E

 Pasta de C:\temp\classes

02/03/2010  15:51    <DIR>          .
02/03/2010  15:51    <DIR>          ..
02/03/2010  15:51               244 A.class
02/03/2010  15:51               454 B.class
               2 arquivo(s)            698 bytes
               2 pasta(s)    7.446.667.264 bytes disponíveis

C:\temp\classes>java B
thiago

C:\temp\classes>cd ..\src

C:\temp\src>dir
 O volume na unidade C não tem nome.
 O Número de Série do Volume é 6668-7C6E

 Pasta de C:\temp\src

02/03/2010  15:50    <DIR>          .
02/03/2010  15:50    <DIR>          ..
02/03/2010  15:39                39 A.java
02/03/2010  15:40               112 B.java
               2 arquivo(s)            151 bytes
               2 pasta(s)    7.428.333.568 bytes disponíveis

C:\temp\src>
PhoenixWings

O que você escreveu no prompt? eu decidi reinstalar a IDE mas o problema continua! eu criei uma classe do tipo HelloWorld dentro de um pacote para depois compilá-la. Compilei numa boa mas não estou conseguindo executá-la: não sei se é porque eu estou escrevendo a sintaxe de chamada à Classpath ( -cp ) errado. Eu digitei: java -cp C:\Documents and Settings\Battlecry\Meus documentos\NetBeansProjects\Eduardo\src\eduardo Eduardo .

Eu estou tendo o mesmo erro “cannot find symbol” citado mais acima para todas os pacotes que contém pelo menos duas classes. Quando eu tento compilar qualquer classe que tenha main, este erro me é retornado. Classes que não tem main, eu consigo compilar.

Consegui contornar a situação. Continuo tendo o erro referente à criação do objeto que ainda é um mistério porém, construindo o projeto ( build ) eu posso executar o aplicativo no prompt através do diretório …\build\classes\ onde está o .class compilado de GradeBookTest. Agradecimentos ao thiago.correa pela atenção dedicada à solução deste problema. :slight_smile:

Criado 2 de março de 2010
Ultima resposta 2 de mar. de 2010
Respostas 6
Participantes 2