# Fehler: "Exception in thread "main" java.lang.NoSuchMethodError"



## esmeralda (13. Aug 2009)

Erstmal hallo Allerseits,

nachdem ich eine sehr lange Weile an diesem blöden Fehler hänge und nach googeln und ewigem Suchen immer noch keine Lösung gefunden habe, muss ich mich nun hier hin wenden. Ich würde mich sehr freuen, wenn mir jemand den Fehler in meinem Code aufzeigen könnte, damit ich nicht in Versuchung gerate meinen Kopf gegen die Wand zu hauen .

Also - los zur Fehlerbeschreibung:

Ich programmiere in Eclipse und bekomme nun die folgende Fehlermeldung beim Kompilieren:



> Exception in thread "main" java.lang.NoSuchMethodError: create_init_rule.issetRule()V
> at allis.main(allis.java:89)



Ich verstehe den Fehler einfach nicht, da die Methode doch eigentlich da ist??? Oder welchen Denkfehler hab ich gemacht? Es tut mir Leid, dass ich einfach nicht selber auf die Lösung komme - das ist mein erster größerer Programmierversuch in Java...

Hier wäre der dazugehörige Quellcode:


```
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import java.io.*;

/*************************
 **Klasse, um die erste Regel für ALLIS zu erstellen
 *************************/
class create_init_rule {	
  
	  //erstellt eine XML-Datei mit einer Regel für NP.
	  static void createXML() {
	  //XML-Dokument erstellen - keine Umlaute!
	  Element root = new Element ("RULESET");
	  Element rule = new Element ("RULE");
	  rule.setAttribute("S", "NP");
	  Element literal = new Element ("N");
	  root.addContent(rule);
	  rule.addContent(literal);
	  Document doc = new Document (root);
	  
	  try {
		  // XML Datei schreiben - mit Umbruechen
		  XMLOutputter outp = new XMLOutputter(Format.getPrettyFormat()); 
		  BufferedWriter bw = new BufferedWriter(new FileWriter("ruleset_np.xml"));
		  outp.output(doc, bw);
	  }
	  catch (IOException e){
		  System.err.println(e);
	  }
  }
  
	  static void issetRule() {
	  if (new File("ruleset_np.xml").exists()) {
		  System.out.println( "Der Regelsatz besteht bereits." );
	  }
	  else {
		  createXML();
		  System.out.println( "Es wurde ein neuer Regelsatz erstellt mit einer initialen Regel." );
	  }
  }	 
} 


/*************************
 **Klasse, um JDOM zu erstellen und zu verarbeiten
 *************************/
class compute_jdom {
	String[] testdata;
	
	compute_jdom(String[] datei) {
		testdata = datei;
	}

	String create_jdom(){
		if (testdata.length == 0) {
    	      System.out.println("Usage: java ElementLister URL"); 
    	      return "Fehler bei JDOM Erstellung";
    	    } 
    	     
    	    //Das neue JDOM Element wird erzeugt
    	    SAXBuilder builder = new SAXBuilder(); 
    	    return "JDOM Erstellung erfolgreich";
	}

}  


class allis {
   /*************************
    **HAUPTPROGRAMM
    **************************/	
	public static void main(String[] args) {
		//Variablen
		String[] adresse = {"cd25.xml"}; 
		int theta = 80;
		
		//JDOM-Erstellung
		compute_jdom a = new compute_jdom(adresse);
		//compute_jdom.create_jdom();
		System.out.println(a.create_jdom());
		
		//Prüfen, ob ein Regelsatz besteht, wenn nein wird ein initialer estellt
		create_init_rule.issetRule();

	}

}
```

Das Programm ist natürlich noch nicht komplett fertig, aber der Stand soweit sollte eigentlich ausreichen, dass es wenigstens ohne Fehler läuft.

Schon mal vielen Dank für Eure Hilfe. 

Viele Grüße
esmeralda


----------



## Dissi (13. Aug 2009)

edit:*brainfault*


----------



## Murray (13. Aug 2009)

Dissi hat gesagt.:


> ```
> ->new<-create_init_rule.issetRule();
> ```


Da die Methode statisch ist, sollte das nicht notwendig sein.

Wenn die Methode wirklich nicht existieren würde, müsstes man ja bereits einen Compile-Fehler erhalten - hier ist aber ein Laufzeitfehler gepostet.

Insofern tippe ich mal auf ein CLASSPATH-Problem - zur Laufzeit wird eine alte der Version der Klasse gefunden, in der es die Methode (noch) nicht gibt.


----------



## Dissi (13. Aug 2009)

klaro, war blind ; )


