Passwortgenerator

julian.veh

Bekanntes Mitglied
Hi All

Ich habe einen Passworgenerator geschrieben der auch funktioniert. Gestern Abend kam mir dann die Idee eine Benutzeroberfläche zu erstellen also das man Fenster hat usw. ;D. Habe ein Java Buch wo alles ziemlich gut erklärt war und heute das Programm geschrieben, welches allerdings nicht funktioniert. Ich finde schon nach langem Suchen den Fehler nicht. Hoffe ihr könnt mir helfen und das möglichst einfach erklären falls es was zu erklären :) lG!

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


class PwGenerator 
{
    public static void main (String[] args)
    {
       JFrame frame1 = new JFrame("Passwortgenerator");
       JLabel label1 = new JLabel("Anzahl der Zeichen des Passworts");
       JTextField tf1 = new JTextField("Hier eintragen!");
       JButton button1 = new JButton("Generieren");
       
       button1.addActionListener(new Knopf1());
       
       
       
       frame1.setLayout (new FlowLayout());
       frame1.setSize(400,200);
       
       frame1.add (label1);
       frame1.add (tf1);
       frame1.add (button1);
       
       frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame1.setVisible(true);
       
       
    }
}

class Knopf1 implements ActionListener
{    
    private JTextField tf1;
    public void actionPerformed(ActionEvent action)
    {
       String anzahl = tf1.getText();
       int zeichen = new Integer(anzahl);
       
       Random rand = new Random();
       
       String eZeichen = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
       
       String passwort = "";
       int a = zeichen;
       char b;
       
        
       while(a > 0)
       {
            
           b = eZeichen.charAt(rand.nextInt(eZeichen.length()));
           passwort = passwort + b;
           a = a-1;
       }
       
       tf1.setText("" + passwort);
              
    }
        
}

Problem ist dass wenn ich eine Zahl eingegeben habe und auf den Knopf drück das Programm abstürzt und folgendes wird ausgegeben, falls das hilf:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Knopf1.actionPerformed(PwGenerator.java:39)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 

Schandro

Top Contributor
die Variable tf1 der Klasse Knopf1 ist null. Du musst einen Konstruktor in der Klasse Knopf1 erstellen der als Parameter das tf1 aus der main-Methode bekommt und der Membervariable tf1 zuweist.
 

XHelp

Top Contributor
In Zeile 36 deklarierst du ein neues TextFeld, das hat ja mit dem aus Zeile 13 nichts zu tun. Deswegen kommt der Fehler.
Aber so wie deine Architektur aussieht kommst du auch gar nicht an das richtige Textfeld ran.
Versuch mal deine GUI aus der Main in eine eigene Klasse zu schieben.
 

Schandro

Top Contributor
Ich würde dir aber unbedingt zu anonymen Klasse für Listener raten, gibt nur wenige Situationen in denen eine echte Klasse die nen Listener implementiert besser ist. Anonyme Klassen sind einfach direkt am "Ort des Geschehens" und kompakter.
 

Schandro

Top Contributor
Ich habs mal den ActionListener in ne anonyme Klasse gemacht:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
 
 
class PwGenerator 
{
    public static void main (String[] args)
    {
       JFrame frame1 = new JFrame("Passwortgenerator");
       JLabel label1 = new JLabel("Anzahl der Zeichen des Passworts");
       final JTextField tf1 = new JTextField("Hier eintragen!");
       JButton button1 = new JButton("Generieren");
       
       button1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent action)
			{
			   String anzahl = tf1.getText();
			   int zeichen = new Integer(anzahl);
			   
			   Random rand = new Random();
			   
			   String eZeichen = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
			   
			   String passwort = "";
			   int a = zeichen;
			   char b;			   
				
			   while(a > 0)
			   {
					
				   b = eZeichen.charAt(rand.nextInt(eZeichen.length()));
				   passwort = passwort + b;
				   a = a-1;
			   }
			   
			   tf1.setText("" + passwort);
					  
			}
	   });
       
       
       
       frame1.setLayout (new FlowLayout());
       frame1.setSize(400,200);
       
       frame1.add (label1);
       frame1.add (tf1);
       frame1.add (button1);
       
       frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame1.setVisible(true);
       
       
    }
}
 

Neue Themen


Oben