# Probleme mit einer JOptionPane in einem jar-File



## Alex_winf01 (13. Apr 2008)

Ich habe da ein komisches Problem:


```
angemeldeter_User = txt_username.getText();
JOptionPane.showMessageDialog(null, copyright, "Copyright", JOptionPane.INFORMATION_MESSAGE);

if(angemeldeter_User.equals("sa"))
{
     StartFrame frm = new StartFrame("Fenster für SA");
     frm.setVisible(true);
     frm.setResizable(false);
     frm.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
else
{
     Start start = new Start("Fenster für normale Anwender");
     start.setVisible(true);
     start.setResizable(false);
     start.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
```

Jetzt kommt es: Dieser Code funzt, solange ich mein Programm aus meinem Editor heraus starte, aber sobald ich das Programm aus einem jar-File starte, wird das JOptionPane zwar angezeigt, es geht dann aber nicht weiter. Keinerlei Fehlermeldungen in der dos-Konsole, wenn ich das jar-File von dort aus starte.

Kann mir jemand helfen?


----------



## André Uhres (13. Apr 2008)

Funktioniert bei mir: TestOption.jar


```
package demo;

import javax.swing.*;

public class NewMain {

    public NewMain() {
        String copyright = "copyright";
        JOptionPane.showMessageDialog(null, copyright, "Copyright", JOptionPane.INFORMATION_MESSAGE);
        Start start = new Start("Fenster für normale Anwender");
        start.setVisible(true);
        start.setResizable(false);
        start.setExtendedState(JFrame.MAXIMIZED_BOTH);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new NewMain();
            }
        });

    }
}
class Start extends JFrame{
    public Start(String title){
        super(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
}
```


----------



## Alex_winf01 (14. Apr 2008)

@ André Uhres

ich habe mir mal eine bat-Datei geschrieben, aus der ich das Jar-File aufrufe. Das Jar-File wird aufgerufen, der Anmeldedialog funzt, das Copyright erscheint und dann wird das Programm beendet (fast so als ob ein System.exit ausgeführt wird). Und das bei beiden Fenstern!!!!!

Woran kann das liegen? Bei mir funzt es garantiert nicht.


----------



## Alex_winf01 (14. Apr 2008)

@ André Uhres

es ist wie folgt: Jetzt funzt es auch im Editor nicht!!! Also bis zum Dialog mit dem Copyright komme ich und dann wird das Programm geschlossen.   Woran kann das liegen?


----------



## Alex_winf01 (14. Apr 2008)

@ All

jetzt funzt es wieder im Editor - jedoch nicht im jar-File. Kann mir keiner helfen?


----------



## André Uhres (14. Apr 2008)

