Main Methode wird nicht aufgerufen

k_g

Mitglied
Hallo mein programm ist fast am ende, jedoch funktioniert irgendeine sache nicht. ich hoffe jemand findet einen fehler. und zwar : main methode zum senden der anfrage + auslesen der datei werden nie aufgerufen. und wenn main zu constructor > fehler durch exeptions.
hier sind meine 3 klassen:

klasse 1 connector
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JOptionPane;


public class Connector {

	private static String startDatum;
	private static String endDatum;
	static String data;
	
	
	//public Connector()	{
		
	//}
	
	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException, IOException {
		
		startDatum = JOptionPane.showInputDialog(null,"Bitte StartDatum eingeben","Datumseingabe",JOptionPane.PLAIN_MESSAGE);
		endDatum = JOptionPane.showInputDialog(null,"Bitte EndDatum eingeben","Datumseingabe",JOptionPane.PLAIN_MESSAGE);
		
		
		System.out.println("XML");
			
		data = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">  <soap:Body>    <getMessungenAktuell xmlns=\"http://pegelonline.wsv.de/webservices/version2_3/2007/10/31\">      <parameterName>WASSERSTAND ROHDATEN</parameterName>      <messstellenNummern></messstellenNummern>      <messstellenNamen>FRANKFURT OSTHAFEN</messstellenNamen>      <start>" +
		    		"" +
		    		startDatum +
		    		"</start>      <ende>" +
		    		endDatum + //format:   2011-06-16T14:00:00
		    		"</ende>    </getMessungenAktuell>  </soap:Body></soap:Envelope>";
		    String hostname = "www.pegelonline.wsv.de";
		    int port = 80;
		    InetAddress addr = InetAddress.getByName(hostname);

		    System.out.println(addr.toString());
		    
		    Socket socket = new Socket(addr, port);


		    String path = "/webservices/version2_3/2007/10/31/PegelonlineWebservice";
		    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
			System.out.println("Writer");
		    wr.write("POST " + path + " HTTP/1.0\r\n");
		    wr.write("Content-Length: " + data.length() + "\r\n");
		    wr.write("Content-Type: text/plain; charset=UTF-8\r\n");
		    wr.write("SOAPAction: getMessungenAktuell\r\n");
		    wr.write("\r\n");

		    wr.write(data);
		    wr.flush();
		    
			System.out.println("Write");
			
		    BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		    String line;
		    while ((line = rd.readLine()) != null) {
		      System.out.println(line);
		    }
			System.out.println("While");
		    wr.close();
		    rd.close();
		    socket.close();
		    
		    
		    //System.out.println("TEST: " + datum);
		  }

	public static String getStartDatum() {
		return startDatum;
	}

	public void setStartDatum(String startDatum) {
		this.startDatum = startDatum;
	}

	public static String getEndDatum() {
		return endDatum;
	}

	public void setEndDatum(String endDatum) {
		this.endDatum = endDatum;
	}


}

klasse 2 programm

Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
 * @author Konstantin
 *
 */
public class Programm extends JFrame implements ActionListener	{

	private final int BREITE = 350;
	private final int HOEHE = 250;
	private final int X0 = 200;
	private final int Y0 = 200;
	
	private JButton berechnenB	= new JButton("Berechnen");
	private JButton endeB		= new JButton("Beenden");
	
	private JPanel flaecheP = new JPanel();
	
	private JLabel eingabeMusterL	= new JLabel("Eingabemuster:");
	private JLabel eingabeMusterT	= new JLabel("Beispiel (2011-06-16T14:00:00) ");
	
	private JLabel pegelL = new JLabel("Pegel:");
	private JLabel pegelT = new JLabel("Frankfurt Osthafen");
	
	private JLabel startL = new JLabel("Start Zeit: ");
	private JTextField startT = new JTextField("");
	
	private JLabel endeL = new JLabel("Ende Zeit: ");
	private JTextField endeT = new JTextField("");
	
	private JLabel leer1 = new JLabel("----------------------"); //abstandhalter
	private JLabel leer2 = new JLabel("----------------------"); //abstandhalter
	
	private JLabel standL = new JLabel("Stand (in m²):");
	private JLabel standT = new JLabel("00000000000");
	
	
	Connector connector = new Connector();
	XML xml = new XML();
	
