Class-datei ausführen

hallo,
ich habe vor kurzem angefangen, java zu lernen und gestern eine kleine applikation geschrieben. sie funktioniert einwandfrei und ich kann sie auch problemlos kompilieren. allerdings läuft sie dann nur solange, bis ich sie beende. eine ausführbare datei (wie sie zum beipiel bei c++ erstellt wird), kann ich nirgends finden.

aus diesem grund folgende frage: wie kann ich dies realisieren? ich habe irgendetwas von .jar-dateien gelesen, aber ehrlich gesagt nicht verstanden.

ich freue mich über jede art von hilfe und bedanke mich recht herzlich!

In Java hast du in gewisser Weise 4 Arten von Ausführbaren Sachen, wobei 2 Sonderfälle sind, die Basis bilden immer die Class-Dateien.
Die beiden Sonderfälle sind die Applet, welche für die Einbettung in Webseiten gedacht sind und die andere sind die Servlets welche für Webanwendungen gedacht sind.
Für dich sind die beiden anderen interessant.
Du kannst jede Java Anwendung die aus Class-Dateien besteht einfach über die Konsole starten. Dazu musst du nur java Klassenname eingeben, schon startet sie. Das kannst du zb auch als Batch Datei schreiben um sie so zu starten.
Der andere Weg geht wie du selbst schon gesagt hast über JAR-Dateien, diese kann man über verschiedene Tools erstellen, im Grunde sind dies nur Zip-Dateien mit zusätzlichen Dateien drin. Die kannst du im Regelfall einfach mit einem Doppelklick ausführen, aber du kannst das auch über die Konsole machen, java -jar Datei.jar

Wenn du eine IDE (eclipse,netbeans,…) benutzt kannst du die JAR Datei direkt von der erzeugen lassen.

danke dir! :slight_smile:

ich verwende netbeans. kannst du mir zufällig sagen, wo genau ich diese funktion dort finden kann?

.exe-dateien im herkömmlichen sinne kann man bei java also nicht erstellen - habe ich dich da richtig verstanden?

Da muss ich leider passen, aber es gibt hier paar Netbeans Benutzer wie Lex die werden dir das sagen können. Ich hab zwar gerade reingesehen und nix gefunden aber ich bin auch eclipse Benutzer.

Genau exe gibts nicht weil die ja nur unter Windows laufen und Java ja überall läuft, bzw. laufen soll.

na gut, die batch-methode scheint mir auch ganz praktisch zu sein. das mit dem archiv werde ich schon noch in erfahrung bringen können, vermute ich mal. du hast mir auf alle fälle sehr geholfen, vielen dank noch mal! :slight_smile:

Das Symbol dafür sieht so aus:
Shift+F11 macht genau das Gleiche.
Du findest deine Jar-Datei dann im Projektverzeichnis im Unterverzeichnis dist.

Wie EagleEye schon sagte, gibts keine Möglichkeit exe-Dateien mit dem JDK zu erstellen. Ich habe aber gehört, dass einige Versionen von JBuilder das können/konnten.
Es gibt aber Programme, die sich auf die Erzeugung von exe-Dateien spezialisiert haben. Auch hier gibts einige verschiedene Möglichkeiten, die aber allesamt auf eine JRE angewiesen sind. Entweder, weil sie die darin befindlichen Klassen zu nativem Code kompilieren (Native Code Compliler, z.B. Excelsior JET) und mit ausliefern oder weil sie nur die Jar-Datei per exe-Datei starten (Xenoage JEStart).

Fazit: viel Sinn ein solches Programm zu verwenden macht es nicht.

hoffe mal das ich in diesem thread richtig bin…

wie kann ich nun mit eclipse so eine jar datei erstellen.

in nem anderen forum steht:

