Olá pessoal!
Estou desenvolendo um sistema que faz a comunicação com a porta paralela.
Depois de algumas pesquisas, eu achei uma api(parport) que utiliza métodos nativos em C para essa comunicação com a porta.
Só que ao rodar o programa, é exibida a mensagem de erro:
Exception in thread “AWT-EventQueue-0” java.lang.UnsatisfiedLinkError: no parport in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:992)
at projete.communication.ParallelPort.(ParallelPort.java:75)
at projete.communication.ParallelPortCommunication.(ParallelPortCommunication.java:13)
at projete.control.GameControl.(GameControl.java:22)
at projete.ProjeteView.jMenuItem1ActionPerformed(ProjeteView.java:511)
at projete.ProjeteView.access$500(ProjeteView.java:17)
at projete.ProjeteView$4.actionPerformed(ProjeteView.java:437)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.AbstractButton.doClick(AbstractButton.java:302)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1041)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Já copiei o arquivo parport.dll p/ as pastas bin do jdk e jre, como descrito em alguns tutorias que estive lendo a respeito desta api.
Obs.: Estou utilizando o S.O. WinXP e programando com o NetBeans!
Alguem pode me dizer oq ainda falta fazer para que funcione corretamente minha apliacação?
Obrigado.
Coloca o trecho do codigo da chamada da dll
Como disse acima achei uma api(parport) que faz essa comunicacao. Apesar de ser uma classe em Java, parport acessa métodos nativos, que executam funções em C para a leitura e escrita. Além da classe em java, a biblioteca contém os seguintes arquivos: parport_ParallerPort.h parport_ParallerPort.c onde estao os metodos ecessados pela classe java!
Deve ser atravez deste codigo em C que esta fazendo a chamada à dll!?!?!?!?!
Será que devo adicionar estes arquivos ao meu path?
Quando aparece uma mensagem dessas é porque a JVM não encontrou uma biblioteca nativa do sistema operacional (no caso, a parport.dll, se fosse para linux seria a parport.so).
Para que a JVM encontre-a, vc tem 3 alternativas (no caso do windows):
[list]inserir o argumento abaixo na linha de comando[/list]
-Djava.library.path="pasta\onde\se\encontra\a\biblioteca\parport.dll"
[list]colocar esse arquivo na pasta c:\windows\system32[/list]
[list]colocar esse arquivo na pasta JRE_HOME\bin, onde JRE_HOME é a pasta onde está instalada a JVM usada pelo compilador[/list]
Posso ter errado nas pastas, mas o conceito é esse: avise para a JVM onde está sua biblioteca nativa ou coloque ela numa pasta onde ela localize automaticamente.
[quote=Rodrigo Vieira Pinto]Quando aparece uma mensagem dessas é porque a JVM não encontrou uma biblioteca nativa do sistema operacional (no caso, a parport.dll, se fosse para linux seria a parport.so).
Para que a JVM encontre-a, vc tem 3 alternativas (no caso do windows):
[list]inserir o argumento abaixo na linha de comando[/list]
-Djava.library.path="pasta\onde\se\encontra\a\biblioteca\parport.dll"
[list]colocar esse arquivo na pasta c:\windows\system32[/list]
[list]colocar esse arquivo na pasta JRE_HOME\bin, onde JRE_HOME é a pasta onde está instalada a JVM usada pelo compilador[/list]
Posso ter errado nas pastas, mas o conceito é esse: avise para a JVM onde está sua biblioteca nativa ou coloque ela numa pasta onde ela localize automaticamente.
[/quote]
vlw kra!!!
Era isso msm! estava faltando colocar o .dll na pasta system23 do windows.
Aquele erro d antes ja nao acontece mais!!!
Agora é exibida outra msm de erro:
Exception in thread “Thread-3” java.lang.UnsatisfiedLinkError: readOneByte
at projete.communication.ParallelPort.readOneByte(Native Method)
at projete.communication.ParallelPort.read(ParallelPort.java:37)
at projete.communication.ParallelPortCommunication.run(ParallelPortCommunication.java:24)
at java.lang.Thread.run(Thread.java:595)
To achando q tenho que colocar os aquivos .C no meu classpath, mas nunca utilizei arquivos .C juntamente com .java!
Como farei isso?
alquem sabe me dizer como faço para adicionar o pacote parport em meu projeto???
Bom, isso aí já é consultoria. 
Brincadeiras a parte, se eu não me engano, essa mensagem quer dizer que o método nativo foi encontrado na biblioteca nativa (no caso, o método readOneByte() não foi encontrado no parport.dll).
Eu já cheguei a usar essa biblioteca, mas faz muito tempo. Acho que passei por esse problema tbm.
Pra resolver isso… :? …peguei os códigos-fonte em C e recompilei a DLL, usando o Dev-C, a DLL do java (acho que é a jvm.dll) e muita, muita paciência.
Essa é mais fácil. Coloque o parport.class ou o parport.jar (não sei como eles estão distribuindo essa biblioteca hj em dia) no CLASSPATH da aplicação, como outra biblioteca qualquer.
intao kra o problema eh q eu coloquei o parport.class no mesmo pacote ond esta uma outra classe q criei responsavel por chamar os metodos read e write do parport.class!!! sacou? eu copiei p/ mesma pasta das demais classes minhas!!!
E tem outra coisa… tem 2 arquivos, um .c e outro .h! Q sao codigos em C q contem metodos q a classe parport utiliza!!
Esses arquivos em C q eu nao coloquei no meu classpath!
Gostaria d saber como faço p/ adicionar esses arquivos no meu classpath, ou melhor, p/ qual pasta devo copiar???
obrigado!
Se eu não me engano, o pacote vem com um arquivo .java. Por enquanto coloque ele junto com os arquivos .java da sua aplicação. Quando vc compilar, o .class é gerado automaticamente.
Esses são os arquivos para a geração da DLL. Não tem nada a ver com o código java e não devem ser inseridos juntamente com o código java
Se vc quiser entender melhor o motivo desses códigos em C existirem, estude um pouco de [google]Java Native Interface[/google]
Complicou né? Pois é. Esse é um assunto chato mesmo. Reserve bastante tempo.
Essa biblioteca deveria funcionar quando vc simplesmente adicionou a dll no local correto e inserir o .java juntamente com os .java da sua aplicação. Tente fazer isso, e procure no google sobre erros dessa biblioteca.
xará… deu certo aqui o pacote!!!
nao ta dando mais aquele erro, porém, hehehe lá vem… quando rodo minha aplicação é exibida outra mensagem de erro:
An unexpected error has been detected by HotSpot Virtual Machine:
EXCEPTION_PRIV_INSTRUCTION (0xc0000096) at pc=0x030b1057, pid=3812, tid=2988
Java VM: Java HotSpot™ Client VM (1.5.0_06-b05 mixed mode, sharing)
Problematic frame:
C [parport.dll+0x1057]
An error report file with more information is saved as hs_err_pid3812.log
If you would like to submit a bug report, please visit:
Alguns dizem q é um erro do parport, mas acho q eu nao estou utilizando corretamente o userport!!!
vc tem ideia do que pode ser??
obrigado.