Estou com um problema para gerar um .jar no NetBeans 11.
passei o caminho relativo “/br/house/icons/icon32.png”
Quando mando compilar e depois vou executar não abre.
Quando mando executar pelo netbeans me retorna esse erro
Ja troquei pelo caminho completo tb.
“C:/…/br/house/icons/icon32.png”
Sem sucesso
Peguei o .jar compilado e abri com o winrar e nele n consta o caminho “br/house/icons/…”
os demais pacotes estão constando, apenas o pacote dos ícones não.
Fica difícil ajudar sem ter contexto. Onde está dando esse erro? Cadê a stack trace? O que você já tentou fazer para resolver o problema? Quanto mais contexto você der, mais fácil fica para alguém te ajudar.
L
lvbarbosa
Esse caminho existe no sistema? Essa barra no começo do path indica a raiz do sistema, um caminho absoluto. É isso mesmo que você quer?
T
tsartori
Ja troquei pelo caminho completo tb.
“C:/…/br/house/icons/icon32.png”
Sem sucesso
T
tsartori
Peguei o .jar compilado e abri com o winrar e nele n consta o caminho “br/house/icons/…”
os demais pacotes estão constando, apenas o pacote dos ícones não.
L
lvbarbosa
Você precisa configurar a IDE para colocar isso dentro do jar. Por default isso não acontece. A não ser que você coloque os ícones na pasta resources.
T
tsartori
Como faço isso?
Dentro do meu projeto tenho
Source Packages (br.house.icons // br.house.main // br.house.util)
Dependencies (MySql )
Java Dependencies (java 8)
Project Files (pom.xlm // nbactions.xml)
J
Jothar_Aleksander
getClass().getResource(“/br/house/icons/icon32.png”); não resolve?
Já que o o método getResource(String name) retorna:
Um objeto de URL; null se nenhum recurso com esse nome for encontrado, o recurso não pode ser localizado por uma URL, o recurso está em um pacote que não esteja aberto para pelo menos o módulo de chamada ou o acesso ao recurso será negado pelo gerente de segurança. Throws: NullPointerException - se o nome for nulo
T
tsartori
Esse código é gerado automaticamente pelo NetBeans. O engraçado que em outros projetos que tenho aqui funciona perfeitamente.
A unica diferença deste projeto para os demais é a utilização do maven.
S
staroski1 like
Posta o fonte da classe mainBotPainel.
Só vai indicar a raíz do sistema se estiver utilizando as classes File ou Path.
Se estiver usando o método getResource ou getResourceAsStream da classe Class, então essa / significa que é para buscar a partir da raíz do classpath da aplicação, o que é a forma mais correta.
T
tsartori
packagebr.house.main;importjava.awt.Dimension;importjava.awt.Rectangle;/** * * @author Thiago Sartori * Tel/Whats ([telefone removido] */publicclassmainBotPainelextendsjavax.swing.JFrame{/** * Creates new form mainBotPainel */publicmainBotPainel(){initComponents();PosicionaJanela();}privatevoidPosicionaJanela(){DimensionobjDim=this.getToolkit().getScreenSize();Rectangleabounds=this.getBounds();this.setLocation((objDim.width-abounds.width)/2,(objDim.height-abounds.height)/2);this.requestFocus();}/** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code"> privatevoidinitComponents(){pnMain=newjavax.swing.JPanel();lbImgFundo=newjavax.swing.JLabel();jMenuBar1=newjavax.swing.JMenuBar();mnSartoriBot=newjavax.swing.JMenu();mnOferta=newjavax.swing.JMenuItem();mnCadastraCliente=newjavax.swing.JMenuItem();mnEntregas=newjavax.swing.JMenuItem();mnAjuda=newjavax.swing.JMenu();mnSobre=newjavax.swing.JMenuItem();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setTitle("@Sartori_Bot :: Gerenciador");setMinimumSize(newjava.awt.Dimension(1280,742));setPreferredSize(newjava.awt.Dimension(1280,742));setResizable(false);pnMain.setToolTipText("");pnMain.setCursor(newjava.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));pnMain.setMinimumSize(newjava.awt.Dimension(1280,742));lbImgFundo.setIcon(newjavax.swing.ImageIcon(getClass().getResource("/br/house/icons/telegramWallpaper.jpg")));// NOI18NlbImgFundo.setToolTipText("");lbImgFundo.setName("");// NOI18Njavax.swing.GroupLayoutpnMainLayout=newjavax.swing.GroupLayout(pnMain);pnMain.setLayout(pnMainLayout);pnMainLayout.setHorizontalGroup(pnMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(lbImgFundo));pnMainLayout.setVerticalGroup(pnMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(lbImgFundo));mnSartoriBot.setText("Sartori_bot");mnOferta.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O,java.awt.event.InputEvent.CTRL_MASK));mnOferta.setText("Criar oferta");mnSartoriBot.add(mnOferta);mnCadastraCliente.setText("Cadastrar cliente");mnSartoriBot.add(mnCadastraCliente);mnEntregas.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E,java.awt.event.InputEvent.CTRL_MASK));mnEntregas.setText("Painel de Entregas");mnSartoriBot.add(mnEntregas);jMenuBar1.add(mnSartoriBot);mnAjuda.setText("Ajuda");mnSobre.setText("Sobre");mnSobre.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){mnSobreActionPerformed(evt);}});mnAjuda.add(mnSobre);jMenuBar1.add(mnAjuda);setJMenuBar(jMenuBar1);javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(pnMain,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(pnMain,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE));pack();}// </editor-fold> privatevoidmnSobreActionPerformed(java.awt.event.ActionEventevt){newSobre(this,true).setVisible(true);}/** * @param args the command line arguments */publicstaticvoidmain(Stringargs[]){/* Set the Nimbus look and feel *///<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */try{javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());/*for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } }*/}catch(ClassNotFoundException|InstantiationException|IllegalAccessException|javax.swing.UnsupportedLookAndFeelExceptionex){java.util.logging.Logger.getLogger(mainBotPainel.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);}//</editor-fold>//</editor-fold>/* Create and display the form */java.awt.EventQueue.invokeLater(()->{newmainBotPainel().setVisible(true);});}// Variables declaration - do not modify privatejavax.swing.JMenuBarjMenuBar1;privatejavax.swing.JLabellbImgFundo;privatejavax.swing.JMenumnAjuda;privatejavax.swing.JMenuItemmnCadastraCliente;privatejavax.swing.JMenuItemmnEntregas;privatejavax.swing.JMenuItemmnOferta;privatejavax.swing.JMenumnSartoriBot;privatejavax.swing.JMenuItemmnSobre;privatejavax.swing.JPanelpnMain;// End of variables declaration }
O problema esta nessa linha, já troquei por png e jpg para ver se tinha diferença
S
staroski
O método getResource retorna um objeto do tipo URL. URL só é válido para apontar caminhos no sistema de arquivos do seu sistema operacional ou então endereços na rede.
Quando você quer ler um recurso que está dentro de um JAR, não adianta utilizar o getResource pois ele vai retornar null.
Neste caso tem que utilizar o getResourceAsStream, para ler a imagem de dentro do JAR.