Du gehst einfach auf Export -> Java -> Jar File, wählst deine Klassen aus (die .class-Files reichen völlig, .java-Dateien müssen da nicht bei sein), klickst 2 mal auf Next und trägst dann dort halt in dem Feld für “Main Class” die Klasse ein, die die Main-Methode hat. Dann noch Finish und du bist fertig. Ob der Rechner dann hingeht und das Jar-File beim Doppelklick startet oder per WinZip oder sonstiges öffnet hängt allerdings von den Windowseinstellungen ab. Bei mir steht da unter Ordneroptionen -> Dateitypen unter Jar als Programm mit dem es geöffnet wird “Java™ 2 Platform Standard Edition binary”, welche Exe das ist kann ich leider gerade nicht nachgucken, weil ich kein Admin an dem Rechner bin

das ist problem ist momentan das ich im feld main class eintragen kann was ich will, eclipse sagt mir dann immer das es die mainclass nicht gibt.

Wenn es hier um Deine Taschenrechner-Anwendung geht: Die hat einfach keine Main-Klasse. Eine Klasse kann dann eine Main-Klasse sein, wenn sie eine main-Methode enthält:public static void main(String[] args) { // TODO: Start your application here }
In deinem Fall muss da drin sowas stehen wie: ```/* Taschenrechner-Instanz erzeugen */
final TR rechner = new TR();

/* Fenster zentrieren und anzeigen */
pack();
tr.setLocationRelativeTo(null);
tr.setVisible(true);```
Ebenius

ich weiß das is jetzt sicherlich verdammt dämlich, aber wo genau muss ich denn jetzt bei dem TR mit dem schlechten quellcode das

  public static void main(String[] args) {

    // TODO: Start your application here

  }

einbinden?
und was welcher teil kommt zwischen den geschweiften klammern bei //TODO: Start your application hear


edit

ok, hab es jetzt raus. hab es vor ```
public TR() {
super();
initialize();

}``` gesetzt.

beim exportieren in ein jar file findet er die Klasse TR. Und da meint er das er das jar file mit warungen erställt hätte.
Doppelklick auf die neue .jar datei, und man siehe… … das man nichts sieht… irgendwie passiert augenscheinlich rein gar nix…

Damit dir auch andere als nur Ebenius antworten können, solltest du deinen Post in den Kontext mit deinem Code bringen. Kein Mensch hier hat davon etwas gesehen, nur die 5 Zeilen oben…

Die main()-Methode kommt immer in die Klasse, die die Anwendung starten soll.
In dieser Methode werden Objekte erzeugt, in deinem Beispiel eine GUI.

ja ok, aber nich wundern das ding is wirklich schlampig programmiert. also in eclipse läuft alles wunderbar wenn ich auch run -> java bean gehe.

hier nochmal der gesamte code:


import java.awt.Frame;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.awt.Rectangle;
import javax.swing.JButton;
import java.awt.Point;




public class TR extends Frame {

	private static final long serialVersionUID = 1L;
	private JTextField TF = null;
	private JButton b1 = null;
	private JButton b2 = null;
	private JButton b3 = null;
	private JButton b4 = null;
	private JButton b5 = null;
	private JButton b6 = null;
	private JButton b7 = null;
	private JButton b8 = null;
	private JButton b9 = null;
	private JButton b0 = null;
	private JButton bpl = null;
	private JButton bmi = null;
	private JButton bma = null;
	private JButton bdu = null;
	private JButton bgl = null;
	double zahl1;
	double zahl2;
	double rechne;
	byte zeichen;
	/**
	 * This is the default constructor
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	public TR() {
		super();
		initialize();
		
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setLayout(null);
		this.setSize(215, 211);
		this.setTitle("Taschenrechner");

		this.add(getTF(), null);
		this.add(getB1(), null);
		this.add(getB2(), null);
		this.add(getB3(), null);
		this.add(getB4(), null);
		this.add(getB5(), null);
		this.add(getB6(), null);
		this.add(getB7(), null);
		this.add(getB8(), null);
		this.add(getB9(), null);
		this.add(getB0(), null);
		this.add(getBpl(), null);
		this.add(getBmi(), null);
		this.add(getBma(), null);
		this.add(getBdu(), null);
		this.add(getBgl(), null);
		this.add(getBgls(), null);
		this.add(getBglm(), null);
		this.add(getBgld(), null);
		this.add(getBce(), null);
		this.add(getBk(), null);
	}

	/**
	 * This method initializes TF	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTF() {
		if (TF == null) {
			TF = new JTextField();
			TF.setBounds(new Rectangle(14, 34, 195, 21));
		}
		return TF;
	}

	/**
	 * This method initializes b1	
	 * 	
	 * @return javax.swing.JButton	
	 */
	String zahl;
	private JButton bgls = null;
	private JButton bglm = null;
	private JButton bgld = null;
	private JButton bce = null;
	private JButton bk = null;
	private JButton getB1() {
		if (b1 == null) {
			b1 = new JButton();
			b1.setLocation(new Point(16, 59));
			b1.setText("1");
			b1.setSize(new Dimension(45, 25));
			b1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "1");
					}
			});
		}
		return b1;
	}

	/**
	 * This method initializes b2	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB2() {
		if (b2 == null) {
			b2 = new JButton();
			b2.setLocation(new Point(65, 59));
			b2.setText("2");
			b2.setSize(new Dimension(45, 25));
			b2.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
						TF.setText(TF.getText() + "2");
					
					
					}
			});
		}
		return b2;
	}

	/**
	 * This method initializes b3	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB3() {
		if (b3 == null) {
			b3 = new JButton();
			b3.setLocation(new Point(114, 59));
			b3.setText("3");
			b3.setSize(new Dimension(45, 25));
			b3.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "3");
					}
			});
		}
		return b3;
	}

	/**
	 * This method initializes b4	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB4() {
		if (b4 == null) {
			b4 = new JButton();
			b4.setLocation(new Point(16, 88));
			b4.setText("4");
			b4.setSize(new Dimension(45, 25));
			b4.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "4");}
			});
		}
		return b4;
	}

	/**
	 * This method initializes b5	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB5() {
		if (b5 == null) {
			b5 = new JButton();
			b5.setLocation(new Point(65, 88));
			b5.setText("5");
			b5.setSize(new Dimension(45, 25));
			b5.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "5");}
			});
		}
		return b5;
	}

	/**
	 * This method initializes b6	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB6() {
		if (b6 == null) {
			b6 = new JButton();
			b6.setLocation(new Point(114, 88));
			b6.setText("6");
			b6.setSize(new Dimension(45, 25));
			b6.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "6");}
			});
		}
		return b6;
	}

	/**
	 * This method initializes b7	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB7() {
		if (b7 == null) {
			b7 = new JButton();
			b7.setLocation(new Point(16, 118));
			b7.setText("7");
			b7.setSize(new Dimension(45, 25));
			b7.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "7");}
			});
		}
		return b7;
	}

	/**
	 * This method initializes b8	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB8() {
		if (b8 == null) {
			b8 = new JButton();
			b8.setLocation(new Point(65, 118));
			b8.setText("8");
			b8.setSize(new Dimension(45, 25));
			b8.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "8");}
			});
		}
		return b8;
	}

	/**
	 * This method initializes b9	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB9() {
		if (b9 == null) {
			b9 = new JButton();
			b9.setLocation(new Point(114, 118));
			b9.setText("9");
			b9.setSize(new Dimension(45, 25));
			b9.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "9");}
			});
		}
		return b9;
	}

	/**
	 * This method initializes b0	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getB0() {
		if (b0 == null) {
			b0 = new JButton();
			b0.setLocation(new Point(65, 148));
			b0.setText("0");
			b0.setSize(new Dimension(45, 25));
			b0.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + "0");}
			});
		}
		return b0;
	}

	/**
	 * This method initializes bpl	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBpl() {
		if (bpl == null) {
			bpl = new JButton();
			bpl.setSize(new Dimension(45, 25));
			bpl.setText("+");
			bpl.setLocation(new Point(163, 59));
			bpl.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl1 = Double.parseDouble(TF.getText());
					bgl.setVisible(true);
					bgls.setVisible(false);
					bglm.setVisible(false);
					bgld.setVisible(false);
					TF.setText("");
					TF.requestFocus();
					}
			});
		}
		return bpl;
	}

	/**
	 * This method initializes bmi	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBmi() {
		if (bmi == null) {
			bmi = new JButton();
			bmi.setSize(new Dimension(45, 25));
			bmi.setText("-");
			bmi.setLocation(new Point(163, 88));
			bmi.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl1 = Double.parseDouble(TF.getText());
					bgl.setVisible(false);
					bgls.setVisible(true);
					bglm.setVisible(false);
					bgld.setVisible(false);
					TF.setText("");
					TF.requestFocus();
					}
			});
		}
		return bmi;
	}

	/**
	 * This method initializes bma	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBma() {
		if (bma == null) {
			bma = new JButton();
			bma.setSize(new Dimension(45, 25));
			bma.setText("*");
			bma.setLocation(new Point(163, 118));
			bma.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl1 = Double.parseDouble(TF.getText());
					bgl.setVisible(false);
					bgls.setVisible(false);
					bglm.setVisible(true);
					bgld.setVisible(false);
					TF.setText("");
					TF.requestFocus();
					}
			});
		}
		return bma;
	}

	/**
	 * This method initializes bdu	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBdu() {
		if (bdu == null) {
			bdu = new JButton();
			bdu.setSize(new Dimension(45, 25));
			bdu.setText("/");
			bdu.setLocation(new Point(163, 148));
			bdu.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl1 = Double.parseDouble(TF.getText());
					bgl.setVisible(false);
					bgls.setVisible(false);
					bglm.setVisible(false);
					bgld.setVisible(true);
					TF.setText("");
					TF.requestFocus();
					}
			});
		}
		return bdu;
	}

	/**
	 * This method initializes bgl	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBgl() {
		if (bgl == null) {
			bgl = new JButton();
			bgl.setSize(new Dimension(45, 25));
			bgl.setText("=");
			bgl.setLocation(new Point(114, 148));
			bgl.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					zahl2 = Double.parseDouble(TF.getText());
					rechne = zahl1 + zahl2;	
					TF.setText(Double.toString(rechne));
					TF.requestFocus();
					}
			});
		}
		return bgl;
	
	}

	/**
	 * This method initializes bgls	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBgls() {
		if (bgls == null) {
			bgls = new JButton();
			bgls.setLocation(new Point(114, 148));
			bgls.setText("=");
			bgls.setSize(new Dimension(45, 25));
			bgls.setVisible(false);
			bgls.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl2 = Double.parseDouble(TF.getText());
					rechne = zahl1 - zahl2;	
					TF.setText(Double.toString(rechne));
					TF.requestFocus();
					}
			});
		}
		return bgls;
	}

	/**
	 * This method initializes bglm	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBglm() {
		if (bglm == null) {
			bglm = new JButton();
			bglm.setLocation(new Point(114, 148));
			bglm.setText("=");
			bglm.setSize(new Dimension(45, 25));
			bglm.setVisible(false);
			bglm.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl2 = Double.parseDouble(TF.getText());
					rechne = zahl1 * zahl2;	
					TF.setText(Double.toString(rechne));
					TF.requestFocus();
					}
			});
		}
		return bglm;
	}

	/**
	 * This method initializes bgld	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBgld() {
		if (bgld == null) {
			bgld = new JButton();
			bgld.setLocation(new Point(114, 148));
			bgld.setText("=");
			bgld.setSize(new Dimension(45, 25));
			bgld.setVisible(false);
			bgld.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl2 = Double.parseDouble(TF.getText());
					rechne = zahl1 / zahl2;	
					TF.setText(Double.toString(rechne));
					TF.requestFocus();
					}
			});
		}
		return bgld;
	}

	/**
	 * This method initializes bce	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBce() {
		if (bce == null) {
			bce = new JButton();
			bce.setSize(new Dimension(192, 26));
			bce.setText("CE - NEUE RECHNUNG");
			bce.setLocation(new Point(16, 178));
			bce.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					zahl1 = 0; // variable zahl1 auf 0 setzen
					zahl2 = 0; //variable zahl2 auf 0 setzen
					rechne = 0; //variable rechne auf 0 setzen
					TF.setText(""); //text leer setzen
					TF.requestFocus(); //Cursor in Textfeld setztn
					}

				
			});
		}
		return bce;
	}

	/**
	 * This method initializes bk	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBk() {
		if (bk == null) {
			bk = new JButton();
			bk.setLocation(new Point(16, 148));
			bk.setText(",");
			bk.setSize(new Dimension(45, 25));
			bk.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					TF.setText(TF.getText() + ".");}
			});
		}
		return bk;
	}

	}
//  @jve:decl-index=0:visual-constraint="28,33"

so außerdem hab ich meine jar datei jetzt mal in der console geöffnet damit ich mal sehe was der von mir will und stelle fest, das ich mit der meldung auch nix anfangen kann:

C:\Users\Midnight Ghost\Desktop>rechner.jar
Exception in thread “main” java.lang.NoClassDefFoundError: C:\Users\Midnight Gho
st\Desktop\rechner/jar

[QUOTE=MidnightGhost]so außerdem hab ich meine jar datei jetzt mal in der console geöffnet damit ich mal sehe was der von mir will und stelle fest, das ich mit der meldung auch nix anfangen kann:

C:\Users\Midnight Ghost\Desktop>rechner.jar
Exception in thread “main” java.lang.NoClassDefFoundError: C:\Users\Midnight Gho
st\Desktop\rechner/jar[/QUOTE]

OK, kümmern wir uns zunächst darum.^^
Die VM bricht den Startvorgang ab, weil der Befehl zur Ausführung verkehrt ist und sie keine Klasse mit dem angegebenen Namen finden kann.
Dein Java-Programm, welches du in einer Jar-Datei vorliegen hast, wird auf der Console mit folgendem Befehl gestartet:

java -jar rechner.jar

Wenn du eine ordentliche Manifest-Datei im Jar hast, in der die Main-Class angegeben ist, wird dein Programm ausgeführt.

Den Code guck’ ich mir gleich mal an.

also wenn ich java -jar C:\rechner.jar in die konsole eingebe bring er zwar keine fehlermeldung, startet den rechner aber auch nicht…

Lies Dir nochmal meinen letzten Beitrag in diesem Thema durch. Da stehen zwei Code-Schnipsel. Du hast nur den ersten Teil übernommen. Deine main()-Methode steht nun also in Deiner Klasse (es ist übrigens egal, ob sie vor dem Konstruktor oder irgendwo anders auftaucht; sie muss einfach mit in die Klasse) enthält aber nichts als den Kommentar. Deswegen startet die VM das Programm das nichts tut und beendet es direkt im Anschluss. Der zweite Teil ist der Inhalt der main()-Methode. Den musst Du schon auch noch reintun.

Happy Hacking!
Ebenius

ich habe bereits versucht den 2. codeteil in die main methode einzufügen, nur bringt er mir da wieder 3 fehlermeldungen bereits in eclipse.

public static void main(String[] args) {
	
		
		final TR rechner = new TR();
				 
		/* Fenster zentrieren und anzeigen */
		
		pack(); //fehlermeldung: Cannot make a static reference to the non-static method pack() from the type Window
		
		tr.setLocationRelativeTo(null); //Fehlermeldung tr cannot be resolved
		
		tr.setVisible(true); //Fehlermeldung tr cannot be resolved
	
	}

und wenn ich TR groß schreiben kommt auch wieder:
Cannot make a static reference to the non-static method setLocationRelativeTo(Component) from the type Window

Sorry. Da hab ich mich vertippt. Mach mal “rechner” aus den kleinen “tr”.

Happy Hacking!

das pack muss auch tr.pack() heißen

Hach herrje… Das ist die Rache dafür, wenn man Code im Browser schreibt. Gibt’s kein JDK-Plugin für den Opera? Oder ein vBulletin-Eclipse-Plugin das das kann? :wink:

ne aber schreib mal eins :smiley: