Jar-Datei-Problem

Hallo,

ich hab mal wieder ein hoffentlich kleines Problem.
Ich habe ein Programm mit 3 Klassen geschrieben, welches ich nun in eine Jar-Datei packen will, damit ich dieses ausführen kann.
Also hab ich mein Eclipse genommen und dann das Project gewählt, Rechtsklick, Export Jar File,....
Jetzt das Problem:
Wenn ich die Jar-File erstellt habe und diese ausführen möchte, dann passiert gar nichts.
Ich habe in meinen ProjektOrdner 2 weitere Ordner angelegt, in einem sind Symbole drinnen und im anderen TextFile's. Ich habe einmal die Ordner mit in die Jar eingebunden und das andere mal nicht. Trotzdem kommt immer das selbe Ergebnis.

Hoffe ihr könnt mir helfen

mfg,
Java_Anfänger
 
Auch mit der Konsole gehts net!
Wenn auf die Jar-Datei doppel klicke, dann startet er zwar den Prozess, beendet ihn aber wieder sofort.
Normalerweise sollte sich ein Frame öffnen, in dem eine Anmeldemaske (Benutzername, Passwort) zu sehen ist
 
Meine Main-Class:

Code:
public class Start 
{
	public static void main (String [] args) throws UnknownHostException
	{
		
		Anmeldemaske Programmstart = new Anmeldemaske();
	}
}

Meine Anmeldemaske:
Code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;


public class Anmeldemaske 
{
	static int i;
	static String user;
	
	public Anmeldemaske() throws UnknownHostException
	{
		//JFrame deklarieren und anpassen
		final JFrame frm_anmeldung = new JFrame();
			frm_anmeldung.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frm_anmeldung.setTitle("Anmeldung");
			frm_anmeldung.setIconImage(Toolkit.getDefaultToolkit().getImage("symbole/frame_anmeldung.png"));
			frm_anmeldung.setResizable(false);
			frm_anmeldung.setSize(365,290);
			frm_anmeldung.setLayout(null);
			
		//Container Deklaration um Layout zu erstellen
		Container c = frm_anmeldung.getContentPane();
		
		//Hier werden die verschiedenen User eingerichtet, die auf das System zugriff haben
		String user_artest = "artest";
		
		//3 Labels für Anmeldung, IP-Adresse Benutzername und Kennwort
		JLabel lbl_anmeldung = new JLabel("Anmeldung");
			lbl_anmeldung.setFont(new Font("Arial", Font.BOLD, 16));
		JLabel lbl_benutzername= new JLabel("Benutzername");
			lbl_benutzername.setFont(new Font("Batang", Font.BOLD, 12));
		JLabel lbl_kennwort = new JLabel("Kennwort");
			lbl_kennwort.setFont(new Font("Batang", Font.BOLD, 12));
		JLabel lbl_ipAdresse = new JLabel(String.valueOf(InetAddress.getLocalHost ()));
			lbl_ipAdresse.setForeground(Color.gray);
			lbl_ipAdresse.setOpaque(true);;
			
		//2 JTextFields werden für Benutzername und Kennwort benötigt
		final JTextField txt_benutzername = new JTextField();
			txt_benutzername.setBorder(new BevelBorder(BevelBorder.LOWERED));
			txt_benutzername.setCaretColor(Color.blue);
			txt_benutzername.setFont(new Font("Arial", Font.PLAIN, 11));
			txt_benutzername.setDisabledTextColor(Color.black);
			txt_benutzername.setText(System.getProperty("user.name"));
		final JTextField txt_kennwort = new JTextField();
			txt_kennwort.setBorder(new BevelBorder(BevelBorder.LOWERED));
			txt_kennwort.setCaretColor(Color.blue);
			txt_kennwort.setFont(new Font("Arial", Font.PLAIN, 11));
			txt_kennwort.setDisabledTextColor(Color.black);
			
		//3 JButtons, welche für OK, Hilfe und Abbrechen verwendet werden
		JButton bu_ok = new JButton ("OK");
			bu_ok.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					String user_anmeldung = txt_benutzername.getText();
					String verzeichnis = String.valueOf(Anmeldemaske.class.getResource(""));
						verzeichnis = verzeichnis.replace("file:/", "");
						verzeichnis = verzeichnis + "user/user.rst";
						verzeichnis = verzeichnis.replace("%20", " ");
					
					try
					{
						String line[] = new String[20];
						BufferedReader br_auslesen = new BufferedReader(new FileReader(verzeichnis));
						i = 0;
						while ((line[i] = br_auslesen.readLine()) != null)
						{
							if( txt_benutzername.getText().equals(line[i]) == true )
							{
								user = line[i];
								frm_anmeldung.dispose();
								TelefonNotizblock ausführen = new TelefonNotizblock(line[i]);
							}
							i++;
						}
					}
					catch (IOException e1)
					{
						
					}
					
				}
			});
		JButton bu_hilfe = new JButton("Hilfe");
			bu_hilfe.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					JOptionPane.showMessageDialog(null, "********************User-Informationen********************\n"+
														"User:\n "+System.getProperty("user.name")+"\n\n"+
														"Benutzername:\n "+System.getenv("username")+"\n\n"+
														"Home Directory:\n "+System.getProperty("user.home")+"\n\n"+
														"Arbeitsverzeichnis:\n "+System.getProperty("user.dir")+"\n\n"+
														"Benutzerdomäne:\n "+System.getenv("userdomain")+"\n\n"+
														"Computername:\n "+System.getenv("computername")+"\n\n"+
														"\n********************OS-Informationen********************\n"+
														"Betriebssystem:\n "+System.getProperty("os.name")+"\n\n"+
														"BS-Architektur:\n "+System.getProperty("os.arch")+"\n\n"+
														"BS-Version:\n "+System.getProperty("os.version"),
														
														"Systeminformation", JOptionPane.INFORMATION_MESSAGE,null);
				}
			});
		JButton bu_abbrechen = new JButton("Cancel");
			bu_abbrechen.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					System.exit(0);
				}
			});
			
		//Hier wird die Position der einzelnen Komponenten auf dem JFrame zugeteilt
		lbl_anmeldung.setBounds(	10,	45,		100, 	30);
		lbl_benutzername.setBounds(	20,	100,	150, 	20);
		txt_benutzername.setBounds(	20,	120,	150, 	20);
		lbl_kennwort.setBounds(		20,	145,	150, 	20);
		txt_kennwort.setBounds(		20,	165, 	150, 	20);
		bu_ok.setBounds(			10,	220, 	80, 	20);
		bu_abbrechen.setBounds(		95,	220, 	80, 	20);
		bu_hilfe.setBounds(			180,220, 	80, 	20);
		
		
		c.add(lbl_anmeldung);
		c.add(lbl_benutzername);
		c.add(txt_benutzername);
		c.add(lbl_kennwort);
		c.add(txt_kennwort);
		c.add(bu_ok);
		c.add(bu_abbrechen);
		c.add(bu_hilfe);
		
		frm_anmeldung.show();	
	}
	
	
	public int getI ()
	{
		return i;
	}
	public String getUser ()
	{
		return user;
	}
}

