Programmaufruf funktioniert nicht

Maddili

Mitglied
Hallo Leute,

ich habe ein Problem, mein Java-Programm zu starten.
Die *.jar - Datei wurde erfolgreich in Eclipse erstellt. ( Export -> jar-File -> Destination + Name angegeben -> Next -> Next -> Main ausgewählt -> Finish )

Wenn ich diese Jar jetzt aufrufe, wird mir die GUI angezeigt (inkl. Menubar, allen Felder, Buttons usw); ABER: das Programm reagiert nicht. Egal ob in der MenuBar, den Buttons, oder schließen (rechts oben aufs Kreuz).

Wenn ich in Eclipse auf meine MainClass gehe und: Run as -> Java Application klicke, funktioniert mein Prog. einwandfrei.

Habe ich einen Fehler beim exportieren gemacht?

Braucht ihr den Quellcode

mfg
Maddin
 
Hier ist mein Code:

Code:
public class Output extends JFrame implements ActionListener, ComponentListener {

	private static final long serialVersionUID = 1L;

	// BLA BLA BLA
	// Hier wird alles definiert.... ...buttons, textfelder usw


	/**
	 * This is the default constructor
	 */
	public Output() {
		this.getJPanel();
		initialize();
	}


	/**
	 * This method initializes this
	 *
	 * @return void
	 */
	public void initialize() {

		this.setSize(894, 785);
		this.setContentPane(getJPanel());
		this.setTitle("SOP Generator");
		Menubar m = new Menubar();
		this.setJMenuBar(m);
                      }

// Hier gehts dann weiter...



Und meine Main():
Code:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Output output1 = new Output();
		output1.setVisible(true);
		output1.setSize(894, 785);


	}

Stimmt das so?

Ich muss jetzt dann weg. Bin erst Mittwoch wieder da.
Vielleicht fällt ja jemanden was auf, oder jemand kennt das Problem.

Kann es sein, dass es an der VM liegt? Denn wenn ich das Programm öffne, bleibt die VM (javaw.exe) im taskmanager hängen.


Tschöö,
Maddin
 
Zuletzt bearbeitet:
*push*

Sorry Leute, ich muss den Thread nochmal pushen, da ich nicht weiterkomme.

Hat denn keiner ne Idee?


Wo muss ich die Listener definieren? Atm stehen sie am Ende der Klasse Output. Müssen die evtl in die Initialize()-Methode? Denn die Menubar steht drin und reagiert zumindest.
Bzw. hab ich was in der Initialize-Methode vergessen?

würde mich über Anregungen freuen.

mfg Maddin
 
Hi Maddili,

dein Programm scheint ja noch nicht sehr groß zu sein, wenn du deinen gesamten Code in eine .zip packen könntest, würde ich mir das Ganze mal zu Gemüte führen, da die von dir geposteten Codesegmente keinen Aufschluss zu geben scheinen.

Grundsätzlich mag ich es nicht eine Klasse für mehrere Zwecke zu missbrauchen. Dass Output von JFrame erbt häte ich auch so gemacht, aber dass dein Fenster gleichzeitig sein eigener Action- und ComponentListener ist behagt mir nicht. Da die Listener-Verwaltung dann (zumindest theoretisch) auf viel zu viel zugreifen kann und ich das lieber mittels anonymer Klassen abhandle. Allerdings werden ja ohnehin nur Speicherstellen übergeben und so sollte das keinen wirklichen Einfluss auf die Performance haben oder gar zum Einfrieren (eines Teils) deiner GUI führen.

Darüber hinaus bin ich auch ein großer Freund von Ant-Skripten zum Packen von .Jar-Files (spätestens ab einer gewissen Komplexität reicht mir der Eclipse-Assistent einfach nicht mehr - und jedes Mal 5 Klicks statt einem einzelnen ist auch bei kleinen Projekten irgendwann ätzend). Da der Fehler lediglich in gepackter Form und nicht aus Eclipse heraus auftritt könnte auch das ein möglicher Lösungsweg sein, den es in Betracht zu ziehen gilt.

Viele Grüße
Carron
 
Zuletzt bearbeitet:
Hallo,

ich denke, wenn der/die Listener laufen ist das schon mal ganz ok.

Ich würde es so machen:

Java:
public void initialize() {

		this.setSize(894, 785);
		this.setContentPane(getJPanel());
		this.setTitle("SOP Generator");
		Menubar m = new Menubar();
		m.addActionListener(this);
		this.setJMenuBar(m);
    }

,wenn du umbedingt die Klasse die Listener implementieren lassen willst.
Sonst:
Java:
public class Output extends JFrame
...
public void initialize() {

		this.setSize(894, 785);
		this.setContentPane(getJPanel());
		this.setTitle("SOP Generator");
		Menubar m = new Menubar();
		m.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		this.setJMenuBar(m);
    }

Ich kann aus deinem Code so nicht s erkennen, was auf Fehler hindeutet. Ich denke mal Menubar ist deine eigene Klasse, die JMenuBar erweitert
 
