Eu to tentando configurar o classpath para eu pode acessar a porta serial via java.
Segui diversos manuais mas não to conseguindo usuar os as classes necessarias
class Enumeration
class CommPortIdentifier
como eu faço para usa-las? eu copiei os arquivos para as pasta bin e lib cada um na sua correta…
sao 3 arquivos para copiar 1 na pasta bin e 2 na pasta lib… mas mesmo assim nao funciona.
eu tentei dar um import java.* mesmo assim nao funciono…
o que estou fazendo errado?
Eu to mexendo com serial a algum tempinho utilizando javax.comm ou RXTX… pois bem, para a javax.comm funcionar corretamente, utiliza esta classe aqui abaixo, ela vai fazer a instalacao correta dos arquivos, lembrando que todos os 3 arquivos tem que estar na mesma pasta que o .class executado.
import java.io.*;
/**
* Validates that the javax.comm package has been properly installed on this JRE.
*/
public class InstallComm {
public static final String javaPath = System.getProperty("java.home");
public static final String sep = System.getProperty("file.separator");
public static final String dllPath = javaPath+sep+"bin"+sep;
public static final String propPath = javaPath+sep+"lib"+sep;
public static final String jarPath = javaPath+sep+"lib"+sep+"ext"+sep;
public InstallComm() {
}
/**
* Returns true if all of the javax.comm package files are properly installed
*/
public static boolean validate() {
String javaPath = System.getProperty("java.home");
System.out.println("javaPath: "+javaPath);
String sep = System.getProperty("file.separator");
File dll = new File(javaPath+sep+"bin"+sep+"win32com.dll");
File prop = new File(javaPath+sep+"lib"+sep+"javax.comm.properties");
File jar = new File(javaPath+sep+"lib"+sep+"ext"+sep+"comm.jar");
return dll.exists() && prop.exists() && jar.exists();
}
/**
* Installs the javax.comm files into their correct paths
*/
public static void install() {
String javaPath = System.getProperty("java.home");
String sep = System.getProperty("file.separator");
String bin = javaPath+sep+"bin"+sep;
String lib = javaPath+sep+"lib"+sep;
File dll = new File("c:"+sep+"win32com.dll");
File prop = new File("c:"+sep+"javax.comm.properties");
File jar = new File("c:"+sep+"comm.jar");
File new_dll = new File(javaPath+sep+"bin"+sep+"win32com.dll");
File new_prop = new File(javaPath+sep+"lib"+sep+"javax.comm.properties");
File new_jar = new File(javaPath+sep+"lib"+sep+"ext"+sep+"comm.jar");
System.out.println("Copying "+dll.getName()+" to "+new_dll.getPath());
copyFile(dll, new_dll);
System.out.println("Copying "+prop.getName()+" to "+new_prop.getPath());
copyFile(prop, new_prop);
System.out.println("Copying "+jar.getName()+" to "+new_jar.getPath());
copyFile(jar, new_jar);
}
private static boolean copyFile(File source, File result) {
try {
System.out.println("cmd.exe /C copy \""+source.getPath()+"\" \""+result.getAbsolutePath().replaceAll(result.getName(), "")+"\"");
System.out.println(Runtime.getRuntime().exec("cmd.exe /C copy \""+source.getPath()+"\" \""+result.getAbsolutePath().replaceAll(result.getName(), "")+"\""));
return true;
} catch (IOException ioe) {
try {
System.out.println("command.com /C copy \""+source.getPath()+"\" \""+result.getAbsolutePath().replaceAll(result.getName(), "")+"\"");
System.out.println(Runtime.getRuntime().exec("cmd.exe /C copy \""+source.getPath()+"\" \""+result.getAbsolutePath().replaceAll(result.getName(), "")+"\""));
return true;
} catch (IOException ioe2) {
System.out.println("An error occured: " + ioe2.getMessage());
return false;
}
}
}
public static void main(String[] args) {
if(!validate()) {
System.out.println("javax.comm not installed. Installing files...");
install();
} else {
System.out.println("javax.comm installed. ");
}
}
}
Eu peguei este codigo a algum tempo e fiz algumas alteracoes nele, como ele num é meu originalmente podem usar como quiserem…
Após fazer a instalação correta, rode o programa abaixo e veja se funciona corretamente…
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import javax.comm.CommPortIdentifier;
public class PortasDisponiveis {
private Enumeration listaDePortas;
public PortasDisponiveis() {
listaDePortas = CommPortIdentifier.getPortIdentifiers();
}
public boolean isEmpty() {
return !listaDePortas.hasMoreElements();
}
public List<String> listarPortas() {
List<String> lista = new ArrayList<String>();
int i = 0;
while(listaDePortas.hasMoreElements()) {
CommPortIdentifier port = (CommPortIdentifier) listaDePortas.nextElement();
lista.add(port.getName());
System.out.println("[" + i + "] " + port.getName());
i++;
}
return lista;
}
public static void main(String[] args) {
System.out.println("<--- CommPortIdentifier TESTE --->");
PortasDisponiveis portas = new PortasDisponiveis();
//System.out.println(portas.isEmpty());
portas.listarPortas();
System.out.println("<--- FINALIZADO --->");
}
}
Esse ultimo codigo eu fiz, mas pode usar como quiser, se econtrar algum problema avisa ai…
espero ter ajudado! Abracos!
Boa sorte com a porta serial… mas mais chato ainda é mexer com a paralela…
espero que me ajude… mas deu esse erro na execulção da classe de instalaçaõ
Exception in thread “main” java.lang.NoClassDefFoundError: InstallComm (wrong na
me: install/InstallComm)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
eu tirei os packet e deu isso
javaPath: C:\Arquivos de programas\Java\jre1.6.0_01
javax.comm not installed. Installing files…
Copying win32com.dll to C:\Arquivos de programas\Java\jre1.6.0_01\bin\win32com.d
ll
cmd.exe /C copy “c:\win32com.dll” "C:\Arquivos de programas\Java\jre1.6.0_01\bin
"
java.lang.ProcessImpl@c17164
Copying javax.comm.properties to C:\Arquivos de programas\Java\jre1.6.0_01\lib\j
avax.comm.properties
cmd.exe /C copy “c:\javax.comm.properties” “C:\Arquivos de programas\Java\jre1.6
.0_01\lib”
java.lang.ProcessImpl@1fb8ee3
Copying comm.jar to C:\Arquivos de programas\Java\jre1.6.0_01\lib\ext\comm.jar
cmd.exe /C copy “c:\comm.jar” "C:\Arquivos de programas\Java\jre1.6.0_01\lib\ext
"
java.lang.ProcessImpl@61de33
soh uma coisa… acho q nao pois estou na faculdade nao tenho permissao nessa pasta… eu instalei o java no desktop que eh onde eu tenho permisao…
o javac tah funcinando nessa pasta.
PortasDisponiveis.java:5: package javax.comm does not exist
import javax.comm.CommPortIdentifier;
^
PortasDisponiveis.java:12: cannot find symbol
symbol : variable CommPortIdentifier
location: class PortasDisponiveis
listaDePortas = CommPortIdentifier.getPortIdentifiers();
^
PortasDisponiveis.java:23: cannot find symbol
symbol : class CommPortIdentifier
location: class PortasDisponiveis
CommPortIdentifier port = (CommPortIdentifier) listaDePo
rtas.nextElement();
^
PortasDisponiveis.java:23: cannot find symbol
symbol : class CommPortIdentifier
location: class PortasDisponiveis
CommPortIdentifier port = (CommPortIdentifier) listaDePo
rtas.nextElement();
^
4 errors
eu to vendo isso… e peguei os arquivos e congigurei o classpath assim
C:\Documents and Settings\guiga\Desktop\java\jdk\lib\comm.jar
mas qdo eu execulto da isso
Exception in thread “main” java.lang.NoClassDefFoundError: PortasDisponiveis/
ss
em todos os arquivos java… qualquer um…
q q tah dando errado agora?