mit COM-Port drucken

jopo

Mitglied
Hallo, ich habe ein Problem mit Com-Ports und Java.
Zunächst meine Situation:
Ich entwickle derzeit eine Kassensoftware in Java, die mit einem seriellen Bondrucker(Star TSP 613) einen Kassenbon drucken soll. Ich probierte bereits work-arounds, die den Bon als normalen PrintJob generieren und dann den Bon mit dem Win-Druckertreiber ausgeben. Diese Methode war jedoch schleichend langsam und ist keinem Kunden zuzumuten... Also fing ich an, den Drucker direkt am COM1-Port anzusprechen. JAVA2S.COM liefert hier auch eine hilfreiche Testklasse.
Java:
import java.io.*;
import javax.comm.*;
import java.util.*;

public class PortWriter
{
    static Enumeration ports;
    static CommPortIdentifier pID;
    static OutputStream outStream;
    SerialPort serPort;
    static String messageToSend = "message!\n";
    
    public PortWriter() throws Exception{
        serPort = (SerialPort)pID.open("PortWriter",2000);
        outStream = serPort.getOutputStream();
        serPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
        SerialPort.STOPBITS_1,
        SerialPort.PARITY_NONE);
    }    
    
    public static void main(String[] args) throws Exception{
        ports = CommPortIdentifier.getPortIdentifiers();
        
        while(ports.hasMoreElements())
        {
            pID = (CommPortIdentifier)ports.nextElement();
            System.out.println("Port " + pID.getName());
            
            if (pID.getPortType() == CommPortIdentifier.PORT_SERIAL)
            {
                if (pID.getName().equals("COM1"))
                {
                    PortWriter pWriter = new PortWriter();
                    System.out.println("COM1 found");
                }
            }
        }
        outStream.write(messageToSend.getBytes());
    }
}
Wenn es jedoch darum geht, die Klasse in mein Projekt einzubinden hat wirft mein Eclipse nur noch Fehler...
[JAVA=14]Cannot cast from CommPort to SerialPort[/code]
[JAVA=15]The method getOutputStream() is undefined for the type SerialPort[/code]
[JAVA=16]- SerialPort.PARITY_NONE cannot be
resolved
- SerialPort.DATABITS_8 cannot be
resolved
- SerialPort.STOPBITS_1 cannot be
resolved[/code]
Gibt es irgendwelche Erklärungen dafür, dass es in einem bestehenden Projekt nicht klappt, als eigenständiges jedoch schon?
Vielen Dank!
 
Seltsam, ich hab auf den Start TSP 650 gedruckt und das verlief völlig unproblematisch.

Habe den auch nicht gesondert behandelt. Habe darauf wie auf einen Standarddrucker Ausgaben gemacht.
 
ja, das Drucken an sich geht ja auch... das bestreite ich nicht.
Das Problem ist halt die Zeit, die er mit dem Druckertreiber brauch.
wenn ich zB. über cmd
Code:
ECHO BLA>COM1
druck, gehts um einiges schneller, wobei dann die POS-Steuercodes auch nicht funktionieren und jegliche Formatierung unmöglich wird! Diese 2 Methoden will ich aber keinesfalls benutzen, da sie halt wie gesagt entweder zu langsam sind oder keine Formatierungen möglich machen.
Des weiteren is der TSP650 mMn. ein neueres Modell als "mein" Drucker (TSP 613D).
 
Im Endeffekt mach dieser PortWriter den du gefunden hast doch auch nix anderes wie das "echo bla>COM1". D.h. du musst dich dann ebenso um die Formatierung usw kümmern. Ich würde beim "normalen" Drucken bleiben oder mich an den Hersteller wenden warum das so langsam ist. Mal nen andren Rechner probiert?
 
jop, auch schon am andren rechner probiert, mit gleichem ergebnis. Stand der Dinge ist jetz, dass wir uns nen neuen Drucker bestellt haben... wenns da neues gibt werd ich mich melden
 
Hi, ich bin jetzt so weit, dass ich von meiner Maschine drucken kann... Jedoch läuft es auf keinem anderen PC!

Probiere ich, einen Bon zu generieren funktioniert es und ich seh ihn richtig formatiert und mit allen Zeilen in der shell...
Soll er den Bon jedoch drucken wirft er eine NullPointerException!
Java:
public static void main(){
        prep();
        ports = CommPortIdentifier.getPortIdentifiers();
        PrintBon pWriter = null;
        try {
            while (ports.hasMoreElements()) {
                pID = (CommPortIdentifier) ports.nextElement();
                System.out.println("Port " + pID.getName());

                if (pID.getPortType() == CommPortIdentifier.PORT_SERIAL && pID.getName().equals("COM1")) {
                    pWriter = new PrintBon();
                }
            }
            String MSG =
                   z1 + "\n"
                   + z2 + "\n"
                   + z3 + "\n"
                   + z4 + "\n"
                   + z5 + "\n\n"
                   + z6 + "\n\n\n";
            for (int n = 0; n < boninhalt.size(); n++) {
                MSG = MSG + boninhalt.elementAt(n) + "\n";
            }
            
            MSG +=   "\n        Gesammtpreis: EUR " + main.Preis(main.repP(main.Brutto)) + "\n"
                   + "        Inkl 19%MwSt: EUR " + main.repP(main.Steuer) + "\n\n"
                   + "  Vielen Dank fuer Ihren Einkauf!\n\n\n\n\n\n\n\n";
            System.out.println("::BON:: \n"+MSG);   // Druckt den Bon formatiert aus, mit allen Inhalten
            byte[]b0n= MSG.getBytes();
            outStream.write(b0n);   // HIER wirft er die Exception

        }catch (IOException ex) {
                Logger.getLogger(PrintBon.class.getName()).log(Level.SEVERE, null, ex);
        }catch (Exception ex) {
                Logger.getLogger(PrintBon.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            try {
                outStream.close();
            }catch (Exception e) {}
        }
        prepareBon.clear();
    }
Woran liegt das bitte?
 
Ich suche seit geraumer Zeit nach diesem ominösen javax.comm.

Java:
import javax.comm.CommPort;
import javax.comm.CommPortIdentifier;
import javax.comm.NoSuchPortException;
import javax.comm.ParallelPort;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;

Ich versuche Messwerte über die serielle Schnittstelle einzulesen. Bekomme aber keine Kommunikation hin weil ich javax.comm nirgens finde. Ich arbeite mit einem 64Bit Windows.

In euern Codes scheint es zu funktionieren. kann mir jemand diese jar oder java files irgendwie zukommen lassen?

Vielen Dank!

Tommy.
 
Vielen Dank!

Nachdem ich mir comm2.0.3.zip heruntergeladen und instaliert habe hats funktioniert.

Nun habe ich ein neues Problem:

Error loading win32com: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre6\bin\win32com.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

weiss jemand ob es diese win32com.dll auch als 64 bit gibt? Oder muss ich zurück zu 32bit windows?
 

Zurück
Oben