SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters

H

Hotzenplotz

Gast
Hallo!

Ich weiß das Thema wurde hier schon oft besprochen aber ich glaube meins weicht einen ticken von den ganzen in einer Sache ab:

Ich erzeuge in meiner Haupt-GUI-Klasse ein neues Fenster das ich in der uploadDialog-Klasse beschrieben habe über:
Java:
uploadDialog ud = new uploadDialog(shlTest, SWT.NONE);
ud.open();

in dieser uploadDialog-Klasse habe ich zum Beispiel auch ein Textfeld drin und sozusagen eine Setter-Methode für dieses Textfeld die folgendermaßen aussieht:

Java:
public static void setTxt_UpTime(final String s) {
	Display.getDefault().asyncExec( new Runnable() {
		@Override
		public void run() {
			if ( s != null ) {
				txt_UpTime.setText(s);
			}
		}	
	});	
}

Diese Methode kann ich auch ohne Probleme aus einem Thread welcher im uploadDialog gestartet wird aufrufen und der Text wird je nach übergebenem String geändert.

In der display-Klasse (meinem Hauptfenster) habe ich das ganze mit einer setter-Methode für ein Textfeld in dieser analog gemacht.
Allerdings bekomme ich wenn ich aus dem Thread ODER aber dem uploadDialog die setter Methode aus der display-Klasse aufrufe die NullPointerException.

Ich bin noch relativ neu in JAVA und SWT aber ich habe das Gefühl, dass durch den geöffneten uploadDialog mein Hauptfenster blockiert wird, weshalb ich versucht habe den uploadDialog als eigenen Thread zu starten. Aber dann erscheint nach Klick auf den entsprechenden Button
mein uploadDialog erst gar nicht.
Eine weitere Möglichkeit wäre ja das zu ändernde Textfeld erst der uploadDialog-klasse zu übergeben und darauf dann dem Thread der was dort reinschreiben soll.

Allerdings würde ich es schicker finden wenn ich das ganze doch irgendwie über die Setter Methode hinkriegen kann...

Ich hoffe ihr könnt mir ohne weiteren Code weiterhelfen, ansonsten kann ich natürlich gerne noch etwas nachhelfen.

Gruß und danke schonmal für eure Hilfe
Hotzenplotz
 

Bizarrus

Bekanntes Mitglied
Wie übergibst du denn die Instanz?
Irgendwie müssen die "Unterklassen" ja wissen, mit wem diese kommunizieren sollen.

Java:
public class meineGui {
	public meineGui() {
		new Unterklasse(this); // MIT instanz
	}

	public void setterMethode(String text) {
		System.out.println("Bekomme: " + text);
	}
}

public class Unterklasse {
	protected meineGui instanz = null;

	public Unterklasse(meineGui test) {
		this.instanz = test; // Übergebene Instanz setzen

		this.instanz.setterMethode("LOOOL"); // Ansprechen der Methode aus der Hauptklasse
	}
}
 
H

Hotzenplotz

Gast
Hallo!
Ich habe gerade nochmal probiert ein simples Beispiel zu code mit dem ich verdeutlichen kann was genau mein Problem ist und dort tritt der Fehler komischerweise nicht auf! Komisch
Ich suche jetzt nochmal was und melde mich dann später nochmal.
 
H

Hotzenplotz

Gast
Ok ich habe jetzt mal weiter nachgeforscht.....

Und zwar tritt der Fehler bzw die NullPointerException nur auf wenn ich versuche über eine Setter Methode den Text eines "StyledText"-Objektes zu ändern.
Wenn der styledText allerdings direkt in der Main-Methode des Fenster beim Klick des Buttons, also beim actionevent geändert wird, dann klappt es komischerweise. So komme ich aber nicht von der anderen Klasse an den styledText ran...

Hier mal meine Beispielklassen falls das jemand ausprobieren möchte :-/

mainWindow:
[Java]
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Button;


public class mainWindow {
private static Text txtMWTxt;
private static StyledText styledText;

/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
shell.setLayout(new GridLayout(1, false));

Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu);

