Estou ralando pra descobrir uma forma que funcione em todos os browsers para conseguir acesso direto às portas do client, preciso de acessar as COM1-8, LPT1 e impressoras configuradas na rede, mas tem q ser via client.
Consegui em activeX mas soh funciona em i.e., sendo assim ainda tô ferrado nos meus clients linux e nos que usam firefox.
Fucei muito no w3c e encontrei uma possível saída, são esses tais javaapplets, que pelo que entendi é um programa feito em java (.class) que é baixado pro client e executado,
agora, já descobri que a função de impressão do javaapplet usa o windows, o q eu não quero, então o que quero saber é:
1 - Existe como acessar uma determinada porta de comunicação do client e enviar informações para ela sem o “dedão” do sistema operacional?
2 - Tem como me enviar um exemplo ou pelo menos un artigo?
Espero que vocês consigam me ajudar, Sei q não sou o único com esse pepino, e com certeza vou compartilhar a saída se houver alguma.
Eu odeio ser o cara que dah mas noticias, mas voce acabou de dar de cara com um problemasso. Nao tem absolutamente NENHUM outro jeito que nao envolva fazer uma pagina web acessar o hardware?
Sim, mas costuma dar um trabalho do cao pra conseguir fazer o treco funcionar mesmo em todas as plataformas e browsers, alem de passar por cima do modelo de seguranca dos browsers e JVMs
CV, mas é claro que dá trabalho. Sei que não é coisa trivial porque já participei de vários projetos que faziam isto. Se estou bem lembrado, o Banco Postal para ser portado para Linux precisou de uns 3 dias.
Mas não considero que o uso de applets assinadas seja passar por cima do modelo de segurança do browser. Na minha opinião a exigência de uso de um certificado de preferência de raiz confiável é exatamente reforçar o modelo de segurança. O Activex é que pode passar batido
Acho que entendi porque o CV perguntou se você não tem outra opção. Foi o fato de você nem ao menos saber o que é uma applet.
Este tipo de problema pode ser resolvido usando applets e pode rodar em Windows, Linux, IE, Firefox, Netscape, etc.
[]s
Luca[/quote]
Boa tarde a todos,
Luca,
Não tem problema ser difícil, se resolve meu problema de acesso às portas do client eu vou correr atraz disto, e como vc já fez isto antes, tem como me ensinar como fazer, ou pelo menos me passar algum artigo?
Realmente não conheco nada de criação de applets, e do java soh conheço o javascript, não possuo compilador nenhum de java (tenho j#)
Mas se vc me disser o que eu preciso estudar e que compilador ou ide preciso ter, já ajuda d+.
Preciso de toda a ajuda que puderem me dar, sou autônomo e estou quase perdendo clientes por conta deste problema.
[quote=scottys0]ele poderia usar webservices … mas pra isso é outras 5000 horas de voo em java …
antes que o cv fale de novo …
to rindo até agora … hehehehe[/quote]
scottys0,
Até onde conheço de webservices, eles servem apenas para comunicação entre aplicativos, e eu quero conversar com um dispositivo do client atraves de um webbrowser,
Se tem jeito de usar webservices pra fazer o q eu quero, tem jeito de me mostrar um exemplo???
Para acessar as portas COM e LPT locais do computador, pode-se usar uma biblioteca que siga a especificação javax.comm. Uma delas é da própria Sun e funciona (modo de dizer) em Windows e Solaris Sparc. A outra é do projeto rxtx ( www.rxtx.org ) , e funciona em Linux.
Se você precisa de acessar o seu dispositivo e ele se comporta como uma impressora, no caso LPT, você pode usar o javax.comm tranquilamente. Se ele não se comporta como uma impressora (você quer acessar os bits para fazer alguma outra coisa) o javax.comm não é indicado.
Como a biblioteca javax.comm precisa de copiar uma biblioteca .dll ou .so para o seu path (não classpath), é aconselhável fazer um instaladorzinho - não dá para usar direto.
Referências sobre javax.comm há algumas aqui mesmo neste fórum.
[quote=Glaudiston][quote=scottys0]ele poderia usar webservices … mas pra isso é outras 5000 horas de voo em java …
antes que o cv fale de novo …
to rindo até agora … hehehehe[/quote]
scottys0,
Até onde conheço de webservices, eles servem apenas para comunicação entre aplicativos, e eu quero conversar com um dispositivo do client atraves de um webbrowser,
Se tem jeito de usar webservices pra fazer o q eu quero, tem jeito de me mostrar um exemplo???[/quote]
ai que está … voce pode fazer um aplicativo nativo em java para comunicar como o webservice … quando o cliente fizesse uma requisição onde a resposta do servidor envolveria um acesso a porta … voce (via webservice) enviaria o resultado para um programa no cliente ouvindo em uma porta x … e este por sua vez faria o trabalho … sem ter a necessidade de implementação de applet …
o problema seria para a instalação … se forem muitas maquinas pode ficar uma #$$#@% instalar o programinha client em varias maquinas …
Fernando, usar webservices aqui nao faz o menor sentido (bom, faz tanto sentido quanto usar RMI, sockets, HTTP ou qualquer outro protocolo de comunicacao). O problema nao eh fazer o servidor falar com o cliente, eh fazer o cliente falar com o hardware
Mas um cliente nativo seja ele em java ou não seria melhor para converar com o hardware do que um Applet … este receberia a requisição e faria o trabalho, mais limpo e sem a complicada arte burocratica de assinaturas e reconhecimento de firmas em cartorio dos Applets …
PS. Applet assinado até parece coisa do governo brasileiro … :twisted:
Baixei o tal do javax.comm e o java sdk1.5.0_03 e o netbeans, até funciona legal, pra fazer o hello world e outros tutoriais q encontrei no javacoffeebreak etc, mas com o javax.comm tah difícil,
pra começar, consegui fazer funcionar a BlackBox que controla as portas COM, mas as ParallelBlackBox nada feito.
quando chamo:
java -native ParallelBlackBox
ele retorna:
Error: native VM not supported
já procurei pra tudo quanto é lado na net, unica coisa q achei é que meu sdk tem q estar atualizado, mas acabei de instalar!!!
Outra coisa, nunca consigo carregar os pacotes javax.comm nas classes q crio, sempre dá um erro dizendo q o package naum existe ou a classe naum é valida ou algo assim.
tentei:
package javax.comm
e tambem:
imports javax.comm
não é apenas uma questão dos browsers, nem o javax.comm eu consigo acessar, fiz a instalação do jeito q estava no html, com excessão de uma linha que não funcionou:
C:>\JRE\bin\jre -cp c:\JRE\jre\lib\comm.jar;c:\commapi\samples\Blackbox\BlackBox.jar BlackBox
e nada funciona, se alguem tem alguma dica ou artigo, agradeço
Esse pacote javax.comm foi disponibilizado pela Sun no milênio passado, quando o Papa não estava doente e a Sun não tinha brigado ainda com a Microsoft (agora estão amiguinhas de novo).
Então a documentação supõe que você está usando o JDK 1.1 (tanto é que a implementação deles funciona belezinha com MSJVM!)
Há um HTML cujo nome é JDK12.html (se não me engano), use esse HTML como referência para a instalação e configuração. É terrível, não dá para seguir as instruções exatamente como estão escritas - por exemplo, não existe mais esse parâmetro -native, e outras coisas.
Blz… consegui fazer um class controlar a impressora…
estou quase lá,
agora fiz o applet e está dando o seguinte erro no console do java:
Java Plug-in 1.5.0_03
Using JRE version 1.5.0_03 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Glaudiston
----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
p: reload proxy configuration
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
* * * Rotina de controle de portas de comunicação * * *
Antes de definir a string
Antes de pegar o getParameter
Antes de imprimir a linha
Insert your message here!
Antes do getPortIdentifiers
java.lang.ExceptionInInitializerError
at portcontrol.init(portcontrol.java:44)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at javax.comm.CommPortIdentifier.<clinit>(CommPortIdentifier.java:678)
... 3 more
Acredito que este erro seja por falta de permissão, deve ser o tal problema de assinatura dos applets,
então como assino ele?
/
import javax.comm.;
import java.util.;
import java.lang.;
import java.io.;
import java.awt.;
import java.applet.*;
public class portcontrol extends Applet
{
static CommPortIdentifier CPIone;
static Enumeration Eone;
static ParallelPort Pone;
static OutputStream OSone;
static DataOutputStream DOSone;
private final String PARAM_linha = “linha”;
// Retorna a lista de parametros
public String[][] getParameterInfo()
{
String[][] info = {
{
PARAM_linha, “String”, “String a ser impressa”
},
};
return info;
}
public void init ( )
{
System.out.println(" * * * Rotina de controle de portas de
comunicação * * * ");
System.out.println(“Antes de definir a string”);
String linha;
System.out.println(“Antes de pegar o getParameter”);
linha = getParameter(PARAM_linha);
Label mLabel = new Label ("linha teste ");
add(mLabel);
System.out.println(“Antes de imprimir a linha”);
System.out.println(linha);
System.out.println(“Antes do getPortIdentifiers”);
Eone=CommPortIdentifier.getPortIdentifiers();
System.out.println(“Antes de entrar no while”);
while(Eone.hasMoreElements())
{
CPIone=(CommPortIdentifier)Eone.nextElement();
mode");
}
System.out.println(“unidirectional”);
}
}
try
{
OSone=Pone.getOutputStream();
DOSone=new DataOutputStream(OSone);
/// the data goes out here… this is just a test
byte
DOSone.writeChars(“Testes de impressão”);
DOSone.writeByte(10);
System.out.println(“You have come here”);
}
catch(IOException e)
{
System.out.print(“you are in ioexception”);
e.printStackTrace();
}
}
}[/code]
Se alguem puder me ajudar com a assinatura deste applet agradeço muito.
Já estou muito atrazado para a entrega desta rotina.
No site da SUN tem a nova versão da javax.comm, a 3.0; porém esta versão não tem a API para Windows. Para essa plataforma temos que nos virar com a versão 2.0, que segundo é sabido, é uma versão buguenta!
Eu estou pensando em trabalhar com java e automação industrial… estava esperando mais da SUN nessa área