	public Programm()	{
		super("Wasserstand");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(BREITE, HOEHE);
		setLocation(X0, Y0);
		setMaximumSizes();
		implementActionlistener();
		flaecheAnordnen();
		setResizable(true);
		setVisible(true);
	}

	
	//main Methode
	public static void main(String[] args) {
		new Programm();
	}

	private void setMaximumSizes()	{
		pegelT.setMaximumSize(new Dimension(200,20));
		startT.setMaximumSize(new Dimension(200,20));
		endeT.setMaximumSize(new Dimension(200,20));
	}
	
	private void flaecheAnordnen()	{
		
		add(flaecheP);
		
		// Anordnung vereinbaren
		GroupLayout dgLayout = new GroupLayout(flaecheP);
		flaecheP.setLayout(dgLayout);
	
		// voreingestellte Lücken verwenden
		dgLayout.setAutoCreateGaps(true);
		dgLayout.setAutoCreateContainerGaps(true);

		// senkrechte Gruppierung vereinbaren
		dgLayout.setVerticalGroup(dgLayout.createSequentialGroup().
				addGroup(dgLayout.createParallelGroup().
					addComponent(eingabeMusterL).addComponent(eingabeMusterT)).
				addGroup(dgLayout.createParallelGroup().
					addComponent(pegelL).addComponent(pegelT)).
				addGroup(dgLayout.createParallelGroup().
					addComponent(startL).addComponent(startT)).
				addGroup(dgLayout.createParallelGroup().
					addComponent(endeL).addComponent(endeT)).
				addGroup(dgLayout.createParallelGroup().
					addComponent(standL).addComponent(standT)).
				addGroup(dgLayout.createParallelGroup().
					addComponent(leer1).addComponent(leer2)).
				addGroup(dgLayout.createParallelGroup().
					addComponent(berechnenB).addComponent(endeB))
				);

		// waagerechte Gruppierung vereinbaren
		dgLayout.setHorizontalGroup(dgLayout.createSequentialGroup().
			addGroup(dgLayout.createParallelGroup().
				addComponent(eingabeMusterL).addComponent(pegelL).addComponent(startL).addComponent(endeL).
				addComponent(standL).addComponent(leer1).addComponent(berechnenB)).
			addGroup(dgLayout.createParallelGroup().
				addComponent(eingabeMusterT).addComponent(pegelT).addComponent(startT).addComponent(endeT).
				addComponent(standT).addComponent(leer2).addComponent(endeB))
		);
	}
		
	private void implementActionlistener() {
		berechnenB.addActionListener(this);
		endeB.addActionListener(this);
	}
	
	@Override
	public void actionPerformed(ActionEvent event) {
		if(event.getSource() == berechnenB)	{
			
			String start = startT.getText().toString();
			String ende = endeT.getText().toString();
			
			Connector connector = new Connector();
			
			connector.setStartDatum(startT.getText().toString());
			connector.setEndDatum(endeT.getText().toString());
			//main methode zum senden der anfrage + auslesen der datei werden nie aufgerufen
			//wenn main zu constructor > fehler durch exeptions
			
			
			String stand = xml.getlastMesswert();
			standT.setText(stand);
			
			XML xml = new XML();
			
			System.out.println("Start: " + Connector.getStartDatum());
			System.out.println("Ende: " + Connector.getEndDatum());
			System.out.println("Stand: " + stand);
		}
		else if(event.getSource() == endeB)	{
			dispose();
			System.exit(0);
		}
	}
}

klasse 3 xml

Java:
/**
 * 
 */

/**
 * @author Konstantin 
 *
 */

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
 
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
 
                
public class XML {

	private static String lastWert = "error";
	
	public XML	() {
		
	}

	public static void main (String[]args) throws JDOMException, IOException 
	{
		
		String filename = "response.xml";

		Document doc = new SAXBuilder().build(filename);
		Element envolpe = doc.getRootElement();
		Element body = envolpe.getChild("Body", envolpe.getNamespace());
		Namespace ns = Namespace.getNamespace("ns","http://pegelonline.wsv.de/webservices/version2_3/2007/10/31");
		List<Element> anfrage = body.getChildren("getMessungenAktuellResponse",ns);
		
		for (Element element : anfrage) {
			List<Element> antworten = element.getChildren("getMessungenAktuellReturn", ns);
			for (Element e : antworten) {
				String messwert = e.getChildText("messwert", ns);
				System.out.println(messwert.trim());
				String zeitpunkt = e.getChildText("zeitpunkt", ns);
				System.out.println(zeitpunkt.trim());
				
				lastWert = messwert;
				
			}
		}
		
		System.out.println("----: " + lastWert);
	}
	public String getlastMesswert()	{
		return lastWert;
	}
	