MenuItem mntmFile = new MenuItem(menu, SWT.CASCADE);
mntmFile.setText("File");

Menu menu_1 = new Menu(mntmFile);
mntmFile.setMenu(menu_1);

MenuItem mntmTestdialog = new MenuItem(menu_1, SWT.NONE);
mntmTestdialog.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
testDialog tD = new testDialog(shell, SWT.NONE);
tD.open();
}
});
mntmTestdialog.setText("testDialog");

final StyledText styledText = new StyledText(shell, SWT.BORDER);
styledText.setText("styledText");
styledText.setEditable(false);
styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
new Label(shell, SWT.NONE);

Button btnStyledtext = new Button(shell, SWT.NONE);
btnStyledtext.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
styledText.append( " Kein Absturz!" );
}
});
btnStyledtext.setText("styledText ohne Setter");

Button btnStyledtextMitSetter = new Button(shell, SWT.NONE);
btnStyledtextMitSetter.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setStyledText( "Absturz!" );
}
});
btnStyledtextMitSetter.setText("styledText mit Setter");
new Label(shell, SWT.NONE);
new Label(shell, SWT.NONE);
new Label(shell, SWT.NONE);

txtMWTxt = new Text(shell, SWT.BORDER);
txtMWTxt.setText("Text\u00E4nderung hier gibt NullPointerException");
txtMWTxt.setEditable(false);
txtMWTxt.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}

public static void setTxtMWTxt(final String s) {
Display.getDefault().asyncExec( new Runnable() {
@Override
public void run() {
txtMWTxt.setText( s );
}
});
}

public static void setStyledText(final String s) {
Display.getDefault().asyncExec( new Runnable() {
@Override
public void run() {
styledText.append( s + "\n");
}
});
}

}
[/Java]


testDialog:
[Java]
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.custom.StyledText;


public class testDialog extends Dialog {

protected Object result;
protected Shell shell;
private static Text txtDTxt;
private static StyledText styledText;

/**
* Create the dialog.
* @param parent
* @param style
*/
public testDialog(Shell parent, int style) {
super(parent, style);
setText("SWT Dialog");
}

/**
* Open the dialog.
* @return the result
*/
public Object open() {
createContents();
shell.open();
shell.layout();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return result;
}

/**
* Create contents of the dialog.
*/
private void createContents() {
shell = new Shell(getParent(), getStyle());
shell.setSize(450, 300);
shell.setText(getText());
shell.setLayout(new GridLayout(2, false));
new Label(shell, SWT.NONE);
new Label(shell, SWT.NONE);
new Label(shell, SWT.NONE);

Button btnTextHier = new Button(shell, SWT.NONE);
btnTextHier.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setTxtDTxt( "Kein Absturz vom Dialog aus!" );
}
});
btnTextHier.setText("Text hier");
new Label(shell, SWT.NONE);

Button btnStyledtextHier = new Button(shell, SWT.NONE);
btnStyledtextHier.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
styledText.append( " Kein Absturz!");
//setStyledTxtDTxt( "Absturz!" );
}
});
btnStyledtextHier.setText("StyledText Hier");
new Label(shell, SWT.NONE);

txtDTxt = new Text(shell, SWT.BORDER);
txtDTxt.setEditable(false);
txtDTxt.setText("Text");
txtDTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
new Label(shell, SWT.NONE);

StyledText styledText = new StyledText(shell, SWT.BORDER);
styledText.setEditable(false);
styledText.setText("StyledText");
styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
new Label(shell, SWT.NONE);

Button btnTextHauptfenster = new Button(shell, SWT.NONE);
btnTextHauptfenster.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
mainWindow.setTxtMWTxt( "Kein Absturz vom Dialog aus!" );
}
});
btnTextHauptfenster.setText("Text Hauptfenster");
new Label(shell, SWT.NONE);

Button btnStyledtextHauptfenster = new Button(shell, SWT.NONE);
btnStyledtextHauptfenster.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
mainWindow.setStyledText( "Absturz!" );
}
});
btnStyledtextHauptfenster.setText("StyledText Hauptfenster");
new Label(shell, SWT.NONE);

