Internal error during Vaadin example

Hello.

I’ve just started to learn Vaadin and decided to try one of the code examples from Vaadin book.
Here is my code:


@SuppressWarnings("serial")
public class MyVaadinApplication extends Application
{
    private Window window;

    @Override
    public void init()
    {
        window = new Window("My Vaadin Application");
        setMainWindow(window);

        window.addComponent(new WindowOpener("Window Opener", window));
    }
    
}

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("My Dialog");
    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");

  }

  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");
  }
}

It compiles and when I start this web app I see a button and a label. But when I click the button I see this stacktrace:


SEVERE: Terminal error:
java.lang.RuntimeException: Internal error - please report
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:505)
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:162)
        at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1166)
        at com.vaadin.ui.Button.fireClick(Button.java:380)
        at com.vaadin.ui.Button.changeVariables(Button.java:196)
        at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1297)
        at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1217)
        at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:733)
        at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
        at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:483)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
        at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
        at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.IllegalAccessException: Class com.vaadin.event.ListenerMethod can not access a member of class my.company.WindowOpener with modifiers "public"
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
        at java.lang.reflect.Method.invoke(Method.java:588)
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:490)
        ... 27 more

What am I doing wrong?
Thank you in advance.

Hi,

You should always look down the error dump for the “Caused by” section.

32Caused by: java.lang.IllegalAccessException: Class com.vaadin.event.ListenerMethod can not access a member of class my.company.WindowOpener with modifiers "public"

Your class “WindowOpener” is not public. Public visibility is required for some types of listeners, bound beans, etc.

Thank you very much.