Zuletzt bearbeitet von einem Moderator:
Hi!
Gibt es eventuell irgendwelche Exceptions beim starten des jars? Wird etwas auf der Console ausgegeben?


*grüssle*
 
Also: Ich will mein Prog nicht komplett zeigen. Um das lauffähige Programm zu verschicken, weden externe Dateien benötigt, welche unter Datenschutz fallen.
Da bekomm ich von meiner Firma eine aufn Deckel, wenn ich die veräußere ;)

Ich hab meine GUI-Klasse mal abgespeckt:

Java:
public class Output extends JFrame implements ActionListener, ComponentListener {

	private static final long serialVersionUID = 1L;

	public static String options[] = {"A60", "A61" };  // usw. Hier kommen noch ca 70 weitere Optionen


	public static int test;
	public boolean option_zaehler = false;

	public static JPanel jOptionPanel = null;
	public static JPanel jPanel = null;

	private JLabel lb_Head = null;
	private JLabel lb_Prgnr = null;
	private JLabel lb_Customer = null;
	// usw.

	public static JTextField tf_PrgNr = null;
	public static JTextField tf_Customer = null;
	// usw.

	public static JButton bt_Erstellen = null;
	public static JButton bt_Beenden = null;


	public static JCheckBox cb_A60 = null;
	public static JCheckBox cb_A61 = null;
	// usw.
	private JLabel lb_A60 = null;
	private JLabel lb_A61 = null;
	// usw.


	private JButton bt_aendern_optionen = null;
	private JLabel lb_revision2 = null;


	/**
	 * This is the default constructor
	 */
	public Output() {
		this.getJPanel();
		initialize();

	}


	/**
	 * This method initializes this
	 *
	 * @return void
	 */
	public void initialize() {

		this.setSize(894, 785);
		this.setContentPane(getJPanel());
		this.setTitle("SOP Generator");
		Menubar m = new Menubar();
		this.setJMenuBar(m);

	}



	/**
	 * This method initializes jPanel
	 *
	 * @return javax.swing.JPanel
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			lb_revision2 = new JLabel();
			lb_revision2.setBounds(new Rectangle(751, 261, 124, 25));
			lb_revision2.setFont(new Font("Dialog", Font.BOLD, 8));
			lb_revision2.setText("Hier nur Änderungen eintragen");

			lb_Customer = new JLabel();
			lb_Customer.setName("Customer");
			lb_Customer.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
			lb_Customer.setLocation(new Point(38, 110));
			lb_Customer.setSize(new Dimension(80, 25));
			lb_Customer.setText("Customer");

			lb_Prgnr = new JLabel();
			lb_Prgnr.setName("Program Number");
			lb_Prgnr.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
			lb_Prgnr.setLocation(new Point(11, 80));
			lb_Prgnr.setSize(new Dimension(107, 25));
			lb_Prgnr.setText("Program Number");

			lb_Head = new JLabel();
			lb_Head.setText("Bla");
			lb_Head.setSize(new Dimension(692, 50));
			lb_Head.setName("Bla");
			lb_Head.setHorizontalTextPosition(SwingConstants.CENTER);
			lb_Head.setFont(new Font("Arial", 0, 18));
			lb_Head.setLocation(new Point(121, 6));


			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.add(lb_Head, null);
			jPanel.add(lb_Prgnr, null);
			jPanel.add(lb_Customer, null);


			jPanel.add(getJOptionPanel(), null);
			jPanel.add(getBt_aendern_optionen(), null);
			jPanel.add(lb_revision2, null);
		}
		return jPanel;
	}

	/**
	 * This method initializes tf_Pprivate *
	 * @return javax.swing.JTextField
	 */
	private JTextField getTf_PrgNr() {
		if (tf_PrgNr == null) {
			tf_PrgNr = new JTextField();
			tf_PrgNr.setLocation(new Point(150, 80));
			tf_PrgNr.setSize(new Dimension(600, 25));
		}
		return tf_PrgNr;
	}

	/**
	 * This method initializes tf_Custprivate *
	 * @return javax.swing.JTextField
	 */
	private JTextField getTf_Customer() {
		if (tf_Customer == null) {
			tf_Customer = new JTextField();
			tf_Customer.setLocation(new Point(150, 110));
			tf_Customer.setSize(new Dimension(600, 25));
		}
		return tf_Customer;
	}





	/**
	 * This method initializes jOptionPanel
	 *
	 * @return javax.swing.JPanel
	 */
	private JPanel getJOptionPanel() {
		if (jOptionPanel == null) {

			lb_A61 = new JLabel();
			lb_A61.setBounds(new Rectangle(90, 5, 30, 20));
			lb_A61.setToolTipText("bla2");
			lb_A61.setText("A61");

			lb_A60 = new JLabel();
			lb_A60.setBounds(new Rectangle(30, 5, 30, 20));
			lb_A60.setToolTipText("bla1");
			lb_A60.setText("A60");

			// usw.

			jOptionPanel = new JPanel();
			jOptionPanel.setLayout(null);
			jOptionPanel.setBounds(new Rectangle(149, 378, 714, 269));
			Color newcolor = new Color(53, 71, 249, 5); // r, b, g, alpha
			jOptionPanel.setBackground(newcolor);

			jOptionPanel.add(getCb_A60(), null);
			jOptionPanel.add(lb_A60, null);
			jOptionPanel.add(getCb_A61(), null);
			jOptionPanel.add(lb_A61, null);
			// usw.

			jOptionPanel.setVisible(false);


		}
		return jOptionPanel;
	}