java.version ?
Betriebssystem ?
(hab's bei mir mit 1.6 und 1.4 unter Windows XP versucht, das funktioniert tadellos!)


----------



## Guest (14. Apr 2008)

Java Version 1.5
Betriebssystem Windows 2000.


----------



## André Uhres (14. Apr 2008)

Anonymous hat gesagt.:
			
		

> Java Version 1.5
> Betriebssystem Windows 2000.


Ich hab's jetzt versucht mit 1.5 unter Windows 2000.
Ich starte einfach direkt die jar und es funktioniert wunderbar!!


----------



## Alex_winf01 (14. Apr 2008)

Das komische ist folgendes:

Im Editor funzt es, schreibe ich eine bat-Datei und schreibe dort rein 
	
	
	
	





```
java Login
```
, dann funzt es auch. Packe ich meinen Code in ein jar-File, funzt es nicht mehr.


----------



## Wildcard (14. Apr 2008)

Die jar von André funktioniert bei dir doch, oder?
Also liegt es an deinem Code. Deinen Code haben wir aber nicht, wie soll dir also geholfen werden?
Wenn wie du sagst tatsächlich keine Exception kommt, dann würde ich auf einen leeren Catch Block oder ähnliches tippen.


----------



## Alex_winf01 (14. Apr 2008)

@ Wildcard

natürlich kann es nur an meinem Code liegen. Was mich nur stutzig macht: Im Editor funzt es, als bat-Datei funzt es - nur nicht als jar-File. :? 

Hier mal mein Code (vorsicht lang):


```
//-------------------------------------------------------------------------------------

/** Die Login-Klasse ist dafür zuständig, den Anwender an der Datenbank anzumelden
 ** und stellt die Verbindung zur Datenbank her*/

//-------------------------------------------------------------------------------------

import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;
import java.io.*;
import java.text.*;

public class Login
{
	/*--------------------------------------------------------------------*/
	
	/** Variablendeklaration für die gesamte Klasse**/
	
	/*--------------------------------------------------------------------*/
	public static Connection connection;
  	public static JTextField txt_username;
  	public static JPasswordField txt_password;
  	public static String lese, lese_dokumentation, lese_icd1, lese_icd2, lese_icd3;
  	public static Statement stmt, stmt1, stmt2, stmt3, stmt4;
  	public static ResultSet result, result_dokumentation, result_icd1, result_icd2, result_icd3;
  	public static String[] ergebnis;
  	public static String angemeldeter_User;
  	private static String s_username = "sa";
	private static String s_password = "";
	
	public static ResultSet kh_rs;
   
   /******************************************************************

	Anmeldedialog mit Benutzernamen, Passort

	******************************************************************/
   //-------------------------------------------------------------------------------------

   /** Die Methode init() stellt den Anmeldedialog mit Benutzernamen und Passwort dar**/
   
   //-------------------------------------------------------------------------------------

   private static void init() 
   {
      String[] s_options = {"Anmelden", "Abbrechen"};
      JPanel pnl_main = new JPanel();
      pnl_main.setLayout(new GridLayout(3,3,10,10));
      
      JLabel lbl_username = new JLabel("Benutzername: ", JLabel.RIGHT);
      txt_username = new JTextField();
      
      JLabel lbl_password = new JLabel("Passwort: ", JLabel.RIGHT);
      txt_password = new JPasswordField();

      pnl_main.add(lbl_username, 0);
      pnl_main.add(txt_username, 1);
      pnl_main.add(lbl_password, 2);
      pnl_main.add(txt_password, 3);
      txt_username.requestFocusInWindow(); // Fokus setzen
      int resp = JOptionPane.showOptionDialog(null, (Object)pnl_main, "DB-Anmeldung", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, s_options,null);
     
	  /** Wenn "Anmelden" geklickt wird, dann einloggen**/
	  if(resp == 0)
	  {
	  	angemeldeter_User = txt_username.getText();
        String pwd = new String(txt_password.getPassword());
	  	try
        {
        	Class.forName("org.h2.Driver"); // Treiber laden
        	/** In connection_string wird der String für die Connection gespeichert**/
    		String connection_string = "jdbc:h2:tcp:" + ergebnis[0] + "/test";
    		connection = DriverManager.getConnection(connection_string, angemeldeter_User, pwd);	
    		/** in angemeldet wird gespeichert, ob angemeldet wurde (true) oder nicht (false)**/
    		boolean angemeldet = true;
	    	Update.updateAnwender(angemeldet, angemeldeter_User); // Anwender in Tabelle "Anwender" anmelden
	    	DatenLaden(); // entsprechende Daten laden
			
			/**frm stellt das Objekt StartFrame (das Fenster) dar**/
		       StartFrame frm = new StartFrame("Startfenster");
			frm.setVisible(true);
			frm.setLocation(0, 0); // Location des Fensters setzen
			frm.setResizable(false); // verhindern, dass der Anwender die Größe des Fensters verändert
			frm.setExtendedState(JFrame.MAXIMIZED_BOTH); // auf Vollbildschirm schalten
			frm.pack();
			Laden(); 
		}
		
		catch(Exception e)
		{
		   JOptionPane.showMessageDialog(null, "Sie haben ein falsches Passwort eingegeben " + e,
			"DB-Meldung", JOptionPane.ERROR_MESSAGE);
			init();
			try
			{
				//connection.close(); // Verbindung schließen
			}
			catch(Exception z)
			{
				JOptionPane.showMessageDialog(null, "Es ist folgender Fehler aufgetreten: " +z,
				"DB-Meldung", JOptionPane.ERROR_MESSAGE);
			}
		}
	  }
	  /** Wenn "Abbrechen" geklickt wird, dann abbrechen**/
	  if (resp == 1)
	  {
	  	System.exit(0);
	  }
	  
	  s_username = new String (txt_username.getText().trim());
	  s_password = new String (txt_password.getPassword());
   }
   
   //------------------------------------------------------------------------------------------------
   
   /** Die Methode DatenLaden() stellt alle wichtigen Informationen zur Verfügung,
	 ** die beim Start des Programmes notwendig sind**/
	 
   //------------------------------------------------------------------------------------------------
	private static void DatenLaden()
	{
		try
		{
			// Hier werden die Select-Befehle erstellt und ausgeführt
			
		}
		catch(SQLException a)
		{
			JOptionPane.showMessageDialog(null, "Es ist folgender Fehler aufgetreten: " + a,
				"DB-Meldung", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	private static void Laden()
	{
		String query_kh = "Select * from haus";
			try
			{
				/** Mit kh_st wird das Statement erzeugt**/
				Statement kh_st = connection.createStatement(); // Statement erzeugen
				kh_rs = kh_st.executeQuery(query_kh); // Query ausführen
				while (kh_rs.next())
				{
					String kh_plan_nummer_string 	= kh_rs.getString("kh_plan_Nummer");
					/** in ik_nummer_string wird die IK-Nummer abgespeichert**/
			        String ik_nummer_string 		= kh_rs.getString("kh_ik_nummer");
			        /** in name_string wird der KH-Name abgespeichert**/
			        String name_string 				= kh_rs.getString("kh_name");
			    
			        String strasse_string 			= kh_rs.getString("kh_strasse");
			        int postleitzahl_int 			= kh_rs.getInt("kh_plz");
			        /** in postleitzahl_string wird der Integer-Wert als String abgespeichert**/
			        String postleitzahl_string 		= Integer.toString(postleitzahl_int); // int in einen String umwandeln
			        String ort_string 				= kh_rs.getString("kh_ort");
			        String institution_string 		= kh_rs.getString("kh_institution");
			        /** in ansprechpartner_string wird der eingetragene Ansprechpartner abgespeichert**/
			        String ansprechpartner_string 	= kh_rs.getString("kh_ansprechpartner");
			        /** in telefonnummer_string wird die Telefonnummer des Ansprechpartners abgespeichert**/
			        String telefonnummer_string 	= kh_rs.getString("kh_telefon_ansprechpartner");
        
			        StartFrame.name_text.setText(name_string);
				    StartFrame.straße_text.setText(strasse_string);
				    StartFrame.plz_text.setText(postleitzahl_string);
				    StartFrame.ort_text.setText(ort_string);
					StartFrame.kh_plan_nummer_text.setText(kh_plan_nummer_string); 
					StartFrame.ik_nummer_text.setText(ik_nummer_string);
					StartFrame.institution_text.setText(institution_string);
					StartFrame.ansprechpartner_text.setText(ansprechpartner_string);
					StartFrame.telefonnummer_text.setText(telefonnummer_string);
				}
			}
			catch(Exception kh)
			{
				JOptionPane.showMessageDialog(null, "Es ist folgender Fehler aufgetreten: " + kh,
							"DB-Meldung", JOptionPane.ERROR_MESSAGE);
			}	 
	}
	
	//---------------------------------------------------------------------------------------------------
	
	/** Die Methode lesen() liest die Werte aus der Konfigurations-Datei aus**/
	
	//---------------------------------------------------------------------------------------------------
	public static void lesen()
	{
		try
		{
			ergebnis = new String[1];
			/** die Variable reader stellt das Objekt auf die Datei "Konfiguration_kjp" dar**/
			BufferedReader reader = new BufferedReader(new FileReader("konfiguration.dat"));
			/** die Variable line nimmt die ausgelesene Zeile aus der Datei auf**/
			String line = reader.readLine();
			while((line != null))
			{
				ergebnis[0] = line;
				line = reader.readLine();
			}
		}
		catch(IOException io)
		{
			JOptionPane.showMessageDialog(null, "Es ist folgender Dateifehler aufgetreten: " + io,
							"Daten-Fehler", JOptionPane.ERROR_MESSAGE);
		}
	}
   
   /******************************************************************
	main-Methode

	******************************************************************/
   //-------------------------------------------------------------------
   
   /** Mit Hilfe der main-Methode wird das Programm gestartet**/
   
   //-------------------------------------------------------------------
   public static void main(String[] args) 
   {
        lesen();
        init();
   }
}
```


Und hier das Fenster, welches aufgerufen wird aus meinem Login-Fenster

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.util.*;
import java.sql.*;

//-------------------------------------------------------------------------------------

/** Die Klasse StartFrame übernimmt die Darstellung des Hauptfensters**/

//-------------------------------------------------------------------------------------

class StartFrame extends JFrame
{
	//-------------------------------------------------------------------------------------
	
	/** Allgemeine Variablendeklaration für die gesamte Klasse**/
	
	//-------------------------------------------------------------------------------------
	/** con1 stellt den Container für das Fenster dar**/
	public static Container con1;
	public static String druck_tag_string, druck_monat_string, druck_jahr_string;
	public static JTextField name_text, straße_text, plz_text, ort_text;
	public static JTextField kh_plan_nummer_text, ik_nummer_text, druckdatum_text, institution_text, ansprechpartner_text, telefonnummer_text;
	public static JTextField code_text, anwender_name;
	public static String kh_plan_nummer_string, ik_nummer_string, name_string, strasse_string, postleitzahl_string, ort_string, institution_string, ansprechpartner_string, telefonnummer_string;
	public static String anwender_löschen;
	public static JButton stammdaten_Button, weiter, benutzer_anlegen, stammdaten_ändern;
	public static JButton anwender_loeschen, password_ändern;
	public static JButton auswertung;
	
	/*------------------------------------------------------------*/
	/* 
	 * Konstruktor
	 *
	/*------------------------------------------------------------*/
	public StartFrame (String title)
	{
		super(title);
	
	/*------------------------------------------------------------*/
	/* Listener für die Button*/
	/*------------------------------------------------------------*/
	
	/*------------------------------------------------------------*/
	/* Schaltfläche "Auswertung"*/
	/*------------------------------------------------------------*/
	class AuswertungListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			Auswertung.auswertung_ausführen();
		}
	}
	/*------------------------------------------------------------*/
	/* Schaltfläche "Weiter"*/
	/*------------------------------------------------------------*/
	class WeiterListener implements ActionListener
	{
		/** Um reagieren zu können, muss die Klasse die Methode actionPerformed implementieren (kein Rückgabewert)*/
		public void actionPerformed(ActionEvent e)
		{
			//Fragebogen anzeigen
			Fragebogen frm = new Fragebogen("Fragebogen");
			frm.setVisible(true);
			frm.setLocation(0, 0); // Location des Fensters setzen
			frm.setResizable(false); // verhindern, dass der Anwender die Größe des Fensters verändert
			frm.setExtendedState(JFrame.MAXIMIZED_BOTH); // auf Vollbildschirm schalten
			frm.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // verhindern, dass die Basisdokumentation über Abbruch (X) geschlossen wird
			frm.pack();
			Fragebogen.doku_deaktivieren();
		}
	}
		
	/*------------------------------------------------------------*/
	/* Schaltfläche "Neuer Benutzer"*/
	/* Die Klasse neuerBenutzerListener reagiert auf die Schaltfläche
	 * "Neuer Benutzer"*/
	/*------------------------------------------------------------*/
	class NeuerBenutzerListener implements ActionListener
	{
		/** Um reagieren zu können, muss die Klasse die Methode actionPerformed implementieren (kein Rückgabewert)*/
		public void actionPerformed(ActionEvent e)
		{
			if (Login.angemeldeter_User.equals("sa"))
			{
				try
				{
					/** anwender_label stellt das Label "Anwendername" dar**/
					JLabel anwender_label = new JLabel("Anwendername");
					anwender_name = new JTextField(10);
					/** passwort_label stellt das Label "Passwort" dar**/
					JLabel passwort_label = new JLabel("Passwort:");
					JPasswordField pwd = new JPasswordField(10);
					/** passwortbst_label stellt das Label "Bestätiung Passwort" dar**/
					JLabel passwortbst_label = new JLabel("Bestätigung Passwort:");
					JPasswordField passwortbst_pws = new JPasswordField(10);
					/** code_label stellt das Label "kürzel" dar**/
					JLabel code_label = new JLabel("kürzel");
					code_text = new JTextField(5);
					/** message nimmt die Elemente für den Dialog auf**/
					Object[] message = {"Name und Passwort eingeben:\n", anwender_label, anwender_name, code_label, code_text, passwort_label, pwd, passwortbst_label, passwortbst_pws};
					/** resp nimmt den Int-Rückgabewert aus dem JOptionPane dar (kann Werte -1, 0, 1) annehmen**/
					int resp = JOptionPane.showConfirmDialog(null, message, "Neuen Anwender anlegen",
							JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
					if (resp == JOptionPane.OK_OPTION)
					{
						/** password1 nimmt die einzelnen Buchstaben des Passwortes in ein char-Array auf**/
						char[] password1 = pwd.getPassword(); 
						/** password2 nimmt die einzelnen Buchstaben der 2. Eingabe des Passwortes auf**/
						char[] password2 = passwortbst_pws.getPassword(); 
						/** i ist der Zähler für die Schleife**/
						for(int i = 0; i < password2.length; i++)
						{
							if(password2[i] != password1[i])
							{
								JOptionPane.showMessageDialog(null, "Sie haben das Passwort falsch bestätigt",
								"DB-Meldung", JOptionPane.ERROR_MESSAGE);
								return;
							}
						}
						
						// Werte aus den Textfeldern holen
						/** id nimmt den Wert aus dem Text-Feld anwender_name auf**/
						String id = new String (anwender_name.getText());
						/** pass nimmt den Wert aus dem Text-Feld pwd uf**/
						String pass = new String (pwd.getPassword());
						/** pass_bestätigung nimmt den Wert aus dem Text-Feld passwortbst_pws auf**/
						String pass_bestätigung = new String(passwortbst_pws.getPassword());
						/** code_string nimmt den Wert aus dem Text-Feld code_text auf**/
						String code_string = new String(code_text.getText());
						
						if (id.equals("")|| pass.equals("") || pass_bestätigung.equals("") || code_string.equals(""))
						{
							JOptionPane.showMessageDialog(null, "In den Textfeldern wurden keine Werte eingetragen",
							"DB-Meldung", JOptionPane.ERROR_MESSAGE);
							return;
						}
					
						/* Anwender einfuegen*/
						/** st_user_einfuegen wird das Statement für die Verbindung erzeugt**/
						Statement st_user_einfuegen = Login.connection.createStatement(); //Statement erzeugen
						
						// CREATE-Anweisung zusammenstellen
						String create_user = "CREATE USER ";
						create_user = create_user + id + " PASSWORD " + "'" + pass + "'";
						int anzahl = st_user_einfuegen.executeUpdate(create_user); // CREATE-Anweisung ausführen
						
						/* Rechte vergeben*/
						Statement st_user_rechte 	= Login.connection.createStatement(); // Statement erzeugen
						// 1. GRANT-Anweisung zusammenstellen
						String rechte_setzen = "GRANT ALL ON dokumentation, kkk, sss, anwender TO " + id;
						anzahl = st_user_rechte.executeUpdate(rechte_setzen); // GRANT-Anweisung ausführen
						
						// 2. GRANT-Anweisung zusammenstellen
						rechte_setzen = "GRANT SELECT ON ICD_2008 TO " + id;
						anzahl = st_user_rechte.executeUpdate(rechte_setzen);
						
						String code = code_text.getText();
						String anwender = anwender_name.getText();
						Einfuegen.anwenderEinfuegen(anwender, code);
						
						JOptionPane.showMessageDialog(null, "Der Anwender wurde erfolgreich angelegt",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
						
						st_user_einfuegen.close();
						st_user_rechte.close();
					}
				}
				catch(Exception neu)
				{
					JOptionPane.showMessageDialog(null, "Der Anwender konnte aus folgendem Grund nicht angelegt werden:" + neu,
						"DB-Meldung", JOptionPane.ERROR_MESSAGE);
				}
			}
			else
			{
				JOptionPane.showMessageDialog(null, "Sie sind nicht als Systemadministrator angemeldet",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	
	/*------------------------------------------------------------*/
	/* Schaltfläche "Benutzer löschen"*/
	/*------------------------------------------------------------*/
	class BenutzerLöschenListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			if (Login.angemeldeter_User.equals("sa"))
			{
				try
				{
					JLabel anwender_label_löschen = new JLabel("Anwendername"); /** anwender_label_löschen nimmt den Text "Anwendername" auf **/
					JTextField anwender_name_löschen = new JTextField(10); /** anwender_name_löschen nimmt das GUI-Element Textfeld für den Anwendernamen auf **/
					
					Object[] message = {"Benutzer-Name eingeben:\n", anwender_label_löschen, anwender_name_löschen}; /** message nimmt die GUI-Elemente auf **/
					int resp_neu = JOptionPane.showConfirmDialog(null, message, "Benutzer löschen",
							JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); /** resp_neu nimmt den Rückgabewert der JOptionPane auf **/
					if (resp_neu == JOptionPane.OK_OPTION)
					{
						String anwender_name = anwender_name_löschen.getText(); /** anwender_name nimmt den eingegebenen Anwendernamen auf **/
						if (anwender_name.equals("sa"))
						{
							JOptionPane.showMessageDialog(null, " Der Systemadministrator darf nicht gelöscht werden!",
							"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
							return;
						}
						
						
						if (anwender_name.equals(""))
						{
							JOptionPane.showMessageDialog(null, "In den Textfeldern wurden keine Werte eingetragen",
							"DB-Meldung", JOptionPane.ERROR_MESSAGE);
							return;
						}
						
						/** st_anwender_löschen erzeugt das Statement **/
						Statement st_anwender_löschen = Login.connection.createStatement(); //Statement erzeugen
						
						/* Anweisung zusammenstellen*/
						anwender_löschen = "DROP USER " + anwender_name;
						/** anzahl nimmt den Rückgabewert der Methode executeUpdate auf **/
						int anzahl = st_anwender_löschen.executeUpdate(anwender_löschen); // Anweisung ausführen
						
						JOptionPane.showMessageDialog(null, "Benutzer gelöscht.",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
						
						st_anwender_löschen.close(); // Statement schließen
						Loeschen.loeschenAnwender();
						
					}	
				}
				catch(Exception pwd)
				{
					JOptionPane.showMessageDialog(null, "Das Passwort konnte aus folgendem Grund nicht geändert werden:" + pwd,
						"DB-Meldung", JOptionPane.ERROR_MESSAGE);
				}
			}
			else
			{
				JOptionPane.showMessageDialog(null, "Sie sind nicht als Systemadministrator angemeldet",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	
	/*------------------------------------------------------------*/
	/* Schaltfläche "Passwort ändern"*/
	/*------------------------------------------------------------*/
	class PasswortÄndernListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			if (Login.angemeldeter_User.equals("sa"))
			{
				try
				{
					JLabel anwender_label_neu_pwd = new JLabel("Anwendername"); /** anwender_label_neu_pwd nimmt den Text "Anwendername" auf **/
					JTextField anwender_name_neu_pwd = new JTextField(10); /** anwender_name_neu_pwd ist das Textfeld für den Anwendernamen **/
					JLabel passwort_label_neu_pwd = new JLabel("Passwort:"); /** passwort_label_neu_pwd nimmt den Text "Passwort" auf **/
					JPasswordField neu_pwd = new JPasswordField(10); /** neu_pwd ist das Textfeld für das Passwort **/
					JLabel neu_passwortbst_label = new JLabel("Bestätigung Passwort:"); /** neu_passwortbst_label nimmt den Text "Bestätigung Passwort:" auf **/
					JPasswordField neu_passwortbst_pws = new JPasswordField(10); /** neu_passwortbst_pws ist das Textfeld für die Bestätigung des Passwortes **/
					
					Object[] message = {"Name und Passwort eingeben:\n", anwender_label_neu_pwd, anwender_name_neu_pwd, passwort_label_neu_pwd, neu_pwd, neu_passwortbst_label, neu_passwortbst_pws}; /** message nimmt die GUI-Elemente auf **/
					int resp_neu = JOptionPane.showConfirmDialog(null, message, "Passwort ändern",
							JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); /** resp_neu nimmt den Rückgabewert der JOptionPane auf **/
					if (resp_neu == JOptionPane.OK_OPTION)
					{
						String anwender_name = anwender_name_neu_pwd.getText(); /** anwender_name nimmt den eingegebenen Anwendernamen auf **/
						if (anwender_name.equals("sa"))
						{
							JOptionPane.showMessageDialog(null, " Beim Anwender Systemadministrator darf das Password nicht geändert werden!",
							"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
							return;
						}
						
						char[] password1 = neu_pwd.getPassword();  /** password1 nimmt die einzelnen Zeichen der ersten Passwort-Eingabe auf **/
						char[] password2 = neu_passwortbst_pws.getPassword();  /** password2 nimmt die einzelnen Zeichen der zweiten Passwort-Eingabe auf **/
						for(int i = 0; i < password2.length; i++)
						{
							if(password2[i] != password1[i])
							{
								JOptionPane.showMessageDialog(null, "Sie haben das Passwort falsch bestätigt",
								"DB-Meldung", JOptionPane.ERROR_MESSAGE);
								return;
							}
						}
						
						// Werte aus den Textfeldern holen
						String id_neu = new String (anwender_name_neu_pwd.getText()); /** id_neu nimmt den Anwendernamen auf **/
						String pass_neu = new String (neu_pwd.getPassword()); /** pass_neu mimmt das Passort auf **/
						String pass_bestätigung_neu = new String(neu_passwortbst_pws.getPassword()); /** pass_bestätigung_neu nimmt die Passwortbestätigung auf **/
						
						if (id_neu.equals("")|| pass_neu.equals("") || pass_bestätigung_neu.equals(""))
						{
							JOptionPane.showMessageDialog(null, "In den Textfeldern wurden keine Werte eingetragen",
							"DB-Meldung", JOptionPane.ERROR_MESSAGE);
							return;
						}
					
						Statement st_pwd_ändern = Login.connection.createStatement(); //Statement erzeugen
						
						// Anweisung zusammenstellen
						String pwd_ändern = "ALTER USER "; /** pwd_ändern nimmt den ALTER USER-Befehl für die DB Auf **/
						pwd_ändern = pwd_ändern + id_neu + " SET PASSWORD " + "'" + pass_neu + "'";
						// Anweisung ausführen
						int anzahl = st_pwd_ändern.executeUpdate(pwd_ändern);  /** anzahl nimmt den Rückgabewert der Methode executeUpdate auf **/
						
						JOptionPane.showMessageDialog(null, "Das Passwort wurde erfolgreich angelegt.",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
						
						st_pwd_ändern.close(); // Statement schließen
						
					}	
				}
				catch(Exception pwd)
				{
					JOptionPane.showMessageDialog(null, "Das Passwort konnte aus folgendem Grund nicht geändert werden:" + pwd,
						"DB-Meldung", JOptionPane.ERROR_MESSAGE);
				}
			}
			else
			{
				JOptionPane.showMessageDialog(null, "Sie sind nicht als Systemadministrator angemeldet",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	
	/*------------------------------------------------------------*/
	/* Schaltfläche "Stammdaten ändern"*/
	/*------------------------------------------------------------*/
	class Stammdaten_ändernListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			
			if (kh_plan_nummer_text.getText().equals("") && institution_text.getText().equals("") && ik_nummer_text.getText().equals("") && name_text.getText().equals("") && straße_text.getText().equals("") && plz_text.getText().equals("") && ort_text.getText().equals("") && ansprechpartner_text.getText().equals("") && telefonnummer_text.getText().equals(""))
			{
				JOptionPane.showMessageDialog(null, "Es wurden noch keine Daten angelegt!",
						"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
				return;
			}
			else
			{
				if (Login.angemeldeter_User.equals("sa"))
				{
					Update.updateKH();
				}
				else
				{
					JOptionPane.showMessageDialog(null, "Sie sind nicht als Systemadministrator angemeldet",
							"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
				}
			}			
		}
	}
	/*------------------------------------------------------------*/
	/* Schaltfläche "Stammdaten speichern"*/
	/*------------------------------------------------------------*/
	class StammdatenListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
				//Stammdaten des KH speichern
				if (Login.angemeldeter_User.equals("sa"))
				{
					Einfuegen.kh_einfuegen();
					stammdaten_ändern.setEnabled(true);
				}
				else
				{
					JOptionPane.showMessageDialog(null, "Sie sind nicht als Systemadministrator angemeldet",
							"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
					stammdaten_Button.setEnabled(true);
				}
		}
	}
	
	/*------------------------------------------------------------*/
	/* Formatierungen
	/*------------------------------------------------------------*/
	Border b 	= BorderFactory.createLineBorder(Color.black);
	Font font 	= new Font("", Font.BOLD, 60);
	Font schrift_Hauptfenster = new Font("", Font.BOLD, 16);
	
	/*------------------------------------------------------------*/
	/* Container und Hauptpanels definieren*/
	/*------------------------------------------------------------*/
	con1 = getContentPane();
	con1.setLayout(new BorderLayout());
	
	JPanel nordpanel		= new JPanel(new BorderLayout());
	JPanel centerpanel		= new JPanel(new BorderLayout());
	JPanel suedpanel		= new JPanel(new BorderLayout());
	
	/*------------------------------------------------------------*/
	/* NORDPANEL*/
	/*------------------------------------------------------------*/
	
	JPanel hilfe			= new JPanel(new FlowLayout());
	ImageIcon m_icon 		= new ImageIcon(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("img/mkg.gif")),"name");
	JLabel bik_Label 		= new JLabel(m_icon);
	JLabel programm			= new JLabel("Programm:");
	JLabel kia 				= new JLabel("Mein Programm");
	JLabel programmversion 	= new JLabel(" Programmversion 2.0");
	JLabel leer_label		= new JLabel("                      ");
	kia.setFont(font);
	
	hilfe.add(programm);
	hilfe.add(kia);
	hilfe.add(programmversion);
	
	nordpanel.add(bik_Label, BorderLayout.EAST);
	nordpanel.add(hilfe, BorderLayout.WEST);
	
	
	/*------------------------------------------------------------*/
	/* CENTERPANEL*/
	/*------------------------------------------------------------*/
	JPanel hilfspanel1			= new JPanel(new GridLayout(13,2,1,1));
	JPanel eingabe_stammdaten  	= new JPanel(new BorderLayout());
	JLabel ik_nummer 			= new JLabel("Nummer   ", JLabel.LEFT);
	JLabel kh_plan_nummer		= new JLabel("Plannummer", JLabel.LEFT);
	JLabel druckdatum 			= new JLabel("Druckdatum  ", JLabel.LEFT);
	JLabel institution 			= new JLabel("Institution", JLabel.LEFT);
	
	kh_plan_nummer_text	= new JTextField(15);
	ik_nummer_text 		= new JTextField(9);
	druckdatum_text 	= new JTextField(15);
	institution_text 	= new JTextField(3);
	institution_text.setToolTipText("Das Institutionskennzeichen (dreistellig)kann verwendet werden, um unterschiedliche Untereinheiten der Klinik zu kennzeichnen.");
	
	/*------------------------------------------------------------------------*/
	/* Druckdatum festlegen*/
	/*------------------------------------------------------------------------*/
	Calendar cal1 = Calendar.getInstance();
	cal1.setTime(new java.util.Date());
	int druck_tag 		= cal1.get(Calendar.DAY_OF_MONTH);
	int druck_monat 	= cal1.get(Calendar.MONTH);
	int druck_jahr 		= cal1.get(Calendar.YEAR);
	
	String druck_monat_string1 = "";
	
	druck_tag_string	= Integer.toString(druck_tag);
	druck_monat_string	= Integer.toString(druck_monat);
	druck_jahr_string 	= Integer.toString(druck_jahr);
	
	if (druck_monat_string.equals("0")){druck_monat_string1 = "01";}
	if (druck_monat_string.equals("1")){druck_monat_string1 = "02";}
	if (druck_monat_string.equals("2")){druck_monat_string1 = "03";}
	if (druck_monat_string.equals("3")){druck_monat_string1 = "04";}
	if (druck_monat_string.equals("4")){druck_monat_string1 = "05";}
	if (druck_monat_string.equals("5")){druck_monat_string1 = "06";}
	if (druck_monat_string.equals("6")){druck_monat_string1 = "07";}
	if (druck_monat_string.equals("7")){druck_monat_string1 = "08";}
	if (druck_monat_string.equals("8")){druck_monat_string1 = "09";}
	if (druck_monat_string.equals("8")){druck_monat_string1 = "09";}
	if (druck_monat_string.equals("9")){druck_monat_string1 = "10";}
	if (druck_monat_string.equals("10")){druck_monat_string1 = "11";}
	if (druck_monat_string.equals("11")){druck_monat_string1 = "12";}
	
	if (druck_tag < 10){druck_tag_string = "0" + druck_tag;}
	
	druckdatum_text.setText(druck_tag_string + "." + druck_monat_string1 + "." + druck_jahr);
	
	/*Schrift*/
	kh_plan_nummer.setFont(schrift_Hauptfenster);
	ik_nummer.setFont(schrift_Hauptfenster);
	druckdatum.setFont(schrift_Hauptfenster);
	institution.setFont(schrift_Hauptfenster);
	kh_plan_nummer_text.setFont(schrift_Hauptfenster);
	ik_nummer_text.setFont(schrift_Hauptfenster);
	druckdatum_text.setFont(schrift_Hauptfenster);
	institution_text.setFont(schrift_Hauptfenster);
	
	/*Rahmen*/
	kh_plan_nummer_text.setBorder(b);
	ik_nummer_text.setBorder(b);
	druckdatum_text.setBorder(b);
	institution_text.setBorder(b);
	
	JLabel stammdaten 	= new JLabel("Stammdaten", JLabel.RIGHT);
	stammdaten.setFont(schrift_Hauptfenster);
	JLabel name			= new JLabel("Name              ", JLabel.LEFT);
	name.setFont(schrift_Hauptfenster);
	JLabel straße		= new JLabel("Straße             ", JLabel.LEFT);
	straße.setFont(schrift_Hauptfenster);
	JLabel plz			= new JLabel("PLZ                ", JLabel.LEFT);
	plz.setFont(schrift_Hauptfenster);
	JLabel ort			= new JLabel("Ort                ", JLabel.LEFT);
	ort.setFont(schrift_Hauptfenster);
	JLabel ansprechpartner = new JLabel("Ansprechpartner    ", JLabel.LEFT);
	ansprechpartner.setFont(schrift_Hauptfenster);
	JLabel telefonnummer = new JLabel("Telefonnummer:      ", JLabel.LEFT);
	telefonnummer.setFont(schrift_Hauptfenster);
	
	name_text 		= new JTextField(255);
	straße_text 	= new JTextField(255);
	plz_text 		= new JTextField(5);
	ort_text 		= new JTextField(255);
	ansprechpartner_text = new JTextField(255);
	telefonnummer_text = new JTextField(255);
	
	
	/** Textfelder auf editierbar schalten - nur wenn der Anwender als Systemadmin
	 ** angemeldet ist**/
	if (Login.angemeldeter_User.equals("sa"))
	{
		bearbeitbar();
	}
	else
	{
		nicht_bearbeitbar();
	}
	
	/*Schrift*/
	name_text.setFont(schrift_Hauptfenster);
	straße_text.setFont(schrift_Hauptfenster);
	plz_text.setFont(schrift_Hauptfenster);
	ort_text.setFont(schrift_Hauptfenster);
	ansprechpartner_text.setFont(schrift_Hauptfenster);
	telefonnummer_text.setFont(schrift_Hauptfenster);
	/*Rahmen*/
	name_text.setBorder(b);
	straße_text.setBorder(b);
	plz_text.setBorder(b);
	ort_text.setBorder(b);
	ansprechpartner_text.setBorder(b);
	telefonnummer_text.setBorder(b);
	
	setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	
	hilfspanel1.add(kh_plan_nummer);
	hilfspanel1.add(kh_plan_nummer_text);
	hilfspanel1.add(ik_nummer);
	hilfspanel1.add(ik_nummer_text);
	hilfspanel1.add(druckdatum);
	hilfspanel1.add(druckdatum_text);
	hilfspanel1.add(institution);
	hilfspanel1.add(institution_text);
	hilfspanel1.add(name);
	hilfspanel1.add(name_text);
	hilfspanel1.add(straße);
	hilfspanel1.add(straße_text);
	hilfspanel1.add(plz);
	hilfspanel1.add(plz_text);
	hilfspanel1.add(ort);
	hilfspanel1.add(ort_text);
	hilfspanel1.add(ansprechpartner);
	hilfspanel1.add(ansprechpartner_text);
	hilfspanel1.add(telefonnummer);
	hilfspanel1.add(telefonnummer_text);
	eingabe_stammdaten.add(hilfspanel1);
	
	JPanel hilfe_nordpanel_süd = new JPanel(new BorderLayout());
	hilfe_nordpanel_süd.add(leer_label, BorderLayout.NORTH);
	hilfe_nordpanel_süd.add(eingabe_stammdaten, BorderLayout.CENTER);
	JPanel hilfe_zentrieren = new JPanel(new BorderLayout());
	nordpanel.add(hilfe_nordpanel_süd, BorderLayout.SOUTH);

	/*------------------------------------------------------------*/
	/* Südpanel*/
	/*------------------------------------------------------------*/

	stammdaten_Button	= new JButton("<html><font size = 2>Haus-
Stammdaten anlegen</font></html>");
	weiter				= new JButton("<html><font size = 2>Weiter</font></html>");
	benutzer_anlegen 	= new JButton("<html><font size = 2>Neuen Benutzer 
anlegen</font></html>");
	anwender_loeschen	= new JButton("<html><font size = 2>Benutzer 
löschen</font></html>");
	password_ändern		= new JButton("<html><font size = 2>Passwort 
ändern</font></html>");
	stammdaten_ändern	= new JButton("<html><font size = 2>Haus-
Stammdaten 
ändern</font></html>");
	auswertung			= new JButton("<html><font size = 2>Auswertung</font></html>");
	
	stammdaten_Button.setPreferredSize(new Dimension(120, 60));
	weiter.setPreferredSize(new Dimension(120, 60));
	benutzer_anlegen.setPreferredSize(new Dimension(120, 60));
	anwender_loeschen.setPreferredSize(new Dimension(120, 60));
	password_ändern.setPreferredSize(new Dimension(120, 60));
	stammdaten_ändern.setPreferredSize(new Dimension(120, 60));
	auswertung.setPreferredSize(new Dimension(120, 60));
	
	JPanel button_panel = new JPanel(new FlowLayout()); /** button_panel nimmt die Schaltflächen auf **/
	button_panel.add(stammdaten_Button);
	button_panel.add(stammdaten_ändern);
	button_panel.add(weiter);
	button_panel.add(benutzer_anlegen);
	button_panel.add(password_ändern);
	button_panel.add(anwender_loeschen);
	button_panel.add(auswertung);
	
	suedpanel.add(button_panel, BorderLayout.NORTH);
	
	con1.add(nordpanel, BorderLayout.NORTH);
	con1.add(centerpanel, BorderLayout.CENTER);
	con1.add(suedpanel, BorderLayout.SOUTH);
	
	
	/*------------------------------------------------------------*/
	/* Den Schaltflächen den entsprehchenden Listener zuordnen*/
	/*------------------------------------------------------------*/
	stammdaten_Button.addActionListener(new StammdatenListener());
	stammdaten_ändern.addActionListener(new Stammdaten_ändernListener());
	weiter.addActionListener(new WeiterListener());
	benutzer_anlegen.addActionListener(new NeuerBenutzerListener());
	anwender_loeschen.addActionListener(new BenutzerLöschenListener());
	password_ändern.addActionListener(new PasswortÄndernListener());
	auswertung.addActionListener(new AuswertungListener());
	//addWindowListener (new WindowLauscher());
	
	if (Login.angemeldeter_User.equals("sa"))
	{
		stammdaten_Button.setEnabled(true);
		stammdaten_ändern.setEnabled(true);
		benutzer_anlegen.setEnabled(true);
		anwender_loeschen.setEnabled(true);
		password_ändern.setEnabled(true);
	}
	else
	{
		stammdaten_Button.setEnabled(false);
		stammdaten_ändern.setEnabled(false);
		benutzer_anlegen.setEnabled(false);
		anwender_loeschen.setEnabled(false);
		password_ändern.setEnabled(false);
	}
	}
	
	/** Die Methode bearbeitbar() schaltet die Textfelder auf editierbar, wenn
	 ** der Anwender als SA angemeldet ist**/
	public static void bearbeitbar()
	{
		name_text.setEnabled(true);
		straße_text.setEnabled(true);
		plz_text.setEnabled(true);
		ort_text.setEnabled(true);
		ansprechpartner_text.setEnabled(true);
		telefonnummer_text.setEnabled(true);
		kh_plan_nummer_text.setEnabled(true);
		ik_nummer_text.setEnabled(true);
		druckdatum_text.setEnabled(true);
		institution_text.setEnabled(true);
	}
	
	/** Die Methode bearbeitbar() schaltet die Textfelder auf nicht editierbar, wenn
	 ** der Anwender nicht als SA angemeldet ist**/
	public static void nicht_bearbeitbar()
	{
		name_text.setEnabled(false);
		straße_text.setEnabled(false);
		plz_text.setEnabled(false);
		ort_text.setEnabled(false);
		ansprechpartner_text.setEnabled(false);
		telefonnummer_text.setEnabled(false);
		kh_plan_nummer_text.setEnabled(false);
		ik_nummer_text.setEnabled(false);
		druckdatum_text.setEnabled(false);
		institution_text.setEnabled(false);
	}
}
```


----------



## MiDniGG (14. Apr 2008)

OK. Das erklärt, warum du den Quelltext für dich behalten hast ^^

Wie schaut denn überhaupt deine jar-file aus??? Is alles drin was du brauchst? Stimmt die Manifest? Sind alle nötigen libs an der richtigen Stelle???

Gruß


----------



## Alex_winf01 (14. Apr 2008)

Kurzer Bericht:

Jetzt läuft es wieder auch im jar-File. Meine Maßnahme (etwas radikal, aber egal):

Alle .class-Dateien aus meinem Projekt-Ordner gelöscht, neu Compiliert, neues Jar-File erstellt und es läuft!!

Ich vermute mal, es schwierte noch irgendwo Programmcode rum, mit dem das jar-File nix anfangen konnte.

Wenn es noch mal Probleme in der Hinsicht gibt, melde ich mich einfach. Hier habe ich ein sehr kompetentes Forum gefunden. Danke für Eure Hilfe!!!


----------



## thE_29 (14. Apr 2008)

Ich kann dir zu 90% Sicherheit sagen dass das hier schuld war:



> ImageIcon m_icon       = new ImageIcon(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("img/mkg.gif")),"name");



Solche Befehle können in der IDE oder in der Konsole gut gehen und manchmal im jar file nicht!

Am besten immer mit nem Slash anfangen:

/img/mkg.gif

Obwohls bei mir schon paar mal das es andersrum funktionierte und so nicht..


----------



## André Uhres (14. Apr 2008)

Alex_winf01 hat gesagt.:
			
		

> ..Alle .class-Dateien aus meinem Projekt-Ordner gelöscht, neu Compiliert, neues Jar-File erstellt ..


Wenn du eine IDE benutzt, die hat dann sicher eine Funktion "Clean and Build Project" die das automatisch macht :wink:
Dann sollten auch die Bilddateien automatisch dahin kopiert werden, wo sie hingehören.


----------

