[RESOLVIDO] Problema com Reflection

Bom dia galera!

Estou tentando criar uma instancia de uma classe atraves do reflection.

Tenho o seguinte trecho de codigo:

Class cls = Class.forName(programa); 
Constructor ct = cls.getConstructor();   
Object retobj = ct.newInstance();  

onde programa, é uma String q contem o nome da minha classe. De acordo com o tutorial que encontrei aqui mesmo no forum (aqui) teria que dar certo. Mas acontece que me é retornado o seguinte erro:

java.lang.ClassNotFoundException: sgainca
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at interfaces.Menu$1.valueChanged(Menu.java:173)
	at javax.swing.JTree.fireValueChanged(Unknown Source)
	at javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
	at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
	at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(Unknown Source)
	at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(Unknown Source)
	at javax.swing.JTree.setSelectionPath(Unknown Source)
	at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(Unknown Source)
	at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(Unknown Source)
	at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Alguem tem ideia do que possa ser?

Obrigado!

[]'s

java.lang.ClassNotFoundException: sgainca  

Qual o nome da tua classe?
É este mesmo?
Com letra minúscula?

sim sim…


public class sgainca {

	private JFrame Janela = null;
	private JPanel Frame = null;
	private JLabel Cadastro = null;
	private Panel panel = null;

                   [...]
}

Está no mesmo pacote da classe que está sendo executada, tentando o reflection?
Posta os códigos das duas aí.

E, por favor, vamos seguir as java e javaBeans specifications…

Classe CamelCase com PrimeiraLetraMaiúscula…

tao sim…

Classe Menu:

package interfaces;

import java.awt.Dimension;
import java.lang.reflect.Constructor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JScrollPane;

public class Menu {
		private JTree getMenu() throws SQLException {
		if (Menu == null) {
			Menu = new JTree(montarArvore());
			
			Menu.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

			   // Listener para reagir as seleçoes do JTree
				Menu.addTreeSelectionListener
			   (
			        new TreeSelectionListener()
			        {
			         public void valueChanged(TreeSelectionEvent e)
			         {
			            DefaultMutableTreeNode node = (DefaultMutableTreeNode)
			            Menu.getLastSelectedPathComponent();
			            if( node.isLeaf() )
			            {
			                    try {
			                        Conexao con = new Conexao();
			                        con.CriaConexao();
			                        Statement stat = con.getStat();
			                        String Dados = "Select aplicacao, modulo, rotina from aplicacoes where descricao like '" + node + "'";
			                        ResultSet result = stat.executeQuery(Dados);
			                        String programa = "";
			                        if (result.next()) {
			                            programa = result.getString("aplicacao") + result.getString("modulo") + result.getString("rotina");
			                            programa = programa.toLowerCase();
			                        }
			                        Class cls = Class.forName(programa); 
			                        Constructor ct = cls.getConstructor();   
			                        Object retobj = ct.newInstance();  
			                        
			                    } catch (Throwable ex) {
			                        Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
			                    }

			            }
			        }

			        }
			   );
                
		}
}

Codigo sgainca:

package interfaces;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.Rectangle;
import java.awt.Panel;
import java.awt.Label;
import java.awt.GridBagConstraints;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import programas.sgaincaP;

import javax.swing.JButton;
public class sgainca {

	private JFrame Janela = null;
	private JPanel Frame = null;
	private JLabel Cadastro = null;
	private Panel panel = null;
	private Label labelAplicacao = null;
	private Label labelModulo = null;
	private Label labelRotina = null;
	private Label labelPrograma = null;
	private Label labelDesc = null;
	private TextField caixaAplicacao = null;
	private TextField caixaModulo = null;
	private TextField caixaRotina = null;
	private TextField caixaPrograma = null;
	private TextField caixaDescricao = null;
	private JButton botaoGravar = null;
	private JButton botaoExcluir = null;
	private JButton botaoSair = null;
	
	public sgainca(){
		getJanela();
	}
	private void getJanela() {
		if (Janela == null) {
			Janela = new JFrame();
			Janela.setSize(new Dimension(997, 528));
			Janela.setContentPane(getFrame());
			Janela.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
			Janela.setLocationRelativeTo(null);
			Janela.setVisible(true);
		}
	}

	private JPanel getFrame() {
		if (Frame == null) {
			Cadastro = new JLabel();
			Cadastro.setBounds(new Rectangle(6, 25, 654, 16));
			Cadastro.setText("Cadastro de Aplicação ");
			Frame = new JPanel();
			Frame.setLayout(null);
			Frame.add(Cadastro, null);
			Frame.add(getPanel(), null);
		}
		return Frame;
	}

	private Panel getPanel() {
		if (panel == null) {
			labelDesc = new Label();
			labelDesc.setBounds(new Rectangle(12, 223, 85, 23));
			labelDesc.setText("Descrição : ");
			labelPrograma = new Label();
			labelPrograma.setBounds(new Rectangle(12, 175, 85, 23));
			labelPrograma.setText("Programa : ");
			labelRotina = new Label();
			labelRotina.setBounds(new Rectangle(12, 127, 85, 23));
			labelRotina.setText("Rotina : ");
			labelModulo = new Label();
			labelModulo.setBounds(new Rectangle(12, 79, 85, 23));
			labelModulo.setText("Modulo : ");
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.gridx = 0;
			gridBagConstraints.gridy = 0;
			labelAplicacao = new Label();
			labelAplicacao.setText("Aplicação : ");
			labelAplicacao.setBounds(new Rectangle(12, 31, 85, 23));
			panel = new Panel();
			panel.setLayout(null);
			panel.setBounds(new Rectangle(84, 82, 854, 395));
			panel.add(labelAplicacao, gridBagConstraints);
			panel.add(labelModulo, null);
			panel.add(labelRotina, null);
			panel.add(labelPrograma, null);
			panel.add(labelDesc, null);
			
			caixaAplicacao = new TextField();
			caixaAplicacao.setBounds(new Rectangle(140, 31, 45, 23));
			panel.add(caixaAplicacao, null);
			
			caixaModulo = new TextField();
			caixaModulo.setBounds(new Rectangle(140, 79, 45, 23));
			panel.add(caixaModulo, null);
			
			caixaRotina = new TextField();
			caixaRotina.setBounds(new Rectangle(140, 127, 45, 23));
			panel.add(caixaRotina, null);
			
			caixaPrograma = new TextField();
			caixaPrograma.setBounds(new Rectangle(140, 175, 276, 23));
			panel.add(caixaPrograma, null);
			
			caixaDescricao = new TextField();
			caixaDescricao.setBounds(new Rectangle(140, 223, 276, 23));
			panel.add(caixaDescricao, null);
			
		}
		return panel;
	}
	
	private void limpaCampos(){
		caixaAplicacao.setText("");
		caixaModulo.setText("");
		caixaRotina.setText("");
		caixaPrograma.setText("");
		caixaDescricao.setText("");
	}

}

Altere a chamada para o “nome completo” da classe. “interfaces.sgainca”

eu ja havia tentado fazer isso…

mas da o mesmo erro…

=/

Eu testei aqui e deu certo.

String programa = "interfaces.sgainca";

Estou crendo que meu maior problema esta entre a cadeira e o pc…

xD

tinha escrito errado… agora funcionou certin…

Obrigado mais uma vez drsmachado!!!

[]'s

Tranquilo.
Coloca [resolvido] no tópico.

ok ok !

e quanto a nomenclatura das classes, e porque jurava que havia lido em algum lugar que o padrao era “padraoClasse” e nao “PadraoClasse”.

Mas ja estou renomeando tudo em meu projeto!

Obrigado!

Bom dia, lucasgcp!

Quanto a classes, elas possuem a primeira letra maiúcula, já métodos e variáveis possuem a primeira letra minúscula e ao unir palavras, a próxima já vem com letra maiúscula, exemplo:

[code]public class MinhaClasse{

private String minhaVariavel;

public void meuMetodo(){
[...]
}

}[/code]

Abraço!

Bom dia Vingdel !

Ah então foi essa minha confusão!!

Obrigado pelo seu post!

[]'s

Fala garoto!! e ai lucasgcp beleza? sei que não é o assunto do tópico, mas estou precisando muito de exemplos ou algum material que ensine como manipular a JTree, se você possuir algo neste sentido e puder disponibilizar agradeço muito.

Volto a pedir desculpas a todos por postar um assunto distinto do tópico, mas estou realmente precisando.

Ola amigo!!

Tenho sim!!

voce prefere que eu comente o codigo? Quer que poste aqui mesmo ou por e-mail??

[]'s

o que for melhor pra ti lucas, poste aqui no site, assim, se mais alguém precise vai ter a oportunidade também, e sobre os comentários se tiver alguns ajuda no entendimento de todos.

obrigado, abraços.