ola a todos !!!
eu aproveitei o codigo do link acima (by Lucas Bellin), pra implementar uma necessidade, porem, qdo eh executado pelo NetBeans, funciona certo. agora qdo executo pelo Distr, nao funciona.
O que nao funciona ??
o
location.isDirectory()
soh reconhece executado pelo NetBenas ; e nao pelo Distr.
chamada:
try {
BuscaPackageFuncao( Thread.currentThread().getContextClassLoader() , "MntCadCli" );
} catch (URISyntaxException ex) { //Logger.getLogger(SystMnu.class.getName()).log(Level.SEVERE, null, ex);
}
public void BuscaPackageFuncao( ClassLoader classLoader , String cFuncao ) throws URISyntaxException {
if ( classLoader instanceof URLClassLoader ) {
URL[] urls = ( (URLClassLoader) classLoader ).getURLs();
for ( URL url : urls ) {
File location = null;
try {
location = new File( url.toURI() );
} catch ( URISyntaxException e ) {
break; //return "" ;
}
if ( location.isDirectory() ) { // O PROBLEMA ESTA AQUI (pelo NetBeans funciona ; pelo Dist, nao).
//JOptionPane.showMessageDialog(null, location );
PegaClassDaPasta( null, location , cFuncao );
}
}
}
}
private void PegaClassDaPasta( String parent, File location , String cFuncao ) {
File[] files = location.listFiles();
for ( File file : files ) {
StringBuilder builder = new StringBuilder();
builder.append( parent ).append( "." ).append( file.getName() );
String path = ( parent == null ? file.getName() : builder.toString() );
if ( file.isDirectory() ) {
PegaClassDaPasta( path, file , cFuncao );
}
else if ( file.getName().endsWith( ".class" ) ) {
int p = path.indexOf( "$" );
if ( p != -1 ) {
path = path.substring( 0, p );
}
if ( path.contains( "class" ) ) {
//JOptionPane.showMessageDialog(null, path );
}
}
String wComp1 = "."+cFuncao.trim().toUpperCase()+".";
String wComp2 = path.toUpperCase();
if ( wComp2.contains(wComp1) ) {
cPackageFuncao = path;
break;
}
}
}
se alguem puder ajudar, fico agradecido: MUITO OBRIGADO !!!