Bom dia senhores.
Tenho uma aplicação que cria arquivos .java, utilizo o “com.sun.tools.javac.Main.compile()” para compilar estes arquivos, depois, estou tentando usar URLClassLoader para executar estas classes em tempo de execução sem fechar a aplicação. O problema é não está funcionando. Já tentei de todo jeito, já pesquisei muito, já vi varios exemplos, mas ainda não consegui fazer funcionar. Os passos são:
1- O usuário grava o arquivo em um local escolhido por ele:
private void jButtonCriarTelaRelActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fc = new JFileChooser(MetodosGenericos.getAplicationFolder()+"\\src");
// restringe a amostra a diretorios apenas
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int res = fc.showOpenDialog(null);
if(res == JFileChooser.APPROVE_OPTION){
File diretorio = fc.getSelectedFile();
try{
MetodosGenericos.GravaArquivo(
//este metodo cria o arquivo .java
ConstrucaoFormRelatorios.criaClasseFormTelaRelatorios(diretorio.getName(),
txtLabelCodigoTelaRel.getTxtFormatadoText(),
telaRelatorio.getTela_rela_nome_classe(),
txtProjeto.getText()),
diretorio.getPath() + "\\" + telaRelatorio.getTela_rela_nome_classe()+ ".java");
jTextFieldLocal.setText(diretorio.getPath()); //Local onde foi salvo o Arquivo
jTextFieldPkgSalvo.setText(diretorio.getName()); //Pasta onde foi salvo o Aquivo
//Compila o arquivo gerado
if (compilaArquivo(
diretorio.getPath() + "\\" + telaRelatorio.getTela_rela_nome_classe()+ ".java"
)!=0){ //Se for <> de zero ocorreu algum erro ao compilar o arquivo.
JOptionPane.showMessageDialog(null, "Erro ao Compilar o arquivo.\nVerifique os erros no arquivo Erros.txt que salvo no diretorio do Sistema.");
}
JOptionPane.showMessageDialog(null, "Arquivo gravado com sucesso em:\n " + diretorio.getPath());
}catch(SQLException sqlex){
JOptionPane.showMessageDialog(null, "Erro ao tentar criar o arquivo.\n" + sqlex);
}catch(IOException ioex){
JOptionPane.showMessageDialog(null, "Erro ao tentar criar o arquivo.\n" + ioex);
}
}
else JOptionPane.showMessageDialog(null, "Voce não selecionou um diretorio." + "\n O arquivo não foi Gerado.");
}
até ai tudo bem, o arquivo está sendo gerado corretamente e também está sendo compilado.
aí vem o problema:
private void jButtonTesteTelaRelActionPerformed(java.awt.event.ActionEvent evt) {
try {
testaTelaRelatorio(new File(jTextFieldLocal.getText()).toURI().toURL()); //Pega a url do Local Salvo
} catch (MalformedURLException ex) {
Logger.getLogger(DevelopmentHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void testaTelaRelatorio(URL url){
String nomeClasse = jTextFieldNomeClasseTelaRel.getText().trim();
String pacote =jTextFieldPkgSalvo.getText().trim();
URL[] allEnderecos = new URL[1];
URLClassLoader cl =null;
try{
allEnderecos[0] = url;
cl = new URLClassLoader(allEnderecos);
Class classe = cl.loadClass(pacote + "." + nomeClasse);
Object objeto = classe.getConstructors()[0].newInstance(null,true);
JDialog teste = (JDialog) objeto;
teste.setVisible(true);
}catch (ClassNotFoundException cnfex){
JOptionPane.showMessageDialog(null, cnfex);
}catch (InstantiationException iex){
JOptionPane.showMessageDialog(null, iex);
}catch (IllegalAccessException ilegex){
JOptionPane.showMessageDialog(null, ilegex);
}catch (InvocationTargetException itex){
JOptionPane.showMessageDialog(null, itex);
}
}
Erro: CLassNotFoundException telas.FrmRelaTeste
estou fazendo os testes salvando na pasta “C:\Desenvolvimento\DevelopmentTool\src\telas” que é uma pasta dentro do projeto (DevelopmentTool).
Alguem pode me ajudar?