RS232
Aus Programmers Guide
(Unterschied zwischen Versionen)
Roy (Diskussion | Beiträge) |
Roy (Diskussion | Beiträge) |
||
Zeile 19: | Zeile 19: | ||
<source lang="java"> | <source lang="java"> | ||
- | |||
import java.awt.Button; | import java.awt.Button; | ||
Zeile 33: | Zeile 32: | ||
import java.awt.event.WindowAdapter; | import java.awt.event.WindowAdapter; | ||
import java.awt.event.WindowEvent; | import java.awt.event.WindowEvent; | ||
+ | import java.io.File; | ||
+ | import java.io.FileInputStream; | ||
+ | import java.io.FileNotFoundException; | ||
+ | import java.io.FileOutputStream; | ||
+ | import java.io.IOException; | ||
+ | import java.io.InputStream; | ||
+ | import java.io.OutputStream; | ||
import java.util.Enumeration; | import java.util.Enumeration; | ||
- | + | import javax.comm.*; | |
- | import javax.comm. | + | |
- | + | ||
public class Main { | public class Main { | ||
+ | //Variablendeklaration | ||
private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||
- | private Button b1; | + | private static Button b1; |
private static List list; | private static List list; | ||
- | + | static Enumeration<?> ports; | |
- | static Enumeration ports; | + | |
private static CommPortIdentifier pID; | private static CommPortIdentifier pID; | ||
private Frame f; | private Frame f; | ||
Zeile 50: | Zeile 54: | ||
public Main (){ | public Main (){ | ||
- | + | /* | |
- | + | * Kopiervorgang | |
- | + | */ | |
- | + | File win32 = new File(System.getProperty("java.home")+"\\bin\\win32com.dll"); | |
- | + | File prop = new File(System.getProperty("java.home")+"\\lib\\javax.comm.properties"); | |
- | + | if(!win32.isFile()){ | |
- | + | System.out.println(copyFile("win32com.dll",System.getProperty("java.home")+"\\bin\\win32com.dll")); | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
} | } | ||
- | + | if(!prop.isFile()){ | |
- | + | System.out.println(copyFile("javax.comm.properties",System.getProperty("java.home")+"\\lib\\javax.comm.properties")); | |
+ | } | ||
+ | |||
+ | //fenster erzeugen | ||
+ | f = new Frame("verfügbare Ports"); | ||
+ | //was machen wir wenn sich der fensterstatus verändert, also das fenster extern geschlossen wird | ||
+ | f.addWindowListener(new ExitWindowListener()); | ||
+ | // "Null-Layout" setzen | ||
+ | f.setLayout(null); | ||
+ | //neues listenobjekt | ||
+ | list = new List(); | ||
+ | list.setBounds(0, 0, 299, 120); // x, y, breite, höhe | ||
+ | //itemlistener reagiert auf klicks in der liste | ||
+ | list.addItemListener(new ItemListener() { | ||
+ | @Override | ||
+ | public void itemStateChanged(ItemEvent arg0) { //wenn klick auf einen item | ||
+ | System.out.println(list.getItem(Integer.valueOf(arg0.getItem().toString()))); | ||
+ | CommPortIdentifier ci=null; | ||
+ | try { | ||
+ | //versuche den eintrag in der liste zu lesen | ||
+ | ci = (CommPortIdentifier.getPortIdentifier(list.getItem(Integer.valueOf(arg0.getItem().toString())))); | ||
+ | //fenster schließen | ||
f.dispose(); | f.dispose(); | ||
- | + | //lesefenster erzeugen | |
- | + | new ReaderWindow(ci); | |
- | + | } catch (Exception e) { | |
- | + | e.printStackTrace(); | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
} | } | ||
+ | }}); | ||
+ | |||
+ | /* | ||
+ | * Fensterschnulli | ||
+ | */ | ||
+ | b1 = new Button(); | ||
+ | b1.setBounds(110,125,80,20); | ||
+ | b1.setLabel("schliessen"); | ||
+ | b1.setName("Fenster schliessen"); | ||
+ | b1.addActionListener(buttonListener); | ||
+ | f.add(list); | ||
+ | f.add(b1); | ||
+ | DisplayMode dMode = null; | ||
+ | |||
+ | GraphicsConfiguration gc = f.getGraphicsConfiguration(); | ||
+ | GraphicsDevice gd = gc.getDevice(); | ||
+ | dMode = gd.getDisplayMode(); | ||
+ | |||
+ | int width = dMode.getWidth()/2-150; | ||
+ | int height = dMode.getHeight()/2-77; | ||
+ | f.setLocation(width,height); | ||
+ | f.setSize(300,150); | ||
+ | f.setResizable(false); | ||
+ | f.setUndecorated(true); | ||
+ | f.setVisible(true); | ||
+ | /* | ||
+ | * ENDE Fensterschnulli | ||
+ | */ | ||
+ | } | ||
+ | //wenn schließen gedrückt | ||
+ | ActionListener buttonListener = new ActionListener() { | ||
+ | public void actionPerformed(ActionEvent event) { | ||
+ | f.dispose(); | ||
+ | try{ | ||
+ | SimpleRead.getSerialPort().close(); | ||
+ | }catch(Exception ex){} System.exit(0); | ||
} | } | ||
+ | }; | ||
+ | |||
+ | //holen der verfügbaren ports | ||
public static void getPortList(){ | public static void getPortList(){ | ||
ports = CommPortIdentifier.getPortIdentifiers(); | ports = CommPortIdentifier.getPortIdentifiers(); | ||
Zeile 129: | Zeile 142: | ||
} | } | ||
} | } | ||
- | + | //kopieren der dateien | |
+ | public static boolean copyFile(String fileIn,String fileOut) { | ||
+ | |||
+ | try { | ||
+ | File f1 = new File(fileIn); | ||
+ | File f2 = new File(fileOut); | ||
+ | InputStream in = new FileInputStream(f1); | ||
+ | OutputStream out = new FileOutputStream(f2); | ||
+ | byte[] buf = new byte[1024]; | ||
+ | int len; | ||
+ | while ((len = in.read(buf)) > 0) { | ||
+ | out.write(buf, 0, len); | ||
+ | } | ||
+ | in.close(); | ||
+ | out.close(); | ||
+ | return true; | ||
+ | } catch (FileNotFoundException ex) { | ||
+ | return false; | ||
+ | } catch (IOException e) { | ||
+ | return false; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | //die MAIN methode, hier geht alles los | ||
public static void main (String args[]){ | public static void main (String args[]){ | ||
new Main (); | new Main (); | ||
getPortList(); | getPortList(); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | //wenn externes beenden | ||
+ | class ExitWindowListener extends WindowAdapter{ | ||
+ | public void windowClosing(WindowEvent e){ | ||
+ | f.dispose(); | ||
+ | try{ | ||
+ | SimpleRead.getSerialPort().close(); | ||
+ | }catch(Exception ex){} System.exit(0); | ||
+ | } | ||
} | } | ||
} | } | ||
- | |||
</source> | </source> | ||
Das ReaderWindow wird dann aufgerufen sobald ein Element in der Liste geklickt wurde. | Das ReaderWindow wird dann aufgerufen sobald ein Element in der Liste geklickt wurde. |
Version vom 10:35, 25. Aug. 2010
Inhaltsverzeichnis |
Java und die RS232-Schnittstelle
Einbinden der JAVA-COMM-API
1.Schritt
Kopiere win32com.dll C:\Programme\Java\jre6\bin
2. Schritt
Kopiere javax.comm.properties C:\Programme\Java\jre6\lib
3. Schritt
- Kopiere comm.jar C:\Programme\Java\jre6\lib\ext
- Implementiere die comm.jar in Dein Projekt indem du den Build-Path anpasst und die jar mit einfügst
Jetzt kann die API einfach genutzt werden: Beispielprogramm zum Anzeigen aller verfügbaren Ports in einem Frame:
import java.awt.Button; import java.awt.DisplayMode; import java.awt.Frame; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.List; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import javax.comm.*; public class Main { //Variablendeklaration private static final long serialVersionUID = 1L; private static Button b1; private static List list; static Enumeration<?> ports; private static CommPortIdentifier pID; private Frame f; public Main (){ /* * Kopiervorgang */ File win32 = new File(System.getProperty("java.home")+"\\bin\\win32com.dll"); File prop = new File(System.getProperty("java.home")+"\\lib\\javax.comm.properties"); if(!win32.isFile()){ System.out.println(copyFile("win32com.dll",System.getProperty("java.home")+"\\bin\\win32com.dll")); } if(!prop.isFile()){ System.out.println(copyFile("javax.comm.properties",System.getProperty("java.home")+"\\lib\\javax.comm.properties")); } //fenster erzeugen f = new Frame("verfügbare Ports"); //was machen wir wenn sich der fensterstatus verändert, also das fenster extern geschlossen wird f.addWindowListener(new ExitWindowListener()); // "Null-Layout" setzen f.setLayout(null); //neues listenobjekt list = new List(); list.setBounds(0, 0, 299, 120); // x, y, breite, höhe //itemlistener reagiert auf klicks in der liste list.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { //wenn klick auf einen item System.out.println(list.getItem(Integer.valueOf(arg0.getItem().toString()))); CommPortIdentifier ci=null; try { //versuche den eintrag in der liste zu lesen ci = (CommPortIdentifier.getPortIdentifier(list.getItem(Integer.valueOf(arg0.getItem().toString())))); //fenster schließen f.dispose(); //lesefenster erzeugen new ReaderWindow(ci); } catch (Exception e) { e.printStackTrace(); } }}); /* * Fensterschnulli */ b1 = new Button(); b1.setBounds(110,125,80,20); b1.setLabel("schliessen"); b1.setName("Fenster schliessen"); b1.addActionListener(buttonListener); f.add(list); f.add(b1); DisplayMode dMode = null; GraphicsConfiguration gc = f.getGraphicsConfiguration(); GraphicsDevice gd = gc.getDevice(); dMode = gd.getDisplayMode(); int width = dMode.getWidth()/2-150; int height = dMode.getHeight()/2-77; f.setLocation(width,height); f.setSize(300,150); f.setResizable(false); f.setUndecorated(true); f.setVisible(true); /* * ENDE Fensterschnulli */ } //wenn schließen gedrückt ActionListener buttonListener = new ActionListener() { public void actionPerformed(ActionEvent event) { f.dispose(); try{ SimpleRead.getSerialPort().close(); }catch(Exception ex){} System.exit(0); } }; //holen der verfügbaren ports public static void getPortList(){ ports = CommPortIdentifier.getPortIdentifiers(); while (ports.hasMoreElements()) { pID = (CommPortIdentifier) ports.nextElement(); System.out.println("Port " + pID.getName()); if (pID.getPortType() == CommPortIdentifier.PORT_SERIAL) { list.add(pID.getName()); } } } //kopieren der dateien public static boolean copyFile(String fileIn,String fileOut) { try { File f1 = new File(fileIn); File f2 = new File(fileOut); InputStream in = new FileInputStream(f1); OutputStream out = new FileOutputStream(f2); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); return true; } catch (FileNotFoundException ex) { return false; } catch (IOException e) { return false; } } //die MAIN methode, hier geht alles los public static void main (String args[]){ new Main (); getPortList(); } //wenn externes beenden class ExitWindowListener extends WindowAdapter{ public void windowClosing(WindowEvent e){ f.dispose(); try{ SimpleRead.getSerialPort().close(); }catch(Exception ex){} System.exit(0); } } }
Das ReaderWindow wird dann aufgerufen sobald ein Element in der Liste geklickt wurde.