# Null Pointer Exception bei JTextField setText



## Vril (10. Aug 2005)

Hallo,
hab folgendes versucht:

```
public void mouseClicked(MouseEvent e){
...
...
....

String Namen = "Huber";
andereKlasse.TF_Name.setText(Namen);
new andereKlasse();
```
Bei dem setText bekomme ich allerdings eine java.lang.NullPointerException
In andereKlasse wird das JTextField so erstellt: public static JTextField TF_Name;
TF_Name = new JTextField();

Weis da jemand was ich falsch mache?


----------



## Guest (10. Aug 2005)

Wo wird in andereKlasse das 

```
TF_name = new TextField();
```

gerufen? Wenn es im Konstruktor von andereKlasse steht, wird es erst initialisiert, wenn du eine Instanze von andereKlasse erzeugt hast. Du müßstest dann wahrscheinlich so vorgehen:


```
class andereKlasse
{
    public static JTextField TF_name = new JTextField();
    ...
}
```


----------



## Vril (10. Aug 2005)

Also das JTextField wird in andereKlasse hier erzeugt:

```
public void initComponents() {
.....

}

public andereKlasse(){
initComponents();
```


----------



## thE_29 (10. Aug 2005)

Wird das initComponents auch aufgerufen??


Mach einfach mal ein System.out.println(andereKlasse.TF_name);

wenn da null steht, wird es nicht aufgerufen ^^


----------



## Tobias (10. Aug 2005)

Am einfachsten erscheint es mir, wenn du mal nen Debugger anwirfst... Ist vielleicht kein superhilfreicher Tipp, aber so kann ich nur ins Blaue hineinraten, wo dein Initialisierungsfehler (und ein solcher ist es wohl recht sicher) liegt.

mpG
Tobias


----------



## Vril (10. Aug 2005)

Im Gegenzug funktioniert

```
String Name = andereKlasse.TF_Name.getText();
```
das. Also wenn in dem TextField was steht kann ich es auslesen! Aber warum kann ich nicht setText machen?

Hab jetzt auch mal System.out.println(andereKlasse.TF_Name) gemacht, es wird null ausgegeben! Heisst das jetzt null weil noch nichts drin steht oder läuft noch was anderes falsch?


----------



## mic_checker (10. Aug 2005)

Also mal was prinzipielles:
Du bist doch nun schon lang genug dabei (länger als ich) u. müsstest eigentlich wissen das man sich an best. Richtlinien hält, bzgl. Variablen klein schreiben, Kapselung etc.

Wenn du die Dinge beachtest treten manche solcher Probleme schon mal nicht auf, bzw. man erkennt sie schneller (und der Code ist einfach schöner).

Eine Abfrage ob das Textfeld null ist liefert true ? Dann kontrollier mal ganz genau wo wie welche Methode aufgerufen wird und ob nicht evtl. auch ein Sichtbarkeitsbereichs-Problem vorliegt (also das du zwei Textfelder mit dem Namen hast - ist alles schon vorgekommen).

Wenn alles nichts hilft -> kompletten Code posten.


----------



## 8ull23y3 (11. Aug 2005)

Vril haste immernoch diesen GUI-Builder? Mal an das gedacht was ich dir letzens schonmal im Chat empfohlen habe?
Guck mal nach ob due vielleicht wieder zwei Variablen hast mit dem gleichen Namen und ob die eine Wieder innhalb eines Konstruktors oder einer Methode deklariert und instaziert wurd!! Das scheint mir fast das gleiche Problem zu sein wie mit deinem JTable letzens...  :lol:
Les dir das hier mal durch hab ich grad gefunden so nen kleiner Überblick http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Variable.htm


----------



## thE_29 (11. Aug 2005)

@vril: wenn dort null ausgegeben wird, dann ist das Objekt null nicht der Inhalt!!

Also wurde noch kein new gemacht!

Und dass das getText() in der gleichen Klasse geht, in der gleichen Zeile wie setText funktioniert glaube ich dir nicht... (glaube da wird sich ein Fehler eingeschlichen haben, so wie bullzeye das meint!)


----------



## Vril (11. Aug 2005)

@8ull23y3
Ja, also an das Problem letztens hab ich natürlich gedacht, aber leider wars das nicht!

@thE_29
Also wie gesagt, getText funktioniert, setText funktioniert nicht. Das sich bei ca. 2000 Zeilen ein Fehler eingeschlichen hat glaube ich allerdings schon.

Fazit:
Habe jetzt wirklich stundenlang rumbrobiert und nichts gefunden. Ich wills ja überhaupt nicht sagen,   , hab das Problem jetzt anders gelöst. Hab für jedes TextField einen String gemacht der dem TextField anfangs als String sTF_1 = "" übergeben wird, soll was verändert werden mache ich nur andereKlasse.sTF_1 = "was verändert".... so klappts zumindest. Gegen welche Programmierregeln ich da jetzt alles verstossen hab will ich garnicht wissen.... :? 

Aber auf jeden Fall danke für eure Tipps!!!


----------



## mic_checker (11. Aug 2005)

wenn du willst kannst du mir den code mal zuschicken, denn es muss funktionieren.

du solltest einfach mal anfangen best. sachen von anfang an einzuhalten, das macht es auch einfacher den code nachher wieder zu lesen....


----------



## Vril (11. Aug 2005)

@mic_checker
Ok, also wenn du dir das wirklich mal geben willst schick ich dir das gerne mal zu! Bräuchte nur noch ne EMail von dir, weil das Board damit vollstopfen ist bei der länge wohl nicht so gut?


----------



## thE_29 (11. Aug 2005)

Ich glaub noch immer das es ein schreibfehler sein wird!

Ein Objekt was null ist, kann weder get noch set....

@mic_checker: poste bitte dann den Fehler!


----------



## mic_checker (11. Aug 2005)

Vril: kann es sein das das der falsch source war den du mir geschickt hast ? kann da nichts von nem TF_Name sehen.


----------



## Vril (11. Aug 2005)

Ne, der Source dürfte schon passen! TF_* sind da einige, TF_Name hab ich eigentlich nur hier im Board geschrieben. Im Source heissen sie halt TF_Temperatur oder TF_Email.


----------



## mic_checker (11. Aug 2005)

achso - die info wäre vorher ganz praktisch gewesen 

betrifft das alle oder einen bestimmten ?


----------



## 8ull23y3 (11. Aug 2005)

/me meint zu den letzen 2 Posts  :lol: Und beobachtet weiter was vril baut


----------



## mic_checker (11. Aug 2005)

also wie oben angedeutet, solltest du mal genauer spezifizieren wo das problem auftritt.

ich habe das ganze jetzt zum kompilieren bekommen, auch wenn ich ein paar sachen auskommentieren musste (weil ich nicht über alle pakete verfüge).

Wo wird die Exception ausgelöst ? wenn du auf was drückst / bzw. was machst ?

Noch was.
Ich bin froh das ich eben nicht gegessen hab , ansonsten wär es mir glatt wieder alles hochgekommen, als ich deinen Code gesehen hab


----------



## Vril (11. Aug 2005)

Na jetzt mal nicht beschweren, du hast dich freiwillig gemeldet den Source mal durchzusehen!  :wink: 
Zugegeben, GUI-Editor+mein Codestyle =   

Also das gesamte Package hab ich nicht geschickt weil ja die Meinung kursierte das mit den Textfeldern selbst, also Schreibfehler o.ä., was nicht stimmt.

Mein Problem ist das ich die Textfelder aus einer anderen Klasse zwar mit get bekomme aber mit set nicht setzen kann. Das z.b. TF_Problem.TF_Temperatur.setText("Hallo"); zwar compilet wird, aber beim ausführen die besagte Exception geworfen wird.


----------



## 8ull23y3 (11. Aug 2005)

Sacht wieder :lol: diesmal an mic_checker ham wa dem Herrn Vril gestern schon gesagt das der den GUI-Builder weghauen soll... Würd mir den Code gern auch mal angucken. Aber denke das sind fähige Leute die dir da helfen ansonsten 8ull23y3@web.de aba nich spamen!


----------



## mic_checker (11. Aug 2005)

Dann schick mal den Teil mit TF_Problem auch noch rüber, bei ner NPE sind die von uns genannten Gründe nur häufige, das heisst nicht das es bei dir mal anders sein kann


----------



## Vril (11. Aug 2005)

Ok, also ich hab die Mainklasse, MyMain, jetzt drastisch gekürzt, das Problem besteht weiter! Siehe Zeile 164! Brauchst eigentlich nur noch in TF_Problem den String aus TF_Temperatur rauswerfen und schon müsstes du das Problem beim ausführen in der DOS Box sehen!


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.awt.Toolkit;
import java.sql.*;
import java.util.*;
import javax.swing.table.*;
import com.jgoodies.forms.factories.*;
import com.jgoodies.looks.windows.*;

public class MyMain extends JFrame implements ActionListener {
  
  //Vector[] Spalten;
  //public static MyTableModel dataModel;
	public MyMain() {
		int x = getToolkit().getScreenSize().width;
		int y = getToolkit().getScreenSize().height;
		setSize(getToolkit().getScreenSize());
		
		int x1 = getToolkit().getScreenSize().width;
			int y1 = getToolkit().getScreenSize().height;
			JScrollPane scrollPane1 = new JScrollPane(table1);
	
		getContentPane().add(scrollPane1);
		//getContentPane().add(table1);
		initComponents();
		//setGUI();
		//assignIcon();
		setVisible(true);
	}
		private void initComponents() {
		
		menuBar1 = new JMenuBar();
		JMenu_File = new JMenu();
		menuItem_Open = new JMenuItem();
		menuItem_Save = new JMenuItem();
		menuItem_SaveAs = new JMenuItem();
		menuItem_Exit = new JMenuItem();
		JMenu_Edit = new JMenu();
		menuItem_Delete = new JMenuItem();
		menuItem_Search = new JMenuItem();
		JMenu_Configure = new JMenu();
		checkBoxMenuItem_enableTooltips = new JCheckBoxMenuItem();
		JMenu_Help = new JMenu();
		menuItem_About = new JMenuItem();
		//scrollPane1 = new JScrollPane();
		//table1 = new JTable();

		//======== this ========
		setTitle("TF Problem ~ Beta");
		Container contentPane = getContentPane();
		contentPane.setLayout(new FlowLayout(FlowLayout.CENTER));

		//======== menuBar1 ========
		{
			
			//======== JMenu_File ========
			{
				JMenu_File.setText("File");
				JMenu_File.setMnemonic('F');
				
				//---- menuItem_Open ----
				menuItem_Open.addActionListener(this);
				menuItem_Open.setText("Open");
				menuItem_Open.setMnemonic('O');
				JMenu_File.add(menuItem_Open);
				
				//---- menuItem_Save ----
				menuItem_Save.addActionListener(this);
				menuItem_Save.setText("Save");
				menuItem_Save.setMnemonic('S');
				JMenu_File.add(menuItem_Save);
				
				//---- menuItem_SaveAs ----
				menuItem_SaveAs.addActionListener(this);
				menuItem_SaveAs.setText("Save As...");
				menuItem_SaveAs.setMnemonic('A');
				JMenu_File.add(menuItem_SaveAs);
				JMenu_File.addSeparator();
				
				//---- menuItem_Exit ----
				menuItem_Exit.addActionListener(this);
				menuItem_Exit.setText("Exit");
				menuItem_Exit.setMnemonic('E');
				JMenu_File.add(menuItem_Exit);
			}
			menuBar1.add(JMenu_File);
			
			//======== JMenu_Edit ========
			{
				JMenu_Edit.setText("Edit");
				JMenu_Edit.setMnemonic('E');
				
				//---- menuItem_Delete ----
				menuItem_Delete.addActionListener(this);
				menuItem_Delete.setText("Delete");
				menuItem_Delete.setMnemonic('D');
				JMenu_Edit.add(menuItem_Delete);
				
				//---- menuItem_Search ----
				menuItem_Search.addActionListener(this);
				menuItem_Search.setText("Search");
				menuItem_Search.setMnemonic('S');
				JMenu_Edit.add(menuItem_Search);
			}
			menuBar1.add(JMenu_Edit);
			
			//======== JMenu_Configure ========
			{
				JMenu_Configure.setText("Configure");
				JMenu_Configure.setMnemonic('C');
				
				//---- checkBoxMenuItem_enableTooltips ----
//				checkBoxMenuItem_enableTooltips.addItemListener(this);
				checkBoxMenuItem_enableTooltips.setText("enable Tooltips");
				checkBoxMenuItem_enableTooltips.setSelected(true);
				checkBoxMenuItem_enableTooltips.setMnemonic('E');
				JMenu_Configure.add(checkBoxMenuItem_enableTooltips);
			}
			menuBar1.add(JMenu_Configure);
			
			//======== JMenu_Help ========
			{
				JMenu_Help.setText("Help");
				JMenu_Help.setMnemonic('H');
				
				//---- menuItem_About ----
				menuItem_About.addActionListener(this);
				menuItem_About.setText("About");
				menuItem_About.setMnemonic('A');
				JMenu_Help.add(menuItem_About);
			}
			menuBar1.add(JMenu_Help);
		}
		setJMenuBar(menuBar1);
}
	private JMenuBar menuBar1;
	private JMenu JMenu_File;
	private JMenuItem menuItem_Open;
	private JMenuItem menuItem_Save;
	private JMenuItem menuItem_SaveAs;
	private JMenuItem menuItem_Exit;
	private JMenu JMenu_Edit;
	private JMenuItem menuItem_Delete;
	private JMenuItem menuItem_Search;
	private JMenu JMenu_Configure;
	private JCheckBoxMenuItem checkBoxMenuItem_enableTooltips;
	private JMenu JMenu_Help;
	private JMenuItem menuItem_About;
	public JScrollPane scrollPane1;
	public JTable table1;

	 public void actionPerformed(ActionEvent event){
   
   	if (event.getActionCommand() == "Exit"){
   		System.exit(0);
   	}
   	  
   	if (event.getActionCommand() == "Open"){
			//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!HIER			
			TF_Problem.TF_Temperatur.setText("Hallo");  	
   		new TF_Problem(); 
   	}
   	}
  	//Main
	public static void main(String[] args){
		new MyMain();
		
	}
	}
```


----------



## mic_checker (11. Aug 2005)

Deine Textfelder sind static in TF_Problem - Allerdings wird die init Methode ja gar nicht aufgerufen, wenn du auf die Textfelder zugreifst, deswegen ne NPE - so siehts zumindest für mich aus.


----------



## Vril (11. Aug 2005)

Ja, musste ich ja static machen die Dinger, sonst hätte es ja schon beim compilen nicht geklappt! Ok, das mit init würde einleuchten! Aber wie macht man es dann richtig bzw. sinnvoll?


----------



## mic_checker (11. Aug 2005)

Du erzeugst ein Objekt vom Typ TF_Problem, da wird ja dann deine init Methode aufgerufen, danach solltest du auf die Textfelder zugreifen können.


----------



## mic_checker (13. Aug 2005)

hast es mittlerweile mal damit probiert ? würd mich wundern wenn es immer noch nicht klappt...


----------

