.jar-Datei lässt sich unflexibler ausführen als über die IDE

TaktSu

Mitglied
Hallo Leute,

wenn ich mein Programm über eine Ausführbare .jar-Datei erzeuge und dieses dann starte, verhält sich das Programm anders als wenn ich es beispielsweise über Eclipse starte.
Folgendes Problem: Mein Programm beinhaltet zwei Buttons, mit welchem man sich einloggen und Datenbankeinträge vornehmen kann.
Wenn ich das Programm über die .jar-Datei starte, funktioniert beispielsweise nur ein Event eines Buttons. Wenn ich danach ein anders Event ausführen möchte funktioniert es nicht.
Lasse ich aber mein Programm über Eclipse laufen, dann funktionieren beide Events unabhängig voneinander.

Hat jemand eine Idee woran das liegen kann?

Viele Grüße
 
Code:
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JTextField;

public class k
  extends Frame
{

    //Eingabe/ Ausgabe
      Label label,label1, label2, label3, label4, label5, label6, label7, label8, label9, label10;
      JTextField tf, ad, vn, nick, passwort, dbaddr;
      Button button, login;
      k.ButtonListener bL;
     k.Login l;
    
      //MySQL
      //Eingabe
      ResultSet rs = null;
        Connection con = null;
        Statement stmt = null;
        String str;
        String vna;
        String adre;
        String na;
      
        //Objekte
       DaemonThread dt;
        //Verbindung
    
      String ni = null;
        String pw =null;
        String db = null;
  
 
  public k()
  {
    setTitle("MySQL-DBEintragung");
    addWindowListener(new k.TestWindowListener());
  
    setLayout(null);
    //this.l = new k.Login();
    //this.bL = new k.ButtonListener();
    dt = new k.DaemonThread();
  
    dt.start();
 
  
    this.label = new Label("Name");
    this.label.setBounds(150, 10, 100, 15);
    add(this.label);
    this.tf = new JTextField();
    this.tf.setBounds(150, 30, 100, 20);
    this.tf.addActionListener(this.bL);
    add(this.tf);
  
    this.label = new Label("Vorname");
    this.label.setBounds(5, 10, 100, 15);
    add(this.label);
    this.vn = new JTextField();
    this.vn.setBounds(5, 30, 100, 20);
    add(this.vn);
  
    this.label1 = new Label("Adresse");
    this.label1.setBounds(320, 10, 100, 15);
    add(this.label1);
    this.ad = new JTextField();
    this.ad.setBounds(320, 30, 100, 20);
    add(this.ad);
  
    this.label2 = new Label("Nickname");
    this.label2.setBounds(550, 10, 100, 15);
    add(this.label2);
    this.nick = new JTextField();
    this.nick.setBounds(550, 30, 100, 20);
    add(this.nick);
  
    this.label5 = new Label("Passwort");
    this.label5.setBounds(680, 10, 100, 15);
    add(this.label5);
    this.passwort = new JTextField();
    this.passwort.setBounds(680, 30, 100, 20);
    add(this.passwort);
  
    this.label6 = new Label("MySQL-Adress");
    this.label6.setBounds(550, 60, 100, 15);
    add(this.label6);
    this.dbaddr = new JTextField();
    this.dbaddr.setBounds(550, 80, 100, 20);
    add(this.dbaddr);
  
    this.button = new Button("Daten Übertragen");
    this.button.setBounds(5, 60, 150, 20);
    add(this.button);
  
    this.login = new Button("Login");
    this.login.setBounds(680, 80, 100, 20);
    add(this.login);
  
    this.button.addActionListener(this.bL);
    this.login.addActionListener(this.l);
  
    setSize(800, 300);
    setVisible(true);
  }
 
 
 
 
  class DaemonThread extends Thread{
    
      DaemonThread(){
          setDaemon( true );
      }

       
        public void run(){
        
          while ( true ){
              k.this.bL = new k.ButtonListener();
               k.this.l = new k.Login();
             
          }

      }

    
  }
 
 
 
 
 
  public class Login implements ActionListener{
        
       
    
      public void tryBlock()
        {
          try
          {
            k.this.con = DriverManager.getConnection(db, ni, "");
            k.this.stmt = con.createStatement();
          
          // String sql = "INSERT INTO test (name, vorname, adresse) VALUES ('" + this.na + "', '" + this.vna + "', '" + this.adre + "')";
          //  String sql1 = "UPDATE test SET name = 'Eintragxyz' WHERE id = 26";
          //  int rows = stmt.executeUpdate(sql);
            //int rows1 = stmt.executeUpdate(sql1);
          
          //  this.rs = stmt.executeQuery("SELECT* FROM test");
            //while (rs.next()) {
              //this.str = rs.getString("name");
            //}
          }
          catch (SQLException a)
          {
            System.out.println(a);
          }
        }
    
  
    
      public void actionPerformed(ActionEvent e){
        
                 k.this.ni = k.this.nick.getText();
            k.this.pw = k.this.passwort.getText();
           k.this.db =  k.this.dbaddr.getText();
         
           k.this.l.tryBlock();
          
            if(k.this.stmt == null){
                k.this.label7 = new Label("Keine Verbindung aufgebaut");
                  k.this.label7.setBounds(550, 10, 250, 200);
                  k.this.add(k.this.label7);
                }else{
                    k.this.label8 = new Label("Verbindung aufgebaut");
                      k.this.label8.setBounds(550, 10, 250, 200);
                      k.this.add(k.this.label8);
                  
                }
        
        
      }
    
  }
 
 
 
 
 
 
 
 
 
 
  class ButtonListener implements ActionListener
  {
 
  
    ButtonListener() {}
  
    public void TryBlock()
    {
      try
      {
        k.this.con = DriverManager.getConnection(k.this.db, k.this.ni, "");
        k.this.stmt = k.this.con.createStatement();
      
        String sql = "INSERT INTO test (name, vorname, adresse) VALUES ('" + k.this.na + "', '" + k.this.vna + "', '" + k.this.adre + "')";
       String sql1 = "UPDATE test SET name = 'Eintragxyz' WHERE id = 26";
        int rows = k.this.stmt.executeUpdate(sql);
        int rows1 = k.this.stmt.executeUpdate(sql1);
      
        k.this.rs = k.this.stmt.executeQuery("SELECT* FROM test");
      }
      catch (SQLException a)
      {
        System.out.println(a);
      }
    }
  
    public void actionPerformed(ActionEvent e)
    {
    
      k.this.na = k.this.tf.getText();
      k.this.label4 = new Label(k.this.na);
      k.this.label4.setBounds(200, 10, 100, 200);
      k.this.add(k.this.label4);
    
      k.this.vna = k.this.vn.getText();
      k.this.label9 = new Label(k.this.vna);
      k.this.label9.setBounds(55, 10, 100, 200);
      k.this.add(k.this.label9);
    
      k.this.adre = k.this.ad.getText();
      k.this.label10 = new Label(k.this.adre);
      k.this.label10.setBounds(370, 10, 100, 200);
      k.this.add(k.this.label10);
    
      k.this.label3 = new Label(k.this.str);
      k.this.label3.setBounds(320, 10, 100, 200);
      k.this.add(k.this.label3);
      k.this.bL.TryBlock();
    
      if (k.this.stmt == null)
      {
        k.this.label7 = new Label("Keine Verbindung. Bitte einloggen.");
        k.this.label7.setBounds(550, 10, 250, 200);
        k.this.add(k.this.label7);
      }
      else
      {
        k.this.label8 = new Label("Daten wurden übertragen");
        k.this.label8.setBounds(550, 10, 250, 200);
        k.this.add(k.this.label8);
      }
    }
  }
 
  class TestWindowListener
    extends WindowAdapter
  {
    TestWindowListener() {}
  
    public void windowClosing(WindowEvent e)
    {
      e.getWindow().dispose();
      System.exit(0);
    }
  }
 
  public static void main(String[] args)
  {
    new k();
  }
}


