Erste Schritte Java Timer

Hi,

ich habe folgendes Problem.
Ich hab eine erste Javafunktion geschrieben. Diese Funktion schaut in einem Ordner nach Dateien und verarbeitet diese dann.
Das Problem ist nun, dass die Funktion nur einmal durchläuft. Ich würde sie aber gerne automatisch alle 8 Stunden ablaufen lassen, um zu schauen ob neue Dateien in den Ordner gekommen sind.
Ich bin ein zemlicher Anfänger und habe leider keine Idee wie man das umsetzten kann;( Gibt es vll die Möglichkeit einen Timer zu integrieren, der die Mainmethode immer wieder aufruft?

viele Grüße!
Björn
 
Also ich habe das mit dem timer jetzt versucht.. allerdings klappt das noch nicht so wie ich es gerne hätte...
ich habe das Beispiel von Firephoenix ausprobiert und eingebaut.. ich kann aber nicht einfach in die class Task den rest meiner Funktionalitäten packen.

ich habe euch mal den Code zur veranschaulichung angefügt.. Danke für eure Hilfe!!

Java:
package XMLEinlesen;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.util.*;

class Task   extends TimerTask  
{
  
	public void run()  
  {
    System.out.println( "Make my day." );
  }
}


public class FSReader 
{
	
	
	  public static void main( String[] args ) throws Exception
	  {
	  	Timer timer = new Timer();
	  		 	  
		Document doc = new SAXBuilder().build( "Host_Data.xml" );
	    Element Info = doc.getRootElement();	    
	    Element Host =Info.getChild( "HostData" );
	    
	    
	    for(int j = 0; j < Host.getChildren().size(); j++) 	    {
	    	
	    	Element HostInfo = (Element)Host.getChildren("Host").get(j);
	    	Element Vulns = HostInfo.getChild("VulnsFound");
	        	
	    	if (Vulns.getChildren().size()!=0	    	{
	    		ReaderFunctions.XMLCreatorFSVuluns(HostInfo,Vulns, Info);
	    	}
	    }
	    timer.schedule  ( new Task(), 1000, 10000 );
	  }
}
 
Also hie rnocheinmal der Ursprüngliche code der alle 8 Stunden ausgeführt werden soll...

Danke für die Hilfe!
Java:
package XMLEinlesen;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;



public class FSReader 
{	
	  public static void main( String[] args ) throws Exception
	  {
	 	 	  
		Document doc = new SAXBuilder().build( "Host_Data.xml" );
	    Element Info = doc.getRootElement();	    
	    Element Host =Info.getChild( "HostData" );
	    
	    
	    for(int j = 0; j < Host.getChildren().size(); j++) 
	    {
	    	
	    	Element HostInfo = (Element)Host.getChildren("Host").get(j);
	    	Element Vulns = HostInfo.getChild("VulnsFound");
	        	
	    	if (Vulns.getChildren().size()!=0)
	    	{
	    		ReaderFunctions.XMLCreatorFSVuluns(HostInfo,Vulns, Info);
	    	}
	    }
	   
	  }
}
 
habe noch nicht soviel mit TimerTask gemacht, aber so sollte es funzen...kA, probiere dein Glück

Java:
public class FSReader extends TimerTask {
	public static void main(String[] args) throws Exception {
		Timer timer = new Timer();
		timer.schedule(new FSReader(), 1000, 10000);
	}

	@Override
	public void run() {
		Document doc = new SAXBuilder().build("Host_Data.xml");
		Element Info = doc.getRootElement();
		Element Host = Info.getChild("HostData");

		for (int j = 0; j < Host.getChildren().size(); j++) {

			Element HostInfo = (Element) Host.getChildren("Host").get(j);
			Element Vulns = HostInfo.getChild("VulnsFound");

			if (Vulns.getChildren().size() != 0) {
				ReaderFunctions.XMLCreatorFSVuluns(HostInfo, Vulns, Info);
			}
		}
	}

}
 
Danke für deine Hilfe!

Leider geht das auch noch nicht..
ich bekomme jetzt bei Zeile 9 also bei :
Java:
Document doc = new SAXBuilder().build("Host_Data.xml");
den Fehler : "Unhandled exception type JDome Exception" und in Zeile 19 also bei
Java:
ReaderFunctions.XMLCreatorFSVuluns(HostInfo, Vulns, Info);
einen ähnlichen Fehler nämlich: "Unhandled exception type Exception"

Man ich verzweifele noch :noe:;🙂noe:
 
ändere deine Zeile 9 in
Java:
Document doc = new SAXBuilder().build(new File ("Host_Data.xml));

um wie Michael gesagt die Exception abfangen
 
Danke für eure Hilfe.. das ganze hat jetzt geklappt ;-D
leider komme ich jetzt direkt zum nächsten Probelm was wohl mit der permanenten Ausführung des JavaCode zu tun hat.
Es wird jetzt die gewünschte Datei erzeugt und an mein gewünschtes Ziel gespeichert. Ich kann jetzt aber während das Programm durch den Timer permanent läuft die Datei nicht weiter verarbeiten. Windows bringt dann den Fehler, dass die Datei in Benutzung sei...;(

Mein Code lautet nun so:
Java:
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import java.io.IOException;
import java.util.*;

public class FSReader extends TimerTask 
	{
    
	public static void main(String[] args) throws Exception 
    {
        Timer timer = new Timer();
        timer.schedule(new FSReader(), 1000, 10000);
    }
 
    @Override
    public void run()  
    {
        Document doc;
		try {
			doc = new SAXBuilder().build("Host_Data.xml");
	        Element Info = doc.getRootElement();
	        Element Host = Info.getChild("HostData");
	        
	        for (int j = 0; j < Host.getChildren().size(); j++) {
	        	 
	            Element HostInfo = (Element) Host.getChildren("Host").get(j);
	            Element Vulns = HostInfo.getChild("VulnsFound");
	 
	            if (Vulns.getChildren().size() != 0) {
	                try {
						ReaderFunctions.XMLCreatorFSVuluns(HostInfo, Vulns, Info);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
	            }
	        }
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
 
}
 
Dann besteht wohl irgendwo noch ein Zugriff auf die Datei den man schließen muss ;-)
keine Ahnung ob der SaxBuilder Möglichkeiten dazu bietet - vermutlich schon.

Alternativ könnte man doch einfach das Programm als Task durch das Betriebssystem ausführen lassen.
 

Zurück
Oben