JVM Launcher Error

javix

Mitglied
Hello!

Ich habe ein Problem. Jedes mal wenn ich ein .jar file ausführe, kommt die gleiche Fehlermeldung:

Java Virtual Machine Launcher
Could not find the main class: [package].[projectname]. Program will exit.

oder

Could not find the main class: [package]. Program will exit.

(ohne [ ])
Der Fehler taucht nicht nur bei selbst erstellten Programmen auf.

Ich verwende Win7 x64, die neueste JRE, 7.02 JDK und Netbeans.
Ich habe schon alle Programme deinstalliert, die etwas mit Java zu tun hatten, meinen PC rebootet und alles neu installiert (JRE+JDK). Doch der Fehler blieb erhalten

Bitte um Hilfe!

mfg
Armin
 
kontrollier mal die java und die javac version in der konsole

Java:
java -version

Java:
javac -version

und netbeans kenn ich nicht aber es müssten über die gleich versionen sein
 
java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)

javac 1.7.0_02
 
zeig mal deine main klasse

Das Problem tritt auch bei heruntergeladenen .jar Dateien vom Internet auf. Es kann also meiner Meinung nach nicht an meiner main class liegen.


Wenn ich das Programm mit Netbeans ausführe, funktioniert es. Es geht nur nicht wenn ich die .jar Datei ausführe.

Hier noch eine Klasse bei der das Problem z. B. auftritt:

Java:
package bruch;
public class Bruch
{
	private long zähler;
	private long nenner;

	public static void main(String[] arg)
	{
		Bruch b1,b2,b3;
		b1=new Bruch(1,5);
		b2=new Bruch(3,10);
		System.out.print(b1.equals(b2));
		System.out.print(b1.toString());
		b3=b1.subBruch(b2);
		b1.showBruch();
		System.out.print(" + ");
		b2.showBruch();
		System.out.print(" = ");
		b3.showBruch();
		System.out.print("\n");
	}

	public Bruch()
	{
		this.zähler=0;
		nenner=1; //^= this.nenner=1;
	}

	public Bruch(long z)
	{
		this.zähler=z;
		this.nenner=1;
	}

	public Bruch(long z,long n)
	{
		this.zähler=z;
		this.nenner=n;
	}

	public Bruch addBruch(Bruch b)
	{
		Bruch h=new Bruch();
		h.nenner=this.nenner*b.nenner;
		h.zähler=this.zähler*b.nenner+b.zähler*this.nenner;
		h.kürzeBruch();
		return h;
	}

	public Bruch subBruch(Bruch b)
	{
		Bruch h=new Bruch();
		h.nenner=this.nenner*b.nenner;
		h.zähler=this.zähler*b.nenner-b.zähler*this.nenner;
		h.kürzeBruch();
		return this;
	}

	public Bruch mulBruch(Bruch b)
	{
		Bruch h=new Bruch();
		h.nenner=this.nenner*b.nenner;
		h.zähler=this.zähler*b.zähler;
		h.kürzeBruch();
		return this;
	}

	public Bruch divBruch(Bruch b)
	{
		Bruch h=new Bruch();
		h.nenner=this.nenner*b.zähler;
		h.zähler=this.zähler*b.nenner;
		h.kürzeBruch();
		return this;
	}

	public void kürzeBruch()
	{
	/*
		long og=this.z�hler;
		if(this.nenner<this.z�hler)
		{
			og=this.nenner;
		}
		//og=kleinerer Wert (Z�hler oder Nenner) - von og bis 2 wir nach ggt gesucht!
		*/
		for(long i=this.zähler;i>=2;i--)
		{
			if(this.nenner%i==0 && this.zähler%i==0)
			{
				zähler=zähler/i;
				nenner=nenner/i;
			}
		}
	}

	public void showBruch()
	{
		System.out.print(this.zähler+"/"+this.nenner);
	}

	public boolean equals(Object obj)
	{
		boolean equ=false;
		if(obj!=null)
		{
			if(obj instanceof Bruch)
			{
				Bruch h=(Bruch)obj;
				h.kürzeBruch();
				this.kürzeBruch();
				equ=(h.zähler==this.zähler)&&(h.nenner==this.nenner);
			}
		}
		return equ;
	}

	public String toString()
	{
		return new String(this.zähler+"/"+this.nenner);
	}
}
 
Erstatz dass hier bei dir:

Java:
public static void main(String[] arg)


mit:

Java:
public static void main(String[] args) {
und probier nochmal!
 
Erstatz dass hier bei dir:

Java:
public static void main(String[] arg)


mit:

Java:
public static void main(String[] args) {
und probier nochmal!

Was soll das denn bringen?

obs n der main nun arg oder args heisst ist doch dem Aufrufer SCh*** egal! Kannst die Variable auch Violetta nennen wenn du magst.

Das das auch bei heruntergeladenen Java Applikationen auftritt ist seltsam. Funktioniert Eclipse (hat eine private JRE)? Wenn ja würde ich sagen liegts an deiner Java Installation (Probier mal die aktuelle 1.6.x) Vielleicht ist ja wirklich noch ein Bug in der 7er.
 
Ich kann mit eclipse projekte machen und ausführen. Oder was meinst du?
Wo krieg ich die 1.6er?

Wenn Eclipse läuft läuft auch das mit Eclipse ausgelieferte JRE (Eclipse hat ein eigenes).

Wenn also heruntergeladene jars nicht laufen, hat das was mit der in deinem System installierten Runtime zu tun. Teste das mit der PATH Variablen. Falls das nichts bringt installier mal die aktuelle 1.6.x Version anstatt der Java7.
 
Ok... geht doch nicht so richtig... der Fehler kommt nichtmehr aber das Programm startet nicht. (nur kurzers aufflackern eines Konsolen Fensters)
 
Hey,

passiert das nur wenn du die .jar mit doppelklick startest ?

oder funktioniert es wenn du es über cmd java -jar aufrufst ?

mfg

Wenn ich es mit der Konsole aufrufe funktioniert es. Also es taucht das gewünschte Fenster auf. Mit doppelklick flachert nur kurz ein konsolenfenster auf. Die jar datei funktioniert an einen anderen gerät auch mit doppelklick.
 
Also es taucht das gewünschte Fenster auf. Mit doppelklick flachert nur kurz ein konsolenfenster auf.

Dann ist ja alles korrekt. Das Programm läuft einfach durch und wenn es fertig ist, dann schließt es das Konsolenfenster wieder. Wenn es um dein gepostetes Programm geht, dann läuft dieses auch so schnell durch, dass du davon nur ein aufflackern siehst.

Um das zu ändern kannst du beispielsweise in das Ende deiner main-Methode sowas schreiben.

Java:
import java.util.Scanner;

public class Test{
  public static void main(String[] args){
	System.out.println("Hallo Welt!");
	System.out.println("Enter q to quit");
	Scanner scanner = new Scanner(System.in);
	
	scanner.nextLine();
  }
}

Das sorgt dann dafür das das Programm, wenn es durchgelaufen ist (Hier ein Hallo Welt!), auf eine Eingabe wartet, sodaß das Fenster geöffnet bleibt, bis die Eingabe ausgeführt wurde.

Eine weitere Möglichkeit ist
Java:
import java.util.Scanner;

public class Test{
  public static void main(String[] args) throws Exception {
	System.out.println("Hallo Welt!");
	Thread.currentThread().suspend();
  }
}

Damit kann das Programm gegen Ende angehalten werden.
Wird es von der Konsole gestartet, kann man es mit CTRL-C beenden. Oder wenn es per Doppelklick gestartet wurde, das Fenster wegklicken.
 

Zurück
Oben