Mist, ich dachte dass das eventuell ein typisches Problem sei.
Hier aber mein Quelltext. "Schön" sieht ein Quellcode wohl anders aus... Mal ganz zu schweigen von den unnötig deklaierten "labels" bei den Feldvariablen..... Also nicht gleich in die Luft gehen 😀
 
Und was funktioniert und was funktioniert nicht?


BTW:
Hier aber mein Quelltext. "Schön" sieht ein Quellcode wohl anders aus... Mal ganz zu schweigen von den unnötig deklaierten "labels" bei den Feldvariablen..... Also nicht gleich in die Luft gehen 😀
"Schöner" Quellcode macht die Fehlersuche für dich deutlich einfacher bzw verhindert Fehler direkt.
 
Also wenn ich meinen code über eine .jar-runnable ausführe, funktioniert nur ein Button.
Wenn ich mich beispielsweise falsch eingeloggt habe, dann kann ich es nicht nochmal versuchen ohne das Programm neustarten zu müssen. Wenn ich zuerst auf "Daten übertragen" gehe, ohne mich eingeloggt zu haben, dann kann ich auch nicht versuchen mich wieder erneut einzuloggen und dann meine Daten zu übertragen.
Ich habe das Gefühl, als sei das Programm nach einem Event einfach "durchgelaufen".
--> Aber über die IDE geht das alles...

Edit: Ich habe heute irgendwo gelesen, dass jedes Betriebssystem anders mit Threads umgeht.
Könnte es vielleicht daran liegen? Ein Frame läuft ja über ein Thread soweit ich weiß.
 
Zuletzt bearbeitet:
Gibts Exceptions?


(Mein Rat: Strukturier den Code neu und versuche dich an irgendwelche Konventionen zu halten, ich würde drauf Wetten, dass der Fehler dann weg ist)
 
Könnte es vielleicht daran liegen : "In Java ist auch multithreaded Software möglich, wenn das Betriebssystem des Rechners keine Threads direkt verwendet. In diesem Fall simuliert die virtuelle Maschine die Parallelität, indem sie die Synchronisation und die verzahnte Ausführung regelt. Unterstützt das Betriebssystem Threads direkt, bildet die JVM die Thread-Verwaltung in der Regel auf das Betriebssystem ab. Dann haben wir es mit nativen Threads zu tun."

Quelle: http://openbook.rheinwerk-verlag.de...14_001.htm#mj8c6f381221d805dd6fbe480731ac0c58

Nutze selber Linux-Ubuntu

Edit: Sorry for Doppelpost
 
Ahhhhh. ich habe nun auch die .java-Datei über mein Terminal ausgeführt und nicht nur die .jar-Datei!
Und siehe da: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/test
Dabei habe ich die MySQl-Pakete importiert... zumindest in Eclipse.
Edit: Also wenn ich das alles über Eclipse laufen lasse funktioniert alles...
 

Neue Themen


Zurück
Oben