Uma classe não está sendo reconhecida

29 respostas
anyblueangel3

Criei uma classe ImprimePedido mas ela não pode ser importada, será que é algum erro na classe ou o problema é no NetBeans? Veja a classe abaixo:

package empresaiv;

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.util.ArrayList;
import model.ItensPedidoClienteEstendida;
import model.PedidosCliente;

/**
 * 
 * Autor: Ronaldo Rodrigues Godoi
 * 
 */
public class ImprimePedido {
    public ImprimePedido(PedidosCliente pedidoCliente, ArrayList<ItensPedidoClienteEstendida> itensPedido) {
        Document documentPDF = new Document();
        try {
            PdfWriter.getInstance(documentPDF, new FileOutputStream("PedidoCliente.pdf"));
            documentPDF.open();
            Paragraph cabecalho = new Paragraph("Número do pedido: " + pedidoCliente.getId() + "\n" +
                    " Id Cliente: " + pedidoCliente.getId_cliente() +
                    " Confição de pagamento: " + pedidoCliente.getCondicao_pag() +
                    " Id Endereço de entrega: " + pedidoCliente.getId_endereco_entrega() +
                    " Data do Pedido: " + pedidoCliente.getData_pedido());
            documentPDF.add(cabecalho);
            
            int cont = itensPedido.size();
            
            documentPDF.add(new Paragraph(" "));
            
            double valorTotal = 0;
            for(int i = 1; i < cont; i++) {
                Paragraph corpoPedido = new Paragraph(itensPedido.get(i).getId_produto()+
                        " " + itensPedido.get(i).getDescricao_produto() +
                        " " + itensPedido.get(i).getQuantidade() +
                        " " + itensPedido.get(i).getPreco() +
                        " " + itensPedido.get(i).getQuantidade() * itensPedido.get(i).getPreco());
                valorTotal = valorTotal + itensPedido.get(i).getQuantidade() * itensPedido.get(i).getPreco();
                documentPDF.add(corpoPedido);
            }
            
            documentPDF.add(new Paragraph(" "));
            
            Paragraph totalizacao = new Paragraph("Valor total: " + valorTotal);
            documentPDF.add(totalizacao);
                    
            
        } catch (Exception erro) {
            erro.printStackTrace();
        }
        
        documentPDF.close();
        
    }
}

Atenciosamente,
Ronaldo

29 Respostas

Gabriel432135

Acho que é erro no Netbeans mesmo.

Gabriel432135

talvez tenha um pacote dentro do outro e o caminho não esteja completo, não consegui ver com a foto. Mas qual erro ta dando?

anyblueangel3

Ele não reconhece a classe ImprimePedido como fazendo parte do package. Não vê a classe.
O que eu posso fazer no netbeans para ele reconhecer a classe?

Gabriel432135

faz um teste: Tente implementar essa classe e deixe ele importar sozinho. Se não der certo, pode ser erro no NetBeans mesmo. Entre nos arquivos do projeto e veja se essa classe ta lá. Se tiver, tente fechar e abrir novamente o netbeans

staroski

Posta a mensagem de erro exata que o NetBeans está apresentando pra você.

anyblueangel3

Ele diz que ImprimePedido não existe!!! Não sei mais o que fazer. Esse tipo de erro começou depois que eu importei um arquivo zip de relatório pdf.

Veja a mensagem de erro:
image

Gabriel432135

Isso é muito estranho. Esse zip que vc importou é o que?

Gabriel432135

faça um teste: Tente criar outra classe dentro desse pacote, com a mesma coisa dentro, e tente importar. Se não der certo, tente importar outra classe desse pacote só pra ver o que acontece. Pode ser um erro de cache do netbeans.

anyblueangel3

Acho que é erro no cache do netbeans. Depois que fiz a importação o netbeans mudou o menu do botão esquerdo, quando tento criar uma classe nova em uma pasta o netbeans não exibe mais a opção para classe nova e eu tenho que criar um arquivo vazio e dar nome com a extensão java. Não sei, mas parece que ele mudou o tipo de projeto para maven.

staroski