	public void setlastMesswert(String lastWert)	{
		this.lastWert = lastWert;
	}
}

Danke
 

Marco13

Top Contributor
Nur überflogen... und so einen Satz wie
und wenn main zu constructor > fehler durch exeptions.
:autsch: ... ach, egal: Im zweifelsfall kannst du die main in den Konstruktor packen (was du mit diesem Satz vermutlich meintest) und einen einen try/catch block drumwickeln. Das ist natürlich immernoch Unfug, aber statt der main sollte es eben eine spezielle Methode vom connector geben, die das macht, was jetzt in der main steht, und die von außen aufgerufen werden kann.
 

Murray

Top Contributor
Erwartest du, dass durch den Aufruf eines Konstuktors einer Klasse die dort definierte main-Methode ausgeführt wird? Das ist nicht der Fall.

Wenn du also in Klasse 2 in actionPerformed
Java:
new XML();
aufrufst, dann passiert nicht mehr und nicht weniger, als dass der Default-Konstruktor der Klasse XML aufgerufen wird. Und der macht - genau gar nichts.
 
Zuletzt bearbeitet:

k_g

Mitglied
hab meine xml klasse jetzt so geändert
was mache ich beim try und catch weil davon habe ich gar keine ahnung

Java:
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
 
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
 
                
public class XML {

	 private static String lastWert = "error";
	 
	 public XML () {
	  try {
	   bauen();
	  } catch (JDOMException e) {
	   // TODO Auto-generated catch block
	   e.printStackTrace();
	  } catch (IOException e) {
	   // TODO Auto-generated catch block
	   e.printStackTrace();
	  }
	 }

	 public static void bauen() throws JDOMException, IOException 
	 {
		
		String filename = "response.xml";

		Document doc = new SAXBuilder().build(filename);
		Element envolpe = doc.getRootElement();
		Element body = envolpe.getChild("Body", envolpe.getNamespace());
		Namespace ns = Namespace.getNamespace("ns","http://pegelonline.wsv.de/webservices/version2_3/2007/10/31");
		List<Element> anfrage = body.getChildren("getMessungenAktuellResponse",ns);
		
		for (Element element : anfrage) {
			List<Element> antworten = element.getChildren("getMessungenAktuellReturn", ns);
			for (Element e : antworten) {
				String messwert = e.getChildText("messwert", ns);
				System.out.println(messwert.trim());
				String zeitpunkt = e.getChildText("zeitpunkt", ns);
				System.out.println(zeitpunkt.trim());
				
				lastWert = messwert;
				
			}
		}
		
		System.out.println("----: " + lastWert);
	}
	public String getlastMesswert()	{
		return lastWert;
	}
	
	public void setlastMesswert(String lastWert)	{
		this.lastWert = lastWert;
	}
}
 

Marco13

Top Contributor
EDIT: Ja, da war ich schon zu langsam... morgen mehr dazu...

Ja, du KÖNNTEST sowas machen wie
Code:
      public Connector()    {
           try
           {
               Connector.main(null); // HACK
           }
           catch (Exception e) // HACK
           {
               e.printStackTrace();
           }
        
      }
aber das ist eben grob gehackt. Das, was jetzt in der Connector.main steht, sollte in einer "normalen" Methode vom Connector stehen, und von Programm aus sollte man dann eben
Connector connector = new Connector();
connector.normaleMethod();
machen - aber das wäre auch nur der erste Schritt...
 

k_g

Mitglied
das funktioniert trotzdem so nicht
die anfrage wird nicht gesendet und somit bekomme ich auch keine antwort und die anfrage wird nicht aktualisiert
 

XHelp

Top Contributor
Was genau passiert denn? Was genau steht auf der Konsole? Bis zu welchem Punkt wird ausgeführt? Was erwartest du, dass da passiert? Und das alles am besten mit verständlichen Sätzen :)
Da war auch die Rede von "Ich Tarzan > Du Jane, Sie Methode > Es Exception". Welche Exception?
 

k_g