das Programm ist allerdings noch nicht fertig
 
Zuletzt bearbeitet:
Also bei mir klappt das wunderbar sowohl aus der IDE als auch beim Starten des Jars..
Ich vermute aber mal ,das hier der Hund begraben liegt:
Code:
            frm_anmeldung.setIconImage(Toolkit.getDefaultToolkit().getImage("symbole/frame_anmeldung.png"));
Ersetze das doch mal probehalber durch den absoluten Pfad zu dieser Datei.

*grüssle*
MeinerEiner
 
Also bei mir klappt das wunderbar sowohl aus der IDE als auch beim Starten des Jars..
Ich vermute aber mal ,das hier der Hund begraben liegt:
Code:
            frm_anmeldung.setIconImage(Toolkit.getDefaultToolkit().getImage("symbole/frame_anmeldung.png"));
Ersetze das doch mal probehalber durch den absoluten Pfad zu dieser Datei.

*grüssle*
MeinerEiner

Vielen Dank für deine Antwort, sie hat mir sehr geholfen :)
Ich habe jetzt mal alle .setIconImage auskommentiert und siehe da: Es geht!
Jetzt stellt sich allerdings die Frage, wenn ich das Programm an meherer User verteilen will und jeder das Programm in ein anderes Verzeichnis setzt, dann klappt des ja nicht, da die Icons immer in dem Verzeichnis der Klasse sein sollen
Gibt es da noch ne andere Lösung als mit dem absoluten Pfad.:confused:
 
Zuletzt bearbeitet:
Moin!
Jetzt stellt sich allerdings die Frage, wenn ich das Programm an meherer User verteilen will und jeder das Programm in ein anderes Verzeichnis setzt, dann klappt des ja nicht, da die Icons immer in dem Verzeichnis der Klasse sein sollen
Gibt es da noch ne andere Lösung als mit dem absoluten Pfad.:confused:

Das mit dem absoluten Pfad war ja auch nur als Test gedacht.
Ich würde sowas machen:
Code:
frm_anmeldung.setIconImage(Toolkit.getDefaultToolkit().getImage(System.getProperty("user.dir")+"/symbole/frame_anmeldung.png"));
System.getProperty("user.dir") liefert dir immer das aktuelle Arbeitsverzeichnis. Und da legst du dann dein Symbol Verzeichnis mit den Bildern ab.. Dann kannst du die Software auch ohne Problem verteilen

*grüssle*
MeinerEiner
 

Neue Beiträge

Zurück