A classe ImprimePedido está em ordem?
Ela não está com erros de compilação?

Gabriel432135

Com certeza é esse zip o erro. Não sei o que ele é mas pode ser que tenha bugado o netbeans. Eu tentaria criar outro projeto e pegar suas coisas e passar tudo pra ele.

anyblueangel3

Essa classe não apresenta erro de compilação.

davidbuzatto

Tenta Ctrl+Shift+I no arquivo. Ele vai corrigir os imports, tirando os desnecessários. As versões mais novas do NetBeans estão meio estranhas em algumas situações. Eu tenho um problema crônico em um projeto meu por exemplo que eu tenho que fechar o NetBeans para algumas classes serem atualizadas na hora de compilar. Esse problema de não encontrar uma classe acontece tbm.

Enfim, testa o atalho que te passei. Se não resolver, renomeia a classe ImprimePedido. Seleciona ela do lado esquerdo, tecla F2, troca o nome, sei lá, põe um X no final, algo assim ImprimePedidoX, manda refatorar e vê se resolve. Se resolver, aí volta para o nome anterior.

anyblueangel3

Sim, eu poderia fazer isto mas esse zip é um projeto pdf e sem ele não posso usar as classe de impressão pdf. Não sei se estou importando da maneira correta. Como se usa um projeto de impressão pdf? O projeto foi baixado do endereço GitHub - LibrePDF/OpenPDF: OpenPDF is a free Java library for creating and editing PDF files with a LGPL and MPL open source license. OpenPDF is based on a fork of iText. We welcome contributions from other developers. Please feel free to submit pull-requests and bugreports to this GitHub repository. ⛺. Tudo que eu fiz foi baixar o zip e importar zip pelo netbeans. Como se usa esse projeto?

Surgiu um erro de compilação assim: operador diamante não pode ser usado com -source 5 só pode ser usado com -source 7 em diante. O que isto quer dizer?

Tentei o Ctrl+Shift+I mas não deu certo.

Gabriel432135

Eu to achando que é isso mesmo. Ele parece ser uma biblioteca pensada no Maven, tanto é que ele pede pra vc colocar lá as dependências no pom.xml. Tente fazer o que o [davidbuzatto] falou. Se não der certo, tente levar seu projeto pro Maven. Não sei se é viável pra vc fazer isso mas, tente criar o projeto novamente só que com o Maven. Mudar de um pro outro pode ter quebrado seu projeto. Aí vc pega suas classes e importa pra esse novo projeto.

anyblueangel3

Bom, eu segui as orientações do Gabriel e ele começou a reconhecer a Classe ImprimePedido mas não reconheceu os import(s) como por exemplo o import com.lowagie.text.Document;

Então o programa roda mas com erro de compilação. A grande dúvida é como usar o projeto de PDF LibrePDF/OpenPDF que está disponível no github. Alguém pode me ajudar com isso?

staroski

Se seu projeto não é Maven, modifique para ser um projeto Maven e faça exatamente o que consta no texto da página inicial do GitHub: adicionar a dependência a seguir:

<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf</artifactId>
  <version>1.3.29</version>
</dependency>
anyblueangel3

Esta correto meu arquivo pom.xml?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>EmpresaVI</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.github.librepdf</groupId>
            <artefactId>openpdf</artefactId>
            <version>1.3.29</version>
        </dependency>
    </dependencies>
</project>

O NetBeans está dando os seguintes erros:

[ERROR] Some problems were encountered while processing the POMs:
Malformed POM C:\Users\Usuario\ProjetosJava\EmpresaVI\pom.xml: Unrecognised tag: 'artefactId' (position: START_TAG seen ...</groupId>\n            <artefactId>... @16:25)  @ C:\Users\Usuario\ProjetosJava\EmpresaVI\pom.xml, line 16, column 25
'dependencies.dependency.artifactId' for com.github.librepdf:null:jar is missing. @ line 14, column 21
 @ 
The build could not read 1 project -> [Help 1]
  
  The project com.mycompany:EmpresaVI:1.0-SNAPSHOT (C:\Users\Usuario\ProjetosJava\EmpresaVI\pom.xml) has 2 errors
    Malformed POM C:\Users\Usuario\ProjetosJava\EmpresaVI\pom.xml: Unrecognised tag: 'artefactId' (position: START_TAG seen ...</groupId>\n            <artefactId>... @16:25)  @ C:\Users\Usuario\ProjetosJava\EmpresaVI\pom.xml, line 16, column 25 -> [Help 2]
    'dependencies.dependency.artifactId' for com.github.librepdf:null:jar is missing. @ line 14, column 21

Além disso ele não encontra as classes, veja a mensagem de erro:

image

O que eu devo fazer para ele encontrar a classe main?

Veja a estrutura de arquivos do projeto:

image

Atenciosamente,
Ronaldo

Gabriel432135

Tente colocar assim:

<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf-fonts-extra</artifactId>
  <version>${openpdf.version}</version>
</dependency>

<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf</artifactId>
  <version>1.3.29</version>
</dependency>

Parece que vc escreveu “Artefact” com E ao invés de Artifact com I

anyblueangel3

Você diz para digitar duas vezes, da forma como está na sua resposta?

Gabriel432135

Vc pode colocar essas duas dependências dentro da dependencies. A primeira é opcional, só use se não der certo. Essa que é obrigatória;

<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf</artifactId>
  <version>1.3.29</version>
</dependency>
Gabriel432135

O erro que eu consegui ver foi só na linha

<artefactId>openpdf</artefactId>

Escrito artefact com E ao invés de artifact com I

<artifactId>openpdf</artifactId>
anyblueangel3

Parece que deu certo, não tem mais nenhum erro no pom.xml. Agora gostaria que vocês me dissessem como adiciono um driver .jar ao projeto maven, porque tentei de todas as formas e não consegui. Parece que só falta o driver para ele conseguir abrir o programa.

O nome do driver é mysql-connector-java-8.0.25.jar e está gravado em um diretório da minha máquina.
Alguém pode me ajudar?
Aqui vai a árvore do projeto, em qual pasta devo colocar e como?

image

image

Atenciosamente,
Ronaldo

Gabriel432135

Eu nunca fiz isso antes, mas acho que vc pode fazer isso assim:

<dependency>
  <groupId>KKJava</groupId>
  <artifactId>KKJava</artifactId>
  <scope>system</scope>
  <version>1.0</version>
  <systemPath>${project.basedir}/libs/KKJava-1.0.jar</systemPath>
</dependency>

Aí vc cria uma pasta no seu projeto chamada “libs” e adapta os nomes, mudando de KKJava e KKJava-1.0.jar para o nome do seu jar.

anyblueangel3

Onde naquela árvore você colocaria a pasta lib? E aquela dependency deve ser colocada no pom.xml, correto?

Gabriel432135

Eu criaria a pasta libs dentro de EmpresaVI mesmo. E isso é pra colocar no pom.xml também.
Vc pode colocar um em cima do outro.
Ex:

<dependencies>
  <dependency>
   //Dependencia 1
  </dependency>
  <dependency>
   //Dependencia 2.
  </dependency>
</dependencies>

Pelo que li no github, parece que essa biblioteca precisa de mais isso:

<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf-fonts-extra</artifactId>
  <version>${openpdf.version}</version>
</dependency>

Pra suportar o padrão UTF-8, mas aí já não sei se vai precisar mesmo.

staroski

Agora que seu projeto é Maven, não precisa mais da pasta lib e dos jars.

É só adicionar a seguinte dependência no seu POM:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
Gabriel432135

Faz igual o staroski falou, pq o maven, diferente do ant, baixa automaticamente as bibliotecas. A gente só precisa adicionar as dependências. Só faça aquilo que falei caso seja um jar pessoal ou algo assim.

anyblueangel3

Staroski, deu certinho…
Muito obrigado.
Obrigado a você Gabriel, também.

Atenciosamente,
Ronaldo

Criado 26 de julho de 2022
Ultima resposta 27 de jul. de 2022
Respostas 29
Participantes 4