Button btnThread = new Button(shell, SWT.NONE);
btnThread.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
startThread().start();
}
});
btnThread.setText("Thread starten");

}


private static Thread startThread() {
return new Thread() {
public void run() {
testThread.tuWas();
}
};
}


public static void setStyledTxtDTxt(final String s) {
Display.getDefault().syncExec( new Runnable() {
@Override
public void run() {
styledText.append( s );
}
});
}


public static void setTxtDTxt(final String s) {
Display.getDefault().asyncExec( new Runnable() {
@Override
public void run() {
txtDTxt.setText( s );
}
});
}

}
[/Java]

testThread:
[Java]

public class testThread {
public testThread()
{
super();
}

public static void tuWas() {

testDialog.setTxtDTxt( "Kein Absturz vom Thread aus beim Text im testDialog!" );

mainWindow.setTxtMWTxt( "Kein Absturz vom Thread aus beim Text im mainWindow!" );

mainWindow.setStyledText( "Absturz vom Thread aus!" );
}

}
[/code]
 
H

Hotzenplotz

Gast
Ok ich habe den (doofen) Fehler gefunden...

Statt Zeile 50 in der mainWindow-Klasse
Java:
final StyledText styledText = new StyledText(shell, SWT.BORDER);

muss dort ohne das "final StyledText" stehen

Java:
styledText = new StyledText(shell, SWT.BORDER);
:)


Der Thread kann also als erledigt markiert werden.
 

Sonecc

Gesperrter Benutzer
Bitte, bitte, bitte... Beachte die üblichen Naming Conventions.

In deinem Fall:
Klassennamen beginnen mit einem Großbuchstaben!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
_user_q Objekte vom MainController in anderen Controller verwenden und andersherum (NullPointerException) AWT, Swing, JavaFX & SWT 14
Jose05 Nullpointerexception bei toArray() AWT, Swing, JavaFX & SWT 9
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Nullpointerexception wegen TableView AWT, Swing, JavaFX & SWT 2
ZH1896ZH JavaFX kann NullPointerException nicht auflösen... :( AWT, Swing, JavaFX & SWT 3
M NullPointerException / Controller AWT, Swing, JavaFX & SWT 4
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
L java.lang.NullPointerException - Fehlermeldung AWT, Swing, JavaFX & SWT 2
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
D NullPointerException observableList AWT, Swing, JavaFX & SWT 4
J NullPointerException bei getText() AWT, Swing, JavaFX & SWT 3
S JavaFX NullPointerException bei Versuch ImageView zu ändern AWT, Swing, JavaFX & SWT 1
K JFileChooser NullPointerException AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
S Swing [CLOSED] NullPointerException bei BorderLayout() AWT, Swing, JavaFX & SWT 8
G Swing NullPointerException und JXImageView AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
U Swing NullPointerException trotz Referenz auf Textfield & Button AWT, Swing, JavaFX & SWT 6
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
K JavaFX Pfad öffen NullPointerException AWT, Swing, JavaFX & SWT 4
L Event Handling windowAdapter - NullPointerException beim Schließen AWT, Swing, JavaFX & SWT 5
J JTable verursacht NullPointerException.Ratlos. AWT, Swing, JavaFX & SWT 5
C JButton NullPointerException AWT, Swing, JavaFX & SWT 2
Q getGraphics() - NullPointerException AWT, Swing, JavaFX & SWT 8
C NullPointerException im MVC Muster AWT, Swing, JavaFX & SWT 9
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
M JTable Drucken NullpointerException +JTable speichern AWT, Swing, JavaFX & SWT 6
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
C Swing NullPointerException beim Hinzufügen von Checkboxes in eine ArrayList AWT, Swing, JavaFX & SWT 5
1 JComponent -> java.lang.NullPointerException AWT, Swing, JavaFX & SWT 13
B Swing NullPointerException bei actionPerformed() AWT, Swing, JavaFX & SWT 2
E java.lang.NullPointerException AWT, Swing, JavaFX & SWT 14
R NullPointerException AWT, Swing, JavaFX & SWT 16
xehpuk Swing NullPointerException: Random-Instanz anfangs nicht initialisiert AWT, Swing, JavaFX & SWT 4
3 Swing NullPointerException in AW Event-0? AWT, Swing, JavaFX & SWT 5
C SWT NullPointerException AWT, Swing, JavaFX & SWT 12
J NullPointerException bei Benutzung vom TableCellRenderer AWT, Swing, JavaFX & SWT 3
A AWT Methodenaufruf "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 4
X NullPointerException beim Einfügen einer JMenuBar AWT, Swing, JavaFX & SWT 4
B NullPointerException bei JFrame AWT, Swing, JavaFX & SWT 2
D JPanel / NullPointerException AWT, Swing, JavaFX & SWT 4
G LookAndFeel Dynamisches Einlesen von LookAndFeels - NullPointerException AWT, Swing, JavaFX & SWT 4
E Login wird durch NullPointerException abgebrochen AWT, Swing, JavaFX & SWT 10
K NullPointerException ohne CodeLink AWT, Swing, JavaFX & SWT 6
L NullPointerException JFreeChart AWT, Swing, JavaFX & SWT 10
F NullPointerException - HILFE!! AWT, Swing, JavaFX & SWT 20
martinyyyy AWT Parameter erzeugen NullpointerException obwohl sie vorhanden sind? AWT, Swing, JavaFX & SWT 4
H Swing NullPointerException in JTable bei vielen Einträgen AWT, Swing, JavaFX & SWT 2
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
S NullPointerException bei JFileChooser AWT, Swing, JavaFX & SWT 8
X JList Probleme mit NullPointerException AWT, Swing, JavaFX & SWT 3
S NullPointerException bei Aufruf von updateUI() beim JFrame AWT, Swing, JavaFX & SWT 12
Z NullPointerException bei SplashScreen AWT, Swing, JavaFX & SWT 5
C NullPointerException bei Doppelpufferung AWT, Swing, JavaFX & SWT 3
F CardLayout.show() -> NullPointerException AWT, Swing, JavaFX & SWT 4
B NullPointerException bei String vergleich AWT, Swing, JavaFX & SWT 5
K NullPointerException bei JTextField AWT, Swing, JavaFX & SWT 8
L Problem mit "NullPointerException" bei grafischer AWT, Swing, JavaFX & SWT 3
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
loadbrain JTextFields & java.lang.NullPointerException AWT, Swing, JavaFX & SWT 2
F JProgressBar und NullPointerException AWT, Swing, JavaFX & SWT 4
D javax.swing.Timer bringt NullPointerException AWT, Swing, JavaFX & SWT 4
R TextField bringt NullPointerException bei setVisible() AWT, Swing, JavaFX & SWT 12
A NullPointerException in einer JList AWT, Swing, JavaFX & SWT 7
F Fehler: java.lang.NullPointerException AWT, Swing, JavaFX & SWT 2
S Brauche Hilfe mit JFrame - NullPointerException AWT, Swing, JavaFX & SWT 7
A NullPointerException - warum? AWT, Swing, JavaFX & SWT 5
G NullPointerException bei Aufruf von JTabbedPane.getSelectedI AWT, Swing, JavaFX & SWT 7
G Problem mit NullPointerException AWT, Swing, JavaFX & SWT 11
M JTable verursacht NullPointerException AWT, Swing, JavaFX & SWT 8
M NullPointerException AWT, Swing, JavaFX & SWT 3
J NullPointerException bei getSelectedItem AWT, Swing, JavaFX & SWT 10
G Bekomme immer: NullPointerException AWT, Swing, JavaFX & SWT 2
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
L JavaFX Zugriff auf HostServices im FXML Controller AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
J JavaFX Zugriff auf Child AWT, Swing, JavaFX & SWT 4
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2
D JavaFX Zugriff auf Controller erlangen AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
B Zugriff auf JFrame obwohl die Klasse abgeleitet ist AWT, Swing, JavaFX & SWT 3
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
A Swing Zugriff auf JButton AWT, Swing, JavaFX & SWT 2
M Zugriff auf Variablen eines Objektes ohne sie auf static zu setzen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben