laufzeitfehler . ober wo?

Status
Nicht offen für weitere Antworten.

latenite

Mitglied
Hallo Leute

Ich versuche gerade mich in SWT einzuarbeiten... leider kann ich nicht herausfinden warum ich diesen Fehler zu Laufzeit bekomme?

Code:
Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
        at org.eclipse.swt.SWT.error(Unknown Source)
        at org.eclipse.swt.SWT.error(Unknown Source)
        at org.eclipse.swt.SWT.error(Unknown Source)
        at org.eclipse.swt.widgets.Widget.error(Unknown Source)
        at org.eclipse.swt.widgets.Widget.checkParent(Unknown Source)
        at org.eclipse.swt.widgets.Widget.<init>(Unknown Source)
        at org.eclipse.swt.widgets.Menu.<init>(Unknown Source)
        at MainGui.menuBarItem_1Creation(MainGui.java:44)
        at MainGui.<init>(MainGui.java:28)
        at MainGui.main(MainGui.java:73)

hier mein testprogramm bei dem der Fehler auftritt
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;

public class MainGui {
	
	public static Shell mainShell;
	
	public MainGui() {
	
	Display mainDisplay = new Display();
	Shell mainShell = new Shell(mainDisplay);
	
	mainShell.setText("MainGuiAnwendungsfenster -- mainShell --");
	mainShell.setSize(500,500);
	
	Menu mainMenuBar = new Menu(mainShell, SWT.BAR);
    mainShell.setMenuBar(mainMenuBar);
    mainShell.setLayout(new FillLayout(SWT.VERTICAL));
	
	menuBarItem_1Creation(mainMenuBar);
	
	mainShell.setSize(500,500);
	mainShell.open();
	
	while(!mainShell.isDisposed()) {
		if(!mainDisplay.readAndDispatch())
	   		mainDisplay.sleep ();
	}
	mainDisplay.dispose ();
	
	}

	public void menuBarItem_1Creation (Menu mainMenuBar) {
		MenuItem menuItem_1 = new MenuItem(mainMenuBar, SWT.CASCADE);
		menuItem_1.setText("item_1 -- menueBar --");
		Menu menuDropDown_1 = new Menu(mainShell, SWT.DROP_DOWN);
		menuItem_1.setMenu(menuDropDown_1);
		
		MenuItem selection_1 = new MenuItem(menuDropDown_1, SWT.PUSH);
		selection_1.setText("selection_1");
		
		selection_1.addListener(SWT.Selection, new Listener()
			{
				public void handleEvent(Event e) {
					System.out.println("selection_1 pushed");
				}
			}
		);
		
		mainShell.setMenuBar(mainMenuBar);
		Menu menu = new Menu(mainShell, SWT.DROP_DOWN);
		menuItem_1.setMenu(menu);
	}	
	
	
	public void begruessung(){
		System.out.println("herzlich willkomen");
	}

	public void verabschiedung(){
		System.out.println("auf wiedersehen");
	}	
	
	public static void main(String [] args){
		new MainGui();
	}
}

Was mache ic da nur falsch???

Danke schon mal für eure Hilfe :D [/code]
 

Oni

Top Contributor
Aktuell:

Code:
public static Shell mainShell; 

...

 public MainGui() {
   
   Display mainDisplay = new Display();
   Shell mainShell = new Shell(mainDisplay); 
...

 public void menuBarItem_1Creation (Menu mainMenuBar) {
      MenuItem menuItem_1 = new MenuItem(mainMenuBar, SWT.CASCADE);
      menuItem_1.setText("item_1 -- menueBar --");
      Menu menuDropDown_1 = new Menu(mainShell, SWT.DROP_DOWN); 
...


Versuchs mal so

Code:
public static Shell mainShell; 

...

 public MainGui() {
   
   Display mainDisplay = new Display();
   mainShell = new Shell(mainDisplay); 
...

 public void menuBarItem_1Creation (Menu mainMenuBar) {
      MenuItem menuItem_1 = new MenuItem(mainMenuBar, SWT.CASCADE);
      menuItem_1.setText("item_1 -- menueBar --");
      Menu menuDropDown_1 = new Menu(mainShell, SWT.DROP_DOWN); 
...
 

latenite

Mitglied
Leider bin ich noch voll in den "Javakinderschuhen"

Wieso kann ich da den TYP (Shell) nicht mit angeben. Immerhin erstelle ich doch mainShell von TYP Shell?!

Kannst du das bitte mal "Änfängertauglich erkklären".

Danke so weit... :D :D
 

Oni

Top Contributor
Das "Problem" ist die Sichtbarkeit deiner Variable mainShell.

Code:
public static Shell mainShell;  // ist zu diesem Zeitpunkt   null

In deinem Konstruktor machst du dann folgendes:
Code:
public MainGui() {
   
   Display mainDisplay = new Display();
   Shell mainShell = new Shell(mainDisplay);  // das ist eine neue "lokale" Variable - die hat mit der von oben nichts zu tun
   mainShell = new Shell(mainDisplay);          // jetzt initialisiest du die Variable von oben
   MainGui.mainShell = new Shell(mainDisplay);          // waere eigentlich eine bessere/saubere schreibweise

paar Infos dazu:
Sichtbarkeit von Variablen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing JList editieren - Laufzeitfehler? AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben