Olá Pessoal,
Dei uma procurada no fórum e li uma porrada de posts sobre classloader, mas, nenhum me ajudou, por isso estou colocando a duvida aqui.
Agora sem mais “delongas”, o meu problema é o seguinte, eu estou carregando JInternalFrames dentro do meu projeto com o código abaixo…
Class classe = null;
try {
final String CLASSE = subMenus.get(numerador).getModulo().trim();
classe = Class.forName("telas." + CLASSE);
JInternalFrame internalFrame = (JInternalFrame) classe.newInstance();
internalFrame.setVisible(true);
painelCentro.add(internalFrame);
try {
internalFrame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {
e.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
…mas, como minhas classes tem muitos métodos ele está gerando os arquivos class da seguinte forma…
CadastroClientes$1.class
CadastroClientes$2.class
CadastroClientes$3.class
CadastroClientes$4.class
CadastroClientes$5.class
...
CadastroClientes.class
e quando mando abrir ele retorna um erro informando que não encontra a classe telas.CadastroClientes, mas, quando a
classe tem um unico arquivo class como a minha classe abaico…
CadastroTipoCliente.class
…ele abre normalmente, já tentei de tudo que eu conhecia, mas, nada resolveu.
Alguém já passou por situação semelhante e conseguiu resolver? Se sim por favor me ajude.
Muito obrigado antecipadamente.
Estranho - olhando o seu código (que não usa um “custom classloader” mas sim usa apenas o classloader padrão, já que você está só usando Class.forName) não consigo entender por que ele não funciona.
Voce está pondo todos esses .class (__$1.class, ___$2.class etc) junto com o .class principal ou não? É que eles implementam os ActionListeners do seu JFrame.
Todos eles têm de estar copiados no mesmo diretório da classe que não tem o $1, $2 etc… (por exemplo, CadastroClientes.class e CadastroClientes$1.class, porque estão no mesmo pacote, têm de estar no mesmo diretõrio),
Valeu entanglement pela resposta,
Cara, os class estão todos dentro do mesmo pacote e ainda assim quando eu vou fazer a referencia eu passo o nome da classe com o pacote, e ainda assim não localiza a classe.
Olá Psessoal,
Ainda estou tento o problema, o estranho é que ele está retornando o stack abaixo…
java.lang.ClassNotFoundException: br.com.sisflex.JEstApp.telas.JEstA67.class
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.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at br.com.sisflex.JEstApp.telas.JEstApp2$4.actionPerformed(JEstApp2.java:313)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(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.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)
já tentei inclusive colocar o nome direto da classe com o .class, mas, mesmo assim continua dando erro.
Abraço a todos.
“class” não pode ser um nome de classe ou pacote, porque é uma palavra reservada.
valeu entanglement pela resposta,
Eu conheço a regra pra nomenclatura, eu coloquei assim para fazer teste, mas, se deixo sem o .class da o mesmo erro.
Ninguém fez algo parecido com isso?