Mitglied
ich hab jetzt hier was geändert
und zwar so
Java:
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
 
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
 
                
public class XML {

	private static String lastWert = "error";
	
	public XML	() {
		try {
			bauen();
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void bauen() throws JDOMException, IOException 
	{
		
		String filename = "C:/Users/loni/Desktop/BA-Konst/response.xml";//Hier pfad ändern

		Document doc = new SAXBuilder().build(filename);
		Element envolpe = doc.getRootElement();
		Element body = envolpe.getChild("Body", envolpe.getNamespace());
		Namespace ns = Namespace.getNamespace("ns","http://pegelonline.wsv.de/webservices/version2_3/2007/10/31");
		List<Element> anfrage = body.getChildren("getMessungenAktuellResponse",ns);
		
		for (Element element : anfrage) {
			List<Element> antworten = element.getChildren("getMessungenAktuellReturn", ns);
			for (Element e : antworten) {
				String messwert = e.getChildText("messwert", ns);
				System.out.println(messwert.trim());
				String zeitpunkt = e.getChildText("zeitpunkt", ns);
				System.out.println(zeitpunkt.trim());
				
				lastWert = messwert;
				
			}
		}
		
	}
	public String getlastMesswert()	{
		return lastWert;
	}
	
	public void setlastMesswert(String lastWert)	{
		this.lastWert = lastWert;
	}
}

und 2 klasse
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JOptionPane;


public class Connector {

	private static String startDatum;
	private static String endDatum;
	static String data;
	
	
	public Connector(String startDatum, String endDatum)	{
		Connector.startDatum = startDatum;
		Connector.endDatum = endDatum;
		
		try {
			bauen();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public void bauen() throws UnknownHostException, IOException {
		
		
		
		System.out.println("XML");
			
		data = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">  <soap:Body>    <getMessungenAktuell xmlns=\"http://pegelonline.wsv.de/webservices/version2_3/2007/10/31\">      <parameterName>WASSERSTAND ROHDATEN</parameterName>      <messstellenNummern></messstellenNummern>      <messstellenNamen>FRANKFURT OSTHAFEN</messstellenNamen>      <start>" +
		    		"" +
		    		startDatum +
		    		"</start>      <ende>" +
		    		endDatum + //format:   2011-06-16T14:00:00
		    		"</ende>    </getMessungenAktuell>  </soap:Body></soap:Envelope>";
		    String hostname = "www.pegelonline.wsv.de";
		    int port = 80;
		    InetAddress addr = InetAddress.getByName(hostname);

		    System.out.println(addr.toString());
		    
		    Socket socket = new Socket(addr, port);


		    String path = "/webservices/version2_3/2007/10/31/PegelonlineWebservice";
		    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
			System.out.println("Writer");
		    wr.write("POST " + path + " HTTP/1.0\r\n");
		    wr.write("Content-Length: " + data.length() + "\r\n");
		    wr.write("Content-Type: text/plain; charset=UTF-8\r\n");
		    wr.write("SOAPAction: getMessungenAktuell\r\n");
		    wr.write("\r\n");

		    wr.write(data);
		    wr.flush();
		    
			System.out.println("Write");
			
		    BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		    String line;
		    while ((line = rd.readLine()) != null) {
		      System.out.println(line);
		    }
			System.out.println("While");
		    wr.close();
		    rd.close();
		    socket.close();
		    
		    
		    
		  }

	public static String getStartDatum() {
		return startDatum;
	}

	public void setStartDatum(String startDatum) {
		this.startDatum = startDatum;
	}

	public static String getEndDatum() {
		return endDatum;
	}

	public void setEndDatum(String endDatum) {
		this.endDatum = endDatum;
	}


}

Werte werden von textfeldern Start und Ende korrekt an Connector übergeben. Textfeld Stand wird der richtige wert aus der XML (der letzte der liste) zugewiesen.
die konsole übergibt die richtigen werte an die seite, über den XML wert. das problem hierbei ist: die xml datei wird nicht erneuert, mit neuen werten gespeichert.
 

Marco13

Top Contributor
Nee, der String ist ja schon XML. Wenn du sowas hast wie
Code:
String s = "<someTag>someData</someTag>";
kannst du das mit sowas schreiben wie
Code:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("datei.xml")));
bw.writeLine(s);
bw.close();
(aus'm Kopf)
 

Ähnliche Java Themen

Neue Themen


Oben