----------



## Dissi (13. Aug 2009)

Ähm
evt Klassen großschreiben. Aber nur Vermutung, ich teste es mal.


----------



## Dissi (13. Aug 2009)

Murray hat gesagt.:


> Da die Methode statisch ist, sollte das nicht notwendig sein.
> 
> Wenn die Methode wirklich nicht existieren würde, müsstes man ja bereits einen Compile-Fehler erhalten - hier ist aber ein Laufzeitfehler gepostet.
> 
> Insofern tippe ich mal auf ein CLASSPATH-Problem - zur Laufzeit wird eine alte der Version der Klasse gefunden, in der es die Methode (noch) nicht gibt.



Bei mir geht es. Denke mal Murray hat recht.


----------



## esmeralda (13. Aug 2009)

Danke für die schnellen und vielen Tipps. Werd das gleich mal umsetzen. Wie kann ich denn ein CLASSPATH-Problem beheben? Ist mir bisher nie untergekommen...


----------



## Murray (13. Aug 2009)

Arbeitest Du mit einer IDE (z.B. Eclipse)?


----------



## esmeralda (13. Aug 2009)

Ja, ich arbeite auf einem Mac OSX 10.4 mit Eclipse 3.4.2.
Hab total vergessen den Fehler mit einzustellen, den Eclipse mir in Zeile 14 anzeigt.



> The type create_init_rule is already definded.



Vielleicht hilft das weiter?

In Eclipse musste ich ansonsten noch unter CLASSPATH xerces.jar und jdom.jar einbinden, damit JDOM funktioniert.


----------



## Atze (13. Aug 2009)

"The type create_init_rule is already definded." hört sich an, als ob es die klasse schon gibt. kann es sein, dass die doppelt vorkommt in deinem projekt? vielleicht wählt er dann die alte und dort gibts die methode nicht? oder wirklich der code einer alten datei, wie wäre es mit projekt->clean, vielleicht neu builden, refreshen oder sowas


----------



## esmeralda (13. Aug 2009)

Danke! Das wars! Ich hatte in meinem Projekt wirklich eine weitere Klasse mit dem Namen. Andere Klasse umbenannt und der Fehler war beseitigt. Und ich hab echt schon an meinem Verstand gezweifelt ;-).  

Danke auf jeden Fall noch mal an alle ^_^.


----------



## Erik1980 (9. Nov 2010)

Hallo, 

Ich habe das selbe Problem wie im alten Thema. Ich benutze die neueste Java Software und einige Test-Programme gehen andere nicht. Folgender JAVA code geht nicht:


```
/* CalculatorApplet2.java */

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class CalculatorApplet2
extends Applet
implements ActionListener
{
  private TextField tf;

  public void init()
  {
    setBackground(Color.lightGray);
    setLayout(new GridLayout(2, 1));
    tf = new TextField("777");
    add(tf);
    Panel p = new Panel();
    for (int i = 1; i <= 1000; i *= 10) {
      Button b = new Button("+" + i);
      b.addActionListener(this);
      p.add(b);
    }
    add(p);
  }

  public void actionPerformed(ActionEvent event)
  {
    String cmd = event.getActionCommand();
    int n1 = Integer.parseInt(tf.getText());
    int n2 = Integer.parseInt(cmd.substring(1));
    tf.setText("" + (n1 + n2));
  }
}
```
Getestet habe ich mit der DOS Eingabeaufforderung:

javac CalculatorApplet2 - läuft ohne Fehlermeldung
java CalculatorApplet2 - thread “main” java.lang.NoSuchMethodErrors

Vielen Dank für die Hilfe.


----------



## SlaterB (9. Nov 2010)

ein Applet kannst du nicht mit java-Aufruf starten, 
das gehört kompliziert in eine Webseite eingefügt und über Browser geöffnet oder so,


----------



## Erik1980 (9. Nov 2010)

/* Auto2.java */

public class Auto2
implements Groesse
{
  public String name;
  public int    erstzulassung;
  public int    leistung;
  public int    laenge;
  public int    hoehe;
  public int    breite;

  public int laenge()
  {
    return this.laenge;
  }

  public int hoehe()
  {
    return this.hoehe;
  }

  public int breite()
  {
    return this.breite;
  }
}

Hier bekomme ich den gleichen Fehler. Selbes Problem?

Vielen Dank
Erik


----------



## Gast2 (9. Nov 2010)

Du hast da halt keine main methode?!
Was willsten da starten?


----------



## Erik1980 (9. Nov 2010)

Vielen Dank, bin Ampfänger und ich dachte falsch installiert!


----------

