Example from book gives me an Internal Error

Hello,
I am new to Vaadin and working my way through the book. The first few examples worked well but my “OpenWindow” is giving an Internal Error.

package com.example.myvaadinproject;

import com.vaadin.Application;
import com.vaadin.ui.*;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Window.CloseEvent;

public class MyvaadinprojectApplication extends Application {
	@Override
	public void init() {
		Window main = new Window("Main Window");
		setMainWindow(main);
		main.addComponent(new WindowOpener("Window Opener", main));
	}

}

package com.example.myvaadinproject;

import com.vaadin.ui.*;
import com.vaadin.ui.Window.CloseEvent;

public class WindowOpener extends CustomComponent implements Window.CloseListener {

	Window mainwindow;
	Window mywindow;
	Button openbutton;
	Button closebutton;
	Label explanation;

	public WindowOpener(String label, Window main) {
		mainwindow = main;
		final VerticalLayout layout = new VerticalLayout();

		openbutton = new Button("Open Window", this, "openButtonClick");

		explanation = new Label("Explanation");
		layout.addComponent(openbutton);
		layout.addComponent(explanation);
		setCompositionRoot(layout);
	}

	public void openButtonClick(Button.ClickEvent event){
		mywindow = new Window("Dialog Window");
		mywindow.setPositionX(200);
		mywindow.setPositionY(100);

		mainwindow.addWindow(mywindow);
		mywindow.addListener(this);

		mywindow.addComponent(closebutton);
		openbutton.setEnabled(false);
		explanation.setValue("Window opened");
	}
	public void closeButtonClick(Button.ClickEvent event){
		mainwindow.removeWindow(mywindow);
		openbutton.setEnabled(true);
		explanation.setValue("Closed with button");
	}
	public void windowClose(CloseEvent e) {
		openbutton.setEnabled(true);
		explanation.setValue("Closed with window controls");
	}
}

The line “mywindow = new Window(“Dialog Window”);” in the openButtonClick seems to be the problem.

Tracing the code with the debugger I get to


    public AbstractComponent() {
        // ComponentSizeValidator.setCreationLocation(this);
    }

May 20, 2012 5:36:49 PM com.vaadin.Application terminalError
SEVERE: Terminal error:
java.lang.NullPointerException
	at com.vaadin.ui.AbstractOrderedLayout.paintContent(AbstractOrderedLayout.java:187)
	at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
	at com.vaadin.ui.Panel.paintContent(Panel.java:269)
	at com.vaadin.ui.Window.paintContent(Window.java:641)
	at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
	at com.vaadin.ui.Window.paintContent(Window.java:664)
	at com.vaadin.ui.AbstractComponent.paint(AbstractComponent.java:781)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.writeUidlResponce(AbstractCommunicationManager.java:1046)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.paintAfterVariableChanges(AbstractCommunicationManager.java:927)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:794)
	at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
	at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

What have a done wrong?

Greg

You don’t get another stacktrace? Usually there is two after each others, where the second one refers to your code. That stack trace only includes classes of vaadin and the servlet container.

Additionally, you should call the “new Button(“Open Window”, this, “openButtonClick”);” -constructor, but instead you should implement a Button.ClickListener to say what should happen when the button is clicked. Was that code straight from the Book of Vaadin? Can you give a link?

The example was from the Book of Vaadin 4th Edition
4.3.1. Opening and Closing a Sub-Window

How embarrassing! I missed some lines of code.

After typing in the missing lines of code the example worked as expected.


public void openButtonClick(Button.ClickEvent event){
		mywindow = new Window("Dialog Window");
		mywindow.setPositionX(200);
		mywindow.setPositionY(100);

		mainwindow.addWindow(mywindow);
		mywindow.addListener(this);

		mywindow.addComponent(new Label("A text label in the window."));  
		
>>>>	closebutton = new Button("Close", this, "closeButtonClick");   <<<<
		mywindow.addComponent(closebutton);
		
		openbutton.setEnabled(false);
		explanation.setValue("Window opened");
	}

Sorry and many thanks.