	/**
	 * This method initializes cb_A60
	 *
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCb_A60() {
		if (cb_A60 == null) {
			cb_A60 = new JCheckBox();
			cb_A60.setBounds(new Rectangle(10, 5, 20, 20));
			cb_A60.setToolTipText("bla");
		}
		return cb_A60;
	}

	/**
	 * This method initializes cb_A61
	 *
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCb_A61() {
		if (cb_A61 == null) {
			cb_A61 = new JCheckBox();
			cb_A61.setBounds(new Rectangle(70,  5, 20, 20));
			cb_A61.setToolTipText("bla");
		}
		return cb_A61;
	}







	/**
	 * This method initializes bt_aendern_optionen
	 *
	 * @return javax.swing.JButton
	 */
	private JButton getBt_aendern_optionen() {
		if (bt_aendern_optionen == null) {
			bt_aendern_optionen = new JButton("Aendern Optionen");
			bt_aendern_optionen.setBounds(new Rectangle(489, 310, 150, 35));
			bt_aendern_optionen.setVisible(false);
			bt_aendern_optionen.setActionCommand("bt_aendern_optionen");
			bt_aendern_optionen.addActionListener(this);
		}
		return bt_aendern_optionen;
	}





	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub

		if ("SOP erstellen".equals(e.getActionCommand())){
			Aktionen.erstellen();
		}
		if ("Beenden".equals(e.getActionCommand())){
			Aktionen.beenden();		}

		//Option Button
		if ("bt_option".equals(e.getActionCommand())){

			if(option_zaehler == false){
			//	bt_option.setIcon(new ImageIcon("http://www.tutorials.de/forum/images/bt_close.png"));
				jOptionPanel.setVisible(true);
			//	lb_Options_Info.setVisible(true);
				option_zaehler = true;
				bt_aendern_optionen.setVisible(true);
			}else{
			//	bt_option.setIcon(new ImageIcon("http://www.tutorials.de/forum/images/bt_open.png"));
				jOptionPanel.setVisible(false);
			//	lb_Options_Info.setVisible(false);
				option_zaehler = false;
				bt_aendern_optionen.setVisible(false);
			}

		}
		if("bt_aendern_optionen".equals(e.getActionCommand())){
	        OptionChange.dlm.clear();
			Aktionen.auslesen_options();	
		OptionChange optch1 = new OptionChange();

		}

	}

	public void componentHidden(ComponentEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void componentMoved(ComponentEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void componentResized(ComponentEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void componentShown(ComponentEvent c) {
		// TODO Auto-generated method stub

		}

}

Und nochmal meine Main():

Java:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Output output1 = new Output();
	//	output1.pack();
	//	output1.add(Output.jPanel);
		output1.setVisible(true);
		output1.setSize(894, 785);


	}

}



Ich weiß jetzt nicht, ob das so lauffähig ist, da ich doch EINIGES rausgeschmissen habe.
Vielleicht erkennt ja jemand den Fehler - Wie gesagt: "RunAs -> Java Application" funktioniert. Der Aufruf der *.jar funktioniert auch (graphisch, auch öffnen der Menubar), allerdings funktioniert keine "Aktion" (kein "SchließenButton" der mit actionPerformed System.exit(0) hinterlegt ist usw.)

mfg
Maddin
 
Zuletzt bearbeitet:
Mahlzeit!

Kann es vielleicht an folgendem Methodenaufruf liegen:

Aktionen.erstellen();
Aktionen.beenden();
Aktionen.auslesen_options();

(Im Code meines vorherigen Posts ROT gefärbt (ziemlich unten))


Hier z.B. der Beenden-Code aus Der Aktionen()-Klasse
Java:
public class Aktionen {

         // Bla Bla

    public static void beenden(){
        try {
            xml.resettempOptions();
        } catch (IOException e) {
            System.out.println("geht ned");
            e.printStackTrace();

        }

        System.out.println("Beenden");

        System.exit(0);

    }

}




Hi!
Gibt es eventuell irgendwelche Exceptions beim starten des jars? Wird etwas auf der Console ausgegeben?

Wie kann ich die Console ausgeben, wenn ich extern (also nicht in eclipse) die *.JAR aufrufe?
 
Zuletzt bearbeitet:
Wie rufst du denn die jar auf?

Code:
Eingabeaufforderung -> java -jar DeineJar.jar

Gruß,

RoCMe
 
Wie im ersten Beitrag geschrieben:

ich habe ein Problem, mein Java-Programm zu starten.
Die *.jar - Datei wurde erfolgreich in Eclipse erstellt. ( Export -> jar-File -> Destination + Name angegeben -> Next -> Next -> Main ausgewählt -> Finish )
 
Zurück