Hallo!
Bin grad dabei eine GUI zu erstellen, auf der eine JComboBox auftaucht.
Hab nach genau dem gleichen Prinzip an anderer Stelle schon erfolgreich programmiert, aber folgender Code verursacht NullPointerException.
Findet jemand den Fehler?
Bin grad dabei eine GUI zu erstellen, auf der eine JComboBox auftaucht.
Hab nach genau dem gleichen Prinzip an anderer Stelle schon erfolgreich programmiert, aber folgender Code verursacht NullPointerException.
Findet jemand den Fehler?
Code:
#Absender.ini
#Konfigurationen der moeglichen Absenderadressen
#Diese Datei legt fest, welche Absenderadressen im Drop-Down-Menue angeboten werden
# Stepanski Tue Apr 20 2010
Person1@blabla.org
Person2@blabla.org
Code:
/**
*
*/
package adresses;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Properties;
import javax.swing.JComboBox;
import application.Application;
/**
* Diese Klasse bietet alle Methoden, um die Konfigurationsdatei der
* moeglichen Absender auszulesen
* @author Stepanski
*
*/
public class Sender {
static JComboBox cb1;
/**
* Diese Methode liest Schlüssel der Datei aus
* und schreibt diese dann in ein String[]
* @return String[] senderArray
*/
public static String[ ] getSender() {
//String[] anlegen
String [ ] senderArray = null;
//Konfigurationsdatei wird eingelesen
InputStream is;
try {
is = new FileInputStream(new File(
Application.path+"Absender.ini"));
//Instanz der Properties-Klasse erzeugen
//->verwaltet Schlüssel/Wertepaare als Strings
Properties prop = new Properties();
//Instanz wird Datei übergeben
prop.load(is);
//StringArray anlegen, indem Schlüssel stehen
senderArray = new String [prop.size()];
prop.keySet().toArray(senderArray);
//FileInputStream schließen
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return senderArray ;
}
/*
* Methoden, um Absender-Auswahl zu erstellen
*/
/**
* Diese Methode fuellt die JComboBox, welche im Auswahl-Dialog
* eingebettet wird
*/
public static void fillAdressCombo(){
String [] adressen = getSender();
Arrays.sort(adressen);
for (String i:adressen) {
System.out.println(i);
cb1.addItem(i);
}
}
}
Code:
package login;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import adresses.Sender;
import client.Client;
/**
* Diese Methode erzeugt ein LogIn-Fenster.
* Bei Eingabe eines registrierten Nutzers mit dazugehörigem Passwort
* wird das Hauptprogramm geöffnet.
* @author Stepanski
*
*/
public class LogIn extends JFrame{
private static final long serialVersionUID = 1L;
/*Attribute*/
Container container;
JPanel p;
JLabel user;
JComboBox cb1;
JButton login;
/*Konstruktor*/
/**
* Diese Methode enthält einen Konstruktor, welcher ein
* LogIn-Fenster erzeugt.
*/
public LogIn(){
super();
this.createLogIn();
this.setName("LogIn");
this.setSize(400, 200);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2 ;
setLocation(x, y);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.pack();
}
/**
* Diese Methode legt das Aussehen des
* Panels auf dem LogIn-Fenster fest.
*/
private void createLogIn() {
Container cp = this.getContentPane();
p = new JPanel();
// GridBagLayout, um individuelles Aussehen zu ermöglichen
GridBagLayout gbl = new GridBagLayout();
p.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridheight = 1;
c.gridwidth = 1;
c.insets = new Insets(10,10,10,10);
user = new JLabel("Benutzername: ");
p.add(user, c);
////////////////////////////////////////////////////////////
// ComboBox mit Adressen aufrufen
cb1 =new JComboBox();
c.gridx=1;
c.gridwidth=2;
p.add(cb1, c);
Sender.fillAdressCombo();
// KeyListener ermoeglicht Bestaetigung des Passwortes mit
// der Taste "ENTER"
cb1.addKeyListener(new KeyListener () {
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if ( key == KeyEvent.VK_ENTER){
// Liste aller angelegten Nutzer
String nutzer = (String) cb1.getSelectedItem();
System.out.println(nutzer);
// neues Hauptfenster oeffnen
Client client = new Client();
client.setAbsender(nutzer);
// LogIn-Fenster "unsichtbar" machen
LogIn.this.setVisible(false);
// gibt Speicher wieder frei
dispose();
}else
JOptionPane.showMessageDialog(null,
"Anmeldung fehlgeschlagen",
"Error Message", JOptionPane.ERROR_MESSAGE);
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
});
login = new JButton("ENTER");
c.gridx = 3;
c.gridy = 2;
c.insets = new Insets(20,10,10,0);
p.add(login, c);
// gleiche Aktion wie bei KeyListener, nur das diesmal auf
// druecken des Buttons reagiert wird
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
String nutzer = (String) cb1.getSelectedItem();
System.out.println("Nutzer: "+nutzer);
LogIn.this.setVisible(false);
// gibt Speicher wieder frei
dispose();
Client client = new Client();
client.setAbsender(nutzer);
}
});
cp.add(p, BorderLayout.CENTER);
}
}
Code:
package application;
import login.LogIn;
/**
* Diese Klasse enthaelt die main-Mathode und startet die Applikation
* @author Stepanski
*
*/
public class Application {
public static final String path = "D:\\E-Mail-Client\\";
public static void main (String[] args){
new LogIn();
}
}