[color=“blue”]Oi pessoal !!! Gostaria de saber se posso utilizar as chamadas ao sistema diretamente pela API do Windows. Sei que isso não é comum mas é que assim o sistema fica bem mais rápido. :idea:
Outra opção seria usar o SWT que também é bem leve mais acho que é um pouco limitado… bom de qualquer forma eu tô curioso pra saber… tem como utilizar a API do windows direto no código Java ? :roll:
Se voce estivesse usando Linux, voce usaria a API do Windows como?
Essa pergunta parece bem besta, mas ela resume de uma forma bem simples um problema BEEEEEEEEM complexo que o Java resolve: portabilidade.
Provavelmente a resposta que vao te dar pra sua pergunta eh “use JNI! use o wrapper JNI-COM tal ou o aquele outro!”, e elas estao corretas… mas a pergunta tah errada!
A pergunta mais certa seria: se eu quero usar a API do Windows, que tipo de drogas eu tou tomando, e como eu me livro delas?
caham
Tah, tah… serio… nao use APIs nativas a menos que vc realmente esteja pouco se lixando pra portabilidade (e voce nao esta ;)), ou que vc tenha recur$o$ suficientes pra fazer a implementacao do mesmo layer nativo pra maioria dos sistemas operacionais por aih.
Se pode usar JNI para acessar a API do Windows. PORÉM, só faça isto para usar funções de baixo nível que NÃO existem em Java. Por exemplo: usar uma DLL padrão para imprimir em uma impressora fiscal ou obter dados da máquina como MAC Address da placa de rede sem usar ipconfig.
Cada vez que você chama JNI, os parâmetros que estão sendo trocados com o método nativo precisam ser convertidos do formato interno de bytecodes Java para o formato interno entendido pela DLL e vice-versa na volta. Esta conversão tem um certo custo em termos de tempo de processamento. Não acredito em grandes otimizações no desempenho da sua aplicação só porque vai chamar direto métodos nativos.
As vezes se ganha muito mais performance com o uso correto de um array de bytes ao invés de uma String e o uso de StringBuffer onde não se pode deixar de usar String. JNI é para quebrar o galho e permitir comunicar com C ou DLLs, não server para performance.
[]s
Luca
S
skyblue
[color=“blue”]Oi pessoal !!! A essa não CV, agora ta me chamando de burro ou de drogado ? :evil: Eu sei perfeitamente que usando a API nativa eu perco completamente a portabilidade.
Pergunta “idiota” tolerancia 0 né ?
Só perguntei isso porque estava curioso pra saber se é possível, assim como em C++ fazer chamadas ao sistema pela API do Windows. Isso se aplica perfeitamente em alguns casos em que a gente sabe que a plataforma vai ser Ruindows até a morte. :roll:
Valeu pessoal !!!
SkyBlue[/color]
ozielneto
Olá skyblue, vamos ao que interessa:
poder fazer não quer dizer que fique bom… Muito cuidado para não interferir nos controles dos J2EE Containers. Ou Seja, se usar JNI, seu ApplicationServer pode apresentar comportamentos de instabilidade…
Por isso não é sugerido o acesso a JNI usando componentes de runtime baseados em J2EE…
Para esse caso, sugiro um WebService escrito dentro das tecnologias Microsoft e ai voce faca o acesso a esse WebService pelos componentes J2EE…
[]'s
Ironlynx
skyblue,não deixe de levar em conta tb a degradação de performance q gerará na sua aplicação…soh usei JNI 1 vez,posso te falar uma coisa,a perda da portabilidade não será seu único problema…
S
skyblue
[color=“blue”]Oi pessoal !!! Valeu, eu sei que é quase uma “gambiarra” utilizar a API do próprio sistema operacional por qualquer motivo… só em casos bem específicos mesmo como vocês disceram, mais como eu já disse foi mais por curiosidade.