Jump to content

dev botao
  • Este tópico foi criado há 3780 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Posted

Nós temos clientes com computador 32 e 64 bits, e para não ficar configurável ou toda vez construir, fiz essa alteração para pegar a dll 32 ou 64 de forma automática:

 

Na interface InteropLib

 

Mudei a linha:

public static final String JNA_LIBRARY_NAME = "ACBrFramework32";

para:

public static final String JNA_LIBRARY_NAME = PegarDLLpelaArqSO.DLL;

e dentro da class adicionei o seguinte método estático:

public static String pegaArq() {
   OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
   return operatingSystemMXBean.getArch().equals("x64")?"ACBrFramework64":"ACBrFramework32";
}
Posted

Olá edsonmoretti,

Primeiramente gostaríamos de agradecer a contribuição, realmente é um fator que complica bastante as configurações de ambiente.

Alteramos apenas um detalhe para detecção da JVM, quando o bean ManagementFactory.getOperatingSystemMXBean().getArch() é acionado, há várias combinações possíveis de retorno dependendo do SO em questão, internamente é acionado System.getProperty("os.arch").

Segundo a Oracle o modelo correto para fazer esta distinção é obtendo a propriedade, System.getProperty("sun.arch.data.model"), conforme pode ser visto no link: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html, questão "When writing Java code, how do I distinguish between 32 and 64-bit operation?".

Devido a isto o código ficou da seguinte forma:

class PegarDLLpelaArqSO {
	private static String library = "";
	public static String pegarArq() {
		if (library.isEmpty()) {                
			library = System.getProperty("sun.arch.data.model").equals("64") 
					? "ACBrFramework64" : "ACBrFramework32";
		}
		return library;
	}
}

A modificação está presente no SVN. Qualquer melhoria que fizer ou achar necessária nos informe para aumentarmos a solidez da biblioteca em java.

 

Att.,

 

José Mauro

Posted

Obrigado, fico feliz em ter contribuído,  em meu caso eu deixei assim:

            return System.getProperty("sun.arch.data.model").equals("64") ? "ACBrFramework64" : "ACBrFramework32";

Pois o método é chamado apenas uma vez, no meu caso.
 

Também gostei pois reduziu os imports, espero mais a frente contribuir mais.

 

Um abraço.

Posted

Sem problema edsonmoretti pode deixar da forma que for coerente em seu contexto. Foi colocado desta forma porque um contexto estático é inicializado a nível somente uma vez dentro da JVM e economiza recursos caso haja mais de um acionamento.

 

Só tome cuidado quando for fazer algum merge com as possíveis melhorias, correções que podem vir na biblioteca para não perder a suas personalizações.

 

Abraço.

  • 1 month later...
Posted (edited)

Tive problemas com Windows 8 x64

Não reconhecia dessa forma:

                    ? "ACBrFramework64" : "ACBrFramework32";

 

Erro:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'bin/ACBrFramsework64': Native library (win32-x86-64/bin/ACBrFramsework64) not found in resource path...

O mesmo ocorria quando colocava o .dll

 

dai alterei o retorno, usando file:

de:

return System.getProperty("sun.arch.data.model").equals("64") ? "bin/ACBrFramework64.dll" : "bin/ACBrFramework32.dll";

para:

return new File(System.getProperty("sun.arch.data.model").equals("64") ? "bin/ACBrFramework64.dll" : "bin/ACBrFramework32.dll").getAbsolutePath();

E com isso resolveu meu problema, não sei se foi um POG, mas resolveu.

Isso só aconteceu no Win8, no 7 e no XP estava normal.

 

Caso alguém tenha o mesmo problema.

Edited by edsonmoretti
  • 6 months later...
Posted

No meu como utilizo linux estou com o seguinte erro.

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'ACBrFramework64': libACBrFramework64.so: cannot open shared object file: Arquivo ou diretório não encontrado
	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)
	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)
	aJava Result: 1

Como faço nessa situação ?

  • 1 month later...
Posted
String apoio = Caixa.aCBrECF.dadosUltimaReducaoZ();

DadosReducaoZClass drz = Caixa.aCBrECF.getDadosReducaoZClass();
if (drz != null) {
   R02.setCOOInicial(Integer.valueOf(drz.getNumeroCOOInicial()));
}

Bom dia!

 

edsonmoretti, a dll ACBrFramework64 não terá mais suporte?

 

 

Aproveitando, estou tentando recuperar o COO_INICIAL da ultima redução z mas não traz resultado. Sempre vem uma string vazia "".

Alguém esta conseguindo recuperar esta informação?

  • 4 weeks later...
Posted

String apoio = Caixa.aCBrECF.dadosUltimaReducaoZ();

DadosReducaoZClass drz = Caixa.aCBrECF.getDadosReducaoZClass();
if (drz != null) {
   R02.setCOOInicial(Integer.valueOf(drz.getNumeroCOOInicial()));
}

Bom dia!

 

edsonmoretti, a dll ACBrFramework64 não terá mais suporte?

 

 

Aproveitando, estou tentando recuperar o COO_INICIAL da ultima redução z mas não traz resultado. Sempre vem uma string vazia "".

Alguém esta conseguindo recuperar esta informação?

 

Isso mesmo.

Vc ta chamando o metodo dessa forma:

instanciando..

ativando....

ecf.dadosUltimaReducaoZ();

String coo = ecf.getDadosReducaoZClass().getCoo();

 

vlw; -)

  • Este tópico foi criado há 3780 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.