I
Iglo
Gast
Hallo!
Ich bin neu hier hab aber eine Frage die mich schon ein paar Tage beschäftigt und auf die mir bis jetzt noch keiner eine antwort geben konnte... :bahnhof:
Ich habe ein kleines Programm geschrieben das mithilfe von javax.comm.* über den Seriellen Port auf ein Nokia 30 Modem zugreift. An dieses werden mithilfe von Outputstreams Befehle gesendet. Das funktioniert auch alles sehr gut.
Nach Programmende läuft aber der Prozess "java.exe" weiter. Um mein Problem zu beheben muss dieser aber unbedingt geschlossen werden weil sonst das Programm das die .jar Datei aufruft sonst nicht weiterarbeitet bzw. ein timeout bekommt.
Ich rufe die .jar datei über eine .bat Datei auf (java -jar "SMSAlert.jar"). :wink:
Bitte helft mir das java.exe wegzumachen
Hier der Source Code:
Danke schonmal im voraus
mfg Iglo
Ich bin neu hier hab aber eine Frage die mich schon ein paar Tage beschäftigt und auf die mir bis jetzt noch keiner eine antwort geben konnte... :bahnhof:
Ich habe ein kleines Programm geschrieben das mithilfe von javax.comm.* über den Seriellen Port auf ein Nokia 30 Modem zugreift. An dieses werden mithilfe von Outputstreams Befehle gesendet. Das funktioniert auch alles sehr gut.
Nach Programmende läuft aber der Prozess "java.exe" weiter. Um mein Problem zu beheben muss dieser aber unbedingt geschlossen werden weil sonst das Programm das die .jar Datei aufruft sonst nicht weiterarbeitet bzw. ein timeout bekommt.
Ich rufe die .jar datei über eine .bat Datei auf (java -jar "SMSAlert.jar"). :wink:
Bitte helft mir das java.exe wegzumachen
Hier der Source Code:
Code:
package smsalert;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.comm.CommDriver;
import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;
/**
* @author Thomas Welspacher 2008
* @version 1.0
* Contact: [email]kaeptn.iglo@hotmail.com[/email]
*/
public class Main {
private static String nl = "\r\n";
private static String cmgf = "AT+CMGF=1";
private static String csca = "AT+CSCA=\"+436640501\",145";
private static String cpinready = "AT+CPIN?";
public static void main(String[] args) throws IOException {
try {
SerialPort port = null;
try {
System.setSecurityManager(null);
String wantedPortName = "COM1";
//Treiber initialisieren
try {
String driverName = "com.sun.comm.Win32Driver"; //
CommDriver commDriver = (CommDriver) Class.forName(driverName).newInstance();
commDriver.initialize();
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
CommPortIdentifier portId = null; // wird gesendet wenn port gefunden
//Seriellen Port finden
while (portIdentifiers.hasMoreElements()) {
CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement();
if (pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(wantedPortName)) {
portId = pid;
break;
}
}
if (portId == null) {
System.err.println("Kann den Seriellen Port nicht finden " + wantedPortName);
System.exit(1);
}
System.out.println("\nSerieller Port " + wantedPortName + " gefunden!");
//Port öffnen
try {
port = (SerialPort) portId.open(
"SMS Alert", // Name der Applikation die den Port Benutzt
10000 // timeout von 10 Sekunden
);
System.out.println("Serieller Port " + wantedPortName + " wurde geoeffnet!");
} catch (PortInUseException e) {
System.err.println("Port wird bereits benutzt von: " + e);
System.exit(1);
}
//Seriellen Port initialisieren
port.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
//In und Output Streams erzeugen
BufferedReader is = null; //auch mit Stream möglich
PrintStream os = null;
try {
is = new BufferedReader(new InputStreamReader(port.getInputStream()));
} catch (IOException e) {
System.err.println("Konnte Input Stream nicht oeffnen. Nur schreiben moeglich!");
is = null;
}
os = new PrintStream(port.getOutputStream(), true, "ISO-8859-1");
OutputStream ostr = port.getOutputStream();
System.out.println("Input und Output Stream geoeffnet!\n");
//Pincode aus pin.txt importieren und zusammenfügen
DataInputStream pinInput = new DataInputStream(new FileInputStream("pin.txt"));
BufferedReader pinReader = new BufferedReader(new InputStreamReader(pinInput));
String code = pinReader.readLine();
String pin = "AT+CPIN=\"" + code + "\"";
//Abfragen ob PIN Code bereits eingegeben ist (AT+CPIN?)
String pinCheck, pinCheckOK;
ostr.write(cpinready.getBytes());
Thread.sleep(250);
ostr.write(nl.getBytes());
Thread.sleep(250);
ostr.flush();
System.out.println("Echo " + is.readLine());
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
pinCheck = is.readLine();
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
pinCheckOK = is.readLine();
System.out.println("Response " + pinCheck);
System.out.println("Response " + pinCheckOK + "\n");
if (pinCheck.equals("+CPIN: SIM PIN") && pinCheckOK.equals("OK")) {
//PIN Code Eingabe (AT+CPIN="code")
ostr.write(pin.getBytes());
Thread.sleep(250);
ostr.write(nl.getBytes());
Thread.sleep(250);
ostr.flush();
System.out.println("Echo " + is.readLine());
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
System.out.println("Response " + is.readLine() + "\n");
}
//Text Modus setzen (AT+CMGF=1)
ostr.write(cmgf.getBytes());
Thread.sleep(250);
ostr.write(nl.getBytes());
Thread.sleep(250);
ostr.flush();
System.out.println("Echo " + is.readLine());
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
System.out.println("Response " + is.readLine() + "\n");
//Nummer der Kurzmitteilungszentrale setzen (AT+CSCA="+436640501",145) Nummer=A1 145=Nummer beginnt mit + 129= Nummer beginnt mit Ziffer
ostr.write(csca.getBytes());
Thread.sleep(250);
ostr.write(nl.getBytes());
Thread.sleep(250);
ostr.flush();
System.out.println("Echo " + is.readLine());
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
System.out.println("Response " + is.readLine() + "\n");
//Nummern und Nachricht Importieren (numbers.txt bzw. message.txt)
DataInputStream numberInput = new DataInputStream(new FileInputStream("numbers.txt"));
BufferedReader numberReader = new BufferedReader(new InputStreamReader(numberInput));
ArrayList<String> numberList = new ArrayList<String>();
String numb = null;
DataInputStream messageInput = new DataInputStream(new FileInputStream("message.txt"));
BufferedReader messageReader = new BufferedReader(new InputStreamReader(messageInput));
String alertMessage = messageReader.readLine();
while ((numb = numberReader.readLine()) != null) {
numberList.add(numb);
}
//Wenn Nummer und Nachricht vorhanden:
if (alertMessage != null) {
System.out.println("Nachricht: " + alertMessage);
if (numberList.isEmpty() == true) {
System.out.println("Keine Empfaenger in numbers.txt eingetragen!\n");
} else {
System.out.println("Nachricht wird gesendet an:\n");
for (int j = 0; j < numberList.size(); j++) {
System.out.println(numberList.get(j).toString());
System.out.println("");
}
//Nummern Eingabe + senden der Nachricht
for (int i = 0; i < numberList.size(); i++) {
String cmgs1 = "AT" + "+" + "CMGS=\"" + numberList.get(i) + "\"\r";
String cmgs2 = alertMessage + "\032";
ostr.write(cmgs1.getBytes());
Thread.sleep(250);
ostr.write(cmgs2.getBytes());
Thread.sleep(250);
ostr.flush();
//Sendevorgang
String sendLine1, sendLine2, sendLine3, sendLine4;
sendLine1 = is.readLine();
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
sendLine2 = is.readLine();
sendLine3 = is.readLine();
is.readLine();//Steuerzeichen lesen; werden nicht ausgegeben
sendLine4 = is.readLine();
System.out.println("Echo " + sendLine1);
System.out.println("Response " + sendLine2);
System.out.println("Response " + sendLine3);
System.out.println("Response " + sendLine4);
}
}
} else {
System.out.println("Kein Nachrichteninhalt in message.txt!\n");
}
//Schließen von Streams und Port
if (is != null) {
is.close();
numberInput.close();
numberReader.close();
messageInput.close();
messageReader.close();
pinInput.close();
pinReader.close();
System.out.println("\nInput Streams geschlossen!");
}
if (os != null) {
os.close();
ostr.close();
System.out.println("Output Streams geschlossen!");
}
if (port != null) {
port.close();
System.out.println("Serial Port geschlossen!\n");
}
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
System.exit(0);
}
}
Danke schonmal im voraus
mfg Iglo