Home » Eclipse Projects » Remote Application Platform (RAP) » Strange NullPointerExcepion
Strange NullPointerExcepion [message #112501] |
Sat, 15 November 2008 18:25 |
Maximilian Falkenstein Messages: 9 Registered: July 2009 |
Junior Member |
|
|
Hi, following situation: I've got an Application. It displays a login
screen, and logs me in. Fine. But then it displays a button. Only a
Shell with a FillLayout and a button with a SelectionListener. I click
on it. Fine. But if I use two of those shells and click on the button of
the first, I get the following:
osgi> 15.11.2008 19:07:32 org.mortbay.http.HttpServer doStart
INFO: Version Jetty/5.1.x
15.11.2008 19:07:32 org.mortbay.util.Container start
INFO: Started
org.eclipse.equinox.http.jetty.internal.Servlet25Handler@5c1ae90c
15.11.2008 19:07:32 org.mortbay.util.Container start
INFO: Started HttpContext[/,/]
15.11.2008 19:07:32 org.mortbay.http.SocketListener start
INFO: Started SocketListener on 0.0.0.0:14696
15.11.2008 19:07:32 org.mortbay.util.Container start
INFO: Started org.mortbay.http.HttpServer@67a5a19
Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
[1p9hdi55uxb8f],5,main]
Selected
SelectionEvent{Button {Login} data=null item=null detail=0 x=0 y=0
width=0 height=0 text=null doit=true}
Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
[1p9hdi55uxb8f],5,main]
Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
[1p9hdi55uxb8f],5,main]
Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
[1p9hdi55uxb8f],5,main]
java.lang.NullPointerException
at org.eclipse.rwt.internal.events.Event.getEventAdapter(Event. java:35)
at org.eclipse.rwt.internal.events.Event.processEvent(Event.jav a:39)
at org.eclipse.swt.events.TypedEvent.processEvent(TypedEvent.ja va:115)
at org.eclipse.swt.events.TypedEvent.executeNext(TypedEvent.jav a:155)
at
org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.readAndDispa tch(RWTLifeCycle.java:241)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :682)
at mpw_main.Application.createUI(Application.java:23)
at
org.eclipse.rwt.internal.lifecycle.EntryPointManager.createU I(EntryPointManager.java:92)
at
org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWT LifeCycle.java:228)
at
org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:116)
at java.lang.Thread.run(Thread.java:619)
15.11.2008 19:08:01 org.mortbay.jetty.servlet.ServletHandler handle
SCHWERWIEGEND: /mpw?nocache=1226772481178:
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:1977)
at org.eclipse.swt.SWT.error(SWT.java:1897)
at org.eclipse.swt.SWT.error(SWT.java:1868)
at org.eclipse.swt.widgets.Widget.error(Widget.java:788)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:718)
at org.eclipse.swt.widgets.Composite.getChildren(Composite.java :105)
at
org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(Wi dgetTreeVisitor.java:49)
at org.eclipse.rwt.lifecycle.WidgetUtil.find(WidgetUtil.java:19 7)
at
org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readF ocusControl(DisplayLCA.java:566)
at
org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readD ata(DisplayLCA.java:337)
at org.eclipse.rwt.internal.lifecycle.ReadData.execute(ReadData .java:26)
at
org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.continueLife Cycle(RWTLifeCycle.java:206)
at
org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:115)
at java.lang.Thread.run(Thread.java:619)
If I click on the second button, it works! As you can see in the lines
starting with Thread..., everything is created from the UI thread.
Hopefully,
Maximilian
Relevant snippets:
Application.java:
public int createUI() {
Display display = new Display();
System.out.print(Thread.currentThread().toString());
System.out.print(", ");
System.out.println(display.getThread().toString());
new Ui(display).showMainScreen();
try{
while (!Thread.currentThread().isInterrupted()) {
if (!display.readAndDispatch ()) display.sleep ();
}
} catch(Exception e){
//Nicht gut...
e.printStackTrace();
}
return 0;
}
Ui.java:
public void showMainScreen(){
System.out.print(Thread.currentThread().toString());
System.out.print(", ");
System.out.println(display.getThread().toString());
display.asyncExec(new Runnable(){
public void run() {
MessageDialog.showMessage(display, "Erfolgreich eingeloggt!");
IconManager im = new IconManager();
new AboutIcon().draw(display, dbcon, dbcon.getUserType());
new LogoutIcon().draw(display, dbcon, dbcon.getUserType());
}
});
}
Icon.java:
public abstract class Icon implements SelectionListener, MouseListener{
protected Image icon;
protected int width,height,x,y,id;
protected String tooltip;
protected Shell s;
protected DBCon dbcon;
protected Display d;
public Icon(){
initalize();
}
/**
* In dieser Methode werden die Initalisierungen
* durchgeführt: Laden des Bildes und laden der Koordinaten
* */
protected abstract void initalize();
/**
* Mit dieser Methode wird geprüft, ob der Benutzer
* das Icon überhaupt sehen/ankilcken darf
* */
public abstract boolean hasPermission(int user_type);
/**
* Mit dieser Methode wird das Icon gezeichnet
* */
public void draw(Display d, DBCon dbcon, int user_type){
System.out.print(Thread.currentThread().toString());
System.out.print(", ");
System.out.println(d.getThread().toString());
if(hasPermission(user_type)){
s = new Shell(d, SWT.NO_TRIM);
s.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
this.dbcon = dbcon;
this.d = d;
s.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
s.setLayout(new FillLayout());
Button b = new Button(s, SWT.FLAT);
b.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
b.setImage(icon);
b.setToolTipText(tooltip);
b.addSelectionListener(this);
b.addMouseListener(this);
b.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
s.setSize(width, height);
Point p = dbcon.getPos(id);
if(p != null)
s.setLocation(p.x, p.y);
else
s.setLocation(x, y);
s.setVisible(true);
}
}
public void mouseDoubleClick(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
}
public void widgetDefaultSelected(SelectionEvent e) {
}
public void mouseUp(MouseEvent e) {
if(e.button == 2){
s.setLocation(e.x, e.y);
if(!dbcon.setPos(new Point(e.x, e.y), id))
MessageDialog.showError(d, "Konnte die Position des Icons nicht speichern!");
}
}
}
LogoutIcon.java:
package mpw_main.ui;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.eclipse.rwt.RWT;
import org.eclipse.rwt.graphics.Graphics;
import org.eclipse.swt.events.SelectionEvent;
public class LogoutIcon extends Icon {
public boolean hasPermission(int user_type) {
return true;
}
protected void initalize() {
icon = Graphics.getImage("images/icon-logout.png", getClass().getClassLoader());
x = 128;
y = 300;
width = 70;
height = 70;
tooltip = "Logout";
id = 1;
}
public void widgetSelected(SelectionEvent f) {
System.out.print(Thread.currentThread().toString());
System.out.print(", ");
System.out.println(d.getThread().toString());
dbcon.logout();
try{
RWT.getResponse().sendRedirect("http://www.google.de");
} catch(Exception e){
Logger.getLogger("mpw").log(Level.SEVERE, "Couldn't kick the user", e);
}
//TODO: Kick the user
}
}
AboutIcon.java:
public class AboutIcon extends Icon {
public boolean hasPermission(int user_type) {
return true;
}
protected void initalize() {
icon = Graphics.getImage("images/icon-about.png", getClass().getClassLoader());
x = 0;
y = 300;
width = 70;
height = 70;
tooltip = "Über";
id = 0;
}
public void widgetSelected(SelectionEvent e) {
/*d.syncExec(new Runnable(){
public void run(){
new AboutDialog(d);
}
});*/
System.out.print(Thread.currentThread().toString());
System.out.print(", ");
System.out.println(d.getThread().toString());
}
}
|
|
| | | |
Re: Strange NullPointerExcepion [message #112689 is a reply to message #112677] |
Tue, 18 November 2008 19:20 |
Eclipse User |
|
|
|
Originally posted by: evolanakis.innoopract.com
Hi Max,
here's the explanation from the OSGi spec:
"The framework must recognize the following directives for the
Bundle-SymbolicName header:
* singleton -- Indicates that the bundle can only have a single version
resolved. A value of true indicates that the bundle is a singleton
bundle. The default value is false. The Framework must resolve at most
one bundle when multiple versions of a singleton bundle with the same
symbolic name are installed. Singleton bundles do not affect the
"
-- OSGi Service Platform Core Specification, R4 V4.0.1, Para 3.5.2,
www.osgi.org
What is means is that though you may INSTALL several bundles with the
same id and different versions, only one bundle may be in the RESOLVED
state (i.e. ready to run). This is mandatory for bundles that contribute
to the UI using extension points (otherwise, for example, you would see
two contributions of the same perspective).
Adam, this is somewhat different than the singletons / session
singletons mentioned in the webinar.
Kind regards,
Elias.
Adam wrote:
> Singletons help you create one instance of a class. The Webinar further
> down this forum provides a template for you to setup singletons. You may
> have them enabled in your MANIFEST, but that doesn't mean they are
> implemented. Check out the webinar and let us know if you are still
> having problems.
>
--
---
Elias Volanakis
Innoopract, Inc.
http://www.innoopract.com
|
|
|
Re: Strange NullPointerExcepion [message #112832 is a reply to message #112501] |
Wed, 19 November 2008 20:11 |
Eclipse User |
|
|
|
Originally posted by: rherrmann.innoopract.com
Maximilian,
this might be a bug. If you can provide a self-contained
project/snippet, feel free to open a bugzilla.
Cheers,
Rüdiger
Maximilian Falkenstein wrote:
> Hi, following situation: I've got an Application. It displays a login
> screen, and logs me in. Fine. But then it displays a button. Only a
> Shell with a FillLayout and a button with a SelectionListener. I click
> on it. Fine. But if I use two of those shells and click on the button of
> the first, I get the following:
> osgi> 15.11.2008 19:07:32 org.mortbay.http.HttpServer doStart
> INFO: Version Jetty/5.1.x
> 15.11.2008 19:07:32 org.mortbay.util.Container start
> INFO: Started
> org.eclipse.equinox.http.jetty.internal.Servlet25Handler@5c1ae90c
> 15.11.2008 19:07:32 org.mortbay.util.Container start
> INFO: Started HttpContext[/,/]
> 15.11.2008 19:07:32 org.mortbay.http.SocketListener start
> INFO: Started SocketListener on 0.0.0.0:14696
> 15.11.2008 19:07:32 org.mortbay.util.Container start
> INFO: Started org.mortbay.http.HttpServer@67a5a19
> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
> [1p9hdi55uxb8f],5,main]
> Selected
> SelectionEvent{Button {Login} data=null item=null detail=0 x=0 y=0
> width=0 height=0 text=null doit=true}
> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
> [1p9hdi55uxb8f],5,main]
> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
> [1p9hdi55uxb8f],5,main]
> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
> [1p9hdi55uxb8f],5,main]
> java.lang.NullPointerException
> at org.eclipse.rwt.internal.events.Event.getEventAdapter(Event. java:35)
> at org.eclipse.rwt.internal.events.Event.processEvent(Event.jav a:39)
> at org.eclipse.swt.events.TypedEvent.processEvent(TypedEvent.ja va:115)
> at org.eclipse.swt.events.TypedEvent.executeNext(TypedEvent.jav a:155)
> at
> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.readAndDispa tch(RWTLifeCycle.java:241)
> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :682)
> at mpw_main.Application.createUI(Application.java:23)
> at
> org.eclipse.rwt.internal.lifecycle.EntryPointManager.createU I(EntryPointManager.java:92)
> at
> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWT LifeCycle.java:228)
> at
> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:116)
> at java.lang.Thread.run(Thread.java:619)
> 15.11.2008 19:08:01 org.mortbay.jetty.servlet.ServletHandler handle
> SCHWERWIEGEND: /mpw?nocache=1226772481178:
> org.eclipse.swt.SWTException: Invalid thread access
> at org.eclipse.swt.SWT.error(SWT.java:1977)
> at org.eclipse.swt.SWT.error(SWT.java:1897)
> at org.eclipse.swt.SWT.error(SWT.java:1868)
> at org.eclipse.swt.widgets.Widget.error(Widget.java:788)
> at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:718)
> at org.eclipse.swt.widgets.Composite.getChildren(Composite.java :105)
> at
> org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(Wi dgetTreeVisitor.java:49)
> at org.eclipse.rwt.lifecycle.WidgetUtil.find(WidgetUtil.java:19 7)
> at
> org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readF ocusControl(DisplayLCA.java:566)
> at
> org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readD ata(DisplayLCA.java:337)
> at org.eclipse.rwt.internal.lifecycle.ReadData.execute(ReadData .java:26)
> at
> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.continueLife Cycle(RWTLifeCycle.java:206)
> at
> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:115)
> at java.lang.Thread.run(Thread.java:619)
>
> If I click on the second button, it works! As you can see in the lines
> starting with Thread..., everything is created from the UI thread.
> Hopefully,
>
> Maximilian
>
>
>
>
> Relevant snippets:
>
> Application.java:
>
> public int createUI() {
> Display display = new Display();
> System.out.print(Thread.currentThread().toString());
> System.out.print(", ");
> System.out.println(display.getThread().toString());
> new Ui(display).showMainScreen();
> try{
> while (!Thread.currentThread().isInterrupted()) {
> if (!display.readAndDispatch ()) display.sleep ();
> }
> } catch(Exception e){
> //Nicht gut...
> e.printStackTrace();
> }
> return 0;
> }
>
> Ui.java:
>
> public void showMainScreen(){
> System.out.print(Thread.currentThread().toString());
> System.out.print(", ");
> System.out.println(display.getThread().toString());
> display.asyncExec(new Runnable(){
> public void run() {
> MessageDialog.showMessage(display, "Erfolgreich eingeloggt!");
> IconManager im = new IconManager();
> new AboutIcon().draw(display, dbcon, dbcon.getUserType());
> new LogoutIcon().draw(display, dbcon, dbcon.getUserType());
> }
> });
> }
>
>
> Icon.java:
>
> public abstract class Icon implements SelectionListener, MouseListener{
> protected Image icon;
> protected int width,height,x,y,id;
> protected String tooltip;
> protected Shell s;
> protected DBCon dbcon;
> protected Display d;
>
> public Icon(){
> initalize();
> }
>
> /**
> * In dieser Methode werden die Initalisierungen
> * durchgeführt: Laden des Bildes und laden der Koordinaten
> * */
> protected abstract void initalize();
>
> /**
> * Mit dieser Methode wird geprüft, ob der Benutzer
> * das Icon überhaupt sehen/ankilcken darf
> * */
> public abstract boolean hasPermission(int user_type);
>
> /**
> * Mit dieser Methode wird das Icon gezeichnet
> * */
> public void draw(Display d, DBCon dbcon, int user_type){
> System.out.print(Thread.currentThread().toString());
> System.out.print(", ");
> System.out.println(d.getThread().toString());
> if(hasPermission(user_type)){
> s = new Shell(d, SWT.NO_TRIM);
> s.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
> this.dbcon = dbcon;
> this.d = d;
> s.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
> s.setLayout(new FillLayout());
>
> Button b = new Button(s, SWT.FLAT);
> b.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
> b.setImage(icon);
> b.setToolTipText(tooltip);
> b.addSelectionListener(this);
> b.addMouseListener(this);
> b.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
>
> s.setSize(width, height);
> Point p = dbcon.getPos(id);
> if(p != null)
> s.setLocation(p.x, p.y);
> else
> s.setLocation(x, y);
> s.setVisible(true);
> }
> }
>
> public void mouseDoubleClick(MouseEvent e) {
> }
>
> public void mouseDown(MouseEvent e) {
> }
>
> public void widgetDefaultSelected(SelectionEvent e) {
> }
>
> public void mouseUp(MouseEvent e) {
> if(e.button == 2){
> s.setLocation(e.x, e.y);
> if(!dbcon.setPos(new Point(e.x, e.y), id))
> MessageDialog.showError(d, "Konnte die Position des Icons nicht speichern!");
> }
> }
> }
>
> LogoutIcon.java:
>
> package mpw_main.ui;
>
> import java.util.logging.Level;
> import java.util.logging.Logger;
>
> import org.eclipse.rwt.RWT;
> import org.eclipse.rwt.graphics.Graphics;
> import org.eclipse.swt.events.SelectionEvent;
>
> public class LogoutIcon extends Icon {
>
> public boolean hasPermission(int user_type) {
> return true;
> }
>
> protected void initalize() {
> icon = Graphics.getImage("images/icon-logout.png", getClass().getClassLoader());
> x = 128;
> y = 300;
> width = 70;
> height = 70;
> tooltip = "Logout";
> id = 1;
> }
>
> public void widgetSelected(SelectionEvent f) {
> System.out.print(Thread.currentThread().toString());
> System.out.print(", ");
> System.out.println(d.getThread().toString());
> dbcon.logout();
> try{
> RWT.getResponse().sendRedirect("http://www.google.de");
> } catch(Exception e){
> Logger.getLogger("mpw").log(Level.SEVERE, "Couldn't kick the user", e);
> }
> //TODO: Kick the user
> }
>
> }
>
>
> AboutIcon.java:
>
> public class AboutIcon extends Icon {
>
> public boolean hasPermission(int user_type) {
> return true;
> }
>
> protected void initalize() {
> icon = Graphics.getImage("images/icon-about.png", getClass().getClassLoader());
> x = 0;
> y = 300;
> width = 70;
> height = 70;
> tooltip = "Über";
> id = 0;
> }
>
> public void widgetSelected(SelectionEvent e) {
> /*d.syncExec(new Runnable(){
> public void run(){
> new AboutDialog(d);
> }
> });*/
> System.out.print(Thread.currentThread().toString());
> System.out.print(", ");
> System.out.println(d.getThread().toString());
> }
> }
|
|
|
Re: Strange NullPointerExcepion [message #112912 is a reply to message #112832] |
Thu, 20 November 2008 12:59 |
Maximilian Falkenstein Messages: 9 Registered: July 2009 |
Junior Member |
|
|
Ok. I'll do this this or next evening.
Rüdiger Herrmann schrieb:
> Maximilian,
>
> this might be a bug. If you can provide a self-contained
> project/snippet, feel free to open a bugzilla.
>
> Cheers,
> Rüdiger
>
>
> Maximilian Falkenstein wrote:
>> Hi, following situation: I've got an Application. It displays a login
>> screen, and logs me in. Fine. But then it displays a button. Only a
>> Shell with a FillLayout and a button with a SelectionListener. I click
>> on it. Fine. But if I use two of those shells and click on the button of
>> the first, I get the following:
>> osgi> 15.11.2008 19:07:32 org.mortbay.http.HttpServer doStart
>> INFO: Version Jetty/5.1.x
>> 15.11.2008 19:07:32 org.mortbay.util.Container start
>> INFO: Started
>> org.eclipse.equinox.http.jetty.internal.Servlet25Handler@5c1ae90c
>> 15.11.2008 19:07:32 org.mortbay.util.Container start
>> INFO: Started HttpContext[/,/]
>> 15.11.2008 19:07:32 org.mortbay.http.SocketListener start
>> INFO: Started SocketListener on 0.0.0.0:14696
>> 15.11.2008 19:07:32 org.mortbay.util.Container start
>> INFO: Started org.mortbay.http.HttpServer@67a5a19
>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>> [1p9hdi55uxb8f],5,main]
>> Selected
>> SelectionEvent{Button {Login} data=null item=null detail=0 x=0 y=0
>> width=0 height=0 text=null doit=true}
>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>> [1p9hdi55uxb8f],5,main]
>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>> [1p9hdi55uxb8f],5,main]
>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>> [1p9hdi55uxb8f],5,main]
>> java.lang.NullPointerException
>> at
>> org.eclipse.rwt.internal.events.Event.getEventAdapter(Event. java:35)
>> at org.eclipse.rwt.internal.events.Event.processEvent(Event.jav a:39)
>> at
>> org.eclipse.swt.events.TypedEvent.processEvent(TypedEvent.ja va:115)
>> at org.eclipse.swt.events.TypedEvent.executeNext(TypedEvent.jav a:155)
>> at
>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.readAndDispa tch(RWTLifeCycle.java:241)
>>
>> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :682)
>> at mpw_main.Application.createUI(Application.java:23)
>> at
>> org.eclipse.rwt.internal.lifecycle.EntryPointManager.createU I(EntryPointManager.java:92)
>>
>> at
>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWT LifeCycle.java:228)
>>
>> at
>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:116)
>>
>> at java.lang.Thread.run(Thread.java:619)
>> 15.11.2008 19:08:01 org.mortbay.jetty.servlet.ServletHandler handle
>> SCHWERWIEGEND: /mpw?nocache=1226772481178:
>> org.eclipse.swt.SWTException: Invalid thread access
>> at org.eclipse.swt.SWT.error(SWT.java:1977)
>> at org.eclipse.swt.SWT.error(SWT.java:1897)
>> at org.eclipse.swt.SWT.error(SWT.java:1868)
>> at org.eclipse.swt.widgets.Widget.error(Widget.java:788)
>> at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:718)
>> at org.eclipse.swt.widgets.Composite.getChildren(Composite.java :105)
>> at
>> org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(Wi dgetTreeVisitor.java:49)
>>
>> at org.eclipse.rwt.lifecycle.WidgetUtil.find(WidgetUtil.java:19 7)
>> at
>> org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readF ocusControl(DisplayLCA.java:566)
>>
>> at
>> org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readD ata(DisplayLCA.java:337)
>>
>> at
>> org.eclipse.rwt.internal.lifecycle.ReadData.execute(ReadData .java:26)
>> at
>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.continueLife Cycle(RWTLifeCycle.java:206)
>>
>> at
>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:115)
>>
>> at java.lang.Thread.run(Thread.java:619)
>>
>> If I click on the second button, it works! As you can see in the lines
>> starting with Thread..., everything is created from the UI thread.
>> Hopefully,
>>
>> Maximilian
>>
>>
>>
>>
>> Relevant snippets:
>>
>> Application.java:
>>
>> public int createUI() {
>> Display display = new Display();
>> System.out.print(Thread.currentThread().toString());
>> System.out.print(", ");
>> System.out.println(display.getThread().toString());
>> new Ui(display).showMainScreen();
>> try{
>> while (!Thread.currentThread().isInterrupted()) {
>> if (!display.readAndDispatch ()) display.sleep ();
>> }
>> } catch(Exception e){
>> //Nicht gut...
>> e.printStackTrace();
>> }
>> return 0;
>> }
>>
>> Ui.java:
>>
>> public void showMainScreen(){
>> System.out.print(Thread.currentThread().toString());
>> System.out.print(", ");
>> System.out.println(display.getThread().toString());
>> display.asyncExec(new Runnable(){
>> public void run() {
>> MessageDialog.showMessage(display, "Erfolgreich
>> eingeloggt!");
>> IconManager im = new IconManager();
>> new AboutIcon().draw(display, dbcon,
>> dbcon.getUserType());
>> new LogoutIcon().draw(display, dbcon,
>> dbcon.getUserType());
>> }
>> });
>> }
>>
>>
>> Icon.java:
>>
>> public abstract class Icon implements SelectionListener, MouseListener{
>> protected Image icon;
>> protected int width,height,x,y,id;
>> protected String tooltip;
>> protected Shell s;
>> protected DBCon dbcon;
>> protected Display d;
>>
>> public Icon(){
>> initalize();
>> }
>>
>> /**
>> * In dieser Methode werden die Initalisierungen
>> * durchgeführt: Laden des Bildes und laden der Koordinaten
>> * */
>> protected abstract void initalize();
>>
>> /**
>> * Mit dieser Methode wird geprüft, ob der Benutzer
>> * das Icon überhaupt sehen/ankilcken darf
>> * */
>> public abstract boolean hasPermission(int user_type);
>>
>> /**
>> * Mit dieser Methode wird das Icon gezeichnet
>> * */
>> public void draw(Display d, DBCon dbcon, int user_type){
>> System.out.print(Thread.currentThread().toString());
>> System.out.print(", ");
>> System.out.println(d.getThread().toString());
>> if(hasPermission(user_type)){
>> s = new Shell(d, SWT.NO_TRIM);
>> s.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
>> this.dbcon = dbcon;
>> this.d = d;
>> s.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
>> s.setLayout(new FillLayout());
>>
>> Button b = new Button(s, SWT.FLAT);
>> b.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
>> b.setImage(icon);
>> b.setToolTipText(tooltip);
>> b.addSelectionListener(this);
>> b.addMouseListener(this);
>> b.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
>>
>> s.setSize(width, height);
>> Point p = dbcon.getPos(id);
>> if(p != null)
>> s.setLocation(p.x, p.y);
>> else
>> s.setLocation(x, y);
>> s.setVisible(true);
>> }
>> }
>>
>> public void mouseDoubleClick(MouseEvent e) {
>> }
>>
>> public void mouseDown(MouseEvent e) {
>> }
>>
>> public void widgetDefaultSelected(SelectionEvent e) {
>> }
>>
>> public void mouseUp(MouseEvent e) {
>> if(e.button == 2){
>> s.setLocation(e.x, e.y);
>> if(!dbcon.setPos(new Point(e.x, e.y), id))
>> MessageDialog.showError(d, "Konnte die Position des
>> Icons nicht speichern!");
>> }
>> }
>> }
>>
>> LogoutIcon.java:
>>
>> package mpw_main.ui;
>>
>> import java.util.logging.Level;
>> import java.util.logging.Logger;
>>
>> import org.eclipse.rwt.RWT;
>> import org.eclipse.rwt.graphics.Graphics;
>> import org.eclipse.swt.events.SelectionEvent;
>>
>> public class LogoutIcon extends Icon {
>>
>> public boolean hasPermission(int user_type) {
>> return true;
>> }
>>
>> protected void initalize() {
>> icon = Graphics.getImage("images/icon-logout.png",
>> getClass().getClassLoader());
>> x = 128;
>> y = 300;
>> width = 70;
>> height = 70;
>> tooltip = "Logout";
>> id = 1;
>> }
>>
>> public void widgetSelected(SelectionEvent f) {
>> System.out.print(Thread.currentThread().toString());
>> System.out.print(", ");
>> System.out.println(d.getThread().toString());
>> dbcon.logout();
>> try{
>> RWT.getResponse().sendRedirect("http://www.google.de");
>> } catch(Exception e){
>> Logger.getLogger("mpw").log(Level.SEVERE, "Couldn't kick
>> the user", e);
>> }
>> //TODO: Kick the user
>> }
>>
>> }
>>
>>
>> AboutIcon.java:
>>
>> public class AboutIcon extends Icon {
>>
>> public boolean hasPermission(int user_type) {
>> return true;
>> }
>>
>> protected void initalize() {
>> icon = Graphics.getImage("images/icon-about.png",
>> getClass().getClassLoader());
>> x = 0;
>> y = 300;
>> width = 70;
>> height = 70;
>> tooltip = "Über";
>> id = 0;
>> }
>>
>> public void widgetSelected(SelectionEvent e) {
>> /*d.syncExec(new Runnable(){
>> public void run(){
>> new AboutDialog(d);
>> }
>> });*/
>> System.out.print(Thread.currentThread().toString());
>> System.out.print(", ");
>> System.out.println(d.getThread().toString());
>> }
>> }
|
|
|
Re: Strange NullPointerExcepion [message #113205 is a reply to message #112912] |
Mon, 24 November 2008 13:46 |
Maximilian Falkenstein Messages: 9 Registered: July 2009 |
Junior Member |
|
|
https://bugs.eclipse.org/bugs/show_bug.cgi?id=256195
Maximilian Falkenstein schrieb:
> Ok. I'll do this this or next evening.
>
> Rüdiger Herrmann schrieb:
>> Maximilian,
>>
>> this might be a bug. If you can provide a self-contained
>> project/snippet, feel free to open a bugzilla.
>>
>> Cheers,
>> Rüdiger
>>
>>
>> Maximilian Falkenstein wrote:
>>> Hi, following situation: I've got an Application. It displays a login
>>> screen, and logs me in. Fine. But then it displays a button. Only a
>>> Shell with a FillLayout and a button with a SelectionListener. I click
>>> on it. Fine. But if I use two of those shells and click on the button of
>>> the first, I get the following:
>>> osgi> 15.11.2008 19:07:32 org.mortbay.http.HttpServer doStart
>>> INFO: Version Jetty/5.1.x
>>> 15.11.2008 19:07:32 org.mortbay.util.Container start
>>> INFO: Started
>>> org.eclipse.equinox.http.jetty.internal.Servlet25Handler@5c1ae90c
>>> 15.11.2008 19:07:32 org.mortbay.util.Container start
>>> INFO: Started HttpContext[/,/]
>>> 15.11.2008 19:07:32 org.mortbay.http.SocketListener start
>>> INFO: Started SocketListener on 0.0.0.0:14696
>>> 15.11.2008 19:07:32 org.mortbay.util.Container start
>>> INFO: Started org.mortbay.http.HttpServer@67a5a19
>>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>>> [1p9hdi55uxb8f],5,main]
>>> Selected
>>> SelectionEvent{Button {Login} data=null item=null detail=0 x=0 y=0
>>> width=0 height=0 text=null doit=true}
>>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>>> [1p9hdi55uxb8f],5,main]
>>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>>> [1p9hdi55uxb8f],5,main]
>>> Thread[UIThread [1p9hdi55uxb8f],5,main], Thread[UIThread
>>> [1p9hdi55uxb8f],5,main]
>>> java.lang.NullPointerException
>>> at
>>> org.eclipse.rwt.internal.events.Event.getEventAdapter(Event. java:35)
>>> at org.eclipse.rwt.internal.events.Event.processEvent(Event.jav a:39)
>>> at
>>> org.eclipse.swt.events.TypedEvent.processEvent(TypedEvent.ja va:115)
>>> at org.eclipse.swt.events.TypedEvent.executeNext(TypedEvent.jav a:155)
>>> at
>>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.readAndDispa tch(RWTLifeCycle.java:241)
>>>
>>> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :682)
>>> at mpw_main.Application.createUI(Application.java:23)
>>> at
>>> org.eclipse.rwt.internal.lifecycle.EntryPointManager.createU I(EntryPointManager.java:92)
>>>
>>> at
>>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.createUI(RWT LifeCycle.java:228)
>>>
>>> at
>>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:116)
>>>
>>> at java.lang.Thread.run(Thread.java:619)
>>> 15.11.2008 19:08:01 org.mortbay.jetty.servlet.ServletHandler handle
>>> SCHWERWIEGEND: /mpw?nocache=1226772481178:
>>> org.eclipse.swt.SWTException: Invalid thread access
>>> at org.eclipse.swt.SWT.error(SWT.java:1977)
>>> at org.eclipse.swt.SWT.error(SWT.java:1897)
>>> at org.eclipse.swt.SWT.error(SWT.java:1868)
>>> at org.eclipse.swt.widgets.Widget.error(Widget.java:788)
>>> at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:718)
>>> at org.eclipse.swt.widgets.Composite.getChildren(Composite.java :105)
>>> at
>>> org.eclipse.swt.internal.widgets.WidgetTreeVisitor.accept(Wi dgetTreeVisitor.java:49)
>>>
>>> at org.eclipse.rwt.lifecycle.WidgetUtil.find(WidgetUtil.java:19 7)
>>> at
>>> org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readF ocusControl(DisplayLCA.java:566)
>>>
>>> at
>>> org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.readD ata(DisplayLCA.java:337)
>>>
>>> at
>>> org.eclipse.rwt.internal.lifecycle.ReadData.execute(ReadData .java:26)
>>> at
>>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle.continueLife Cycle(RWTLifeCycle.java:206)
>>>
>>> at
>>> org.eclipse.rwt.internal.lifecycle.RWTLifeCycle$UIThreadCont roller.run(RWTLifeCycle.java:115)
>>>
>>> at java.lang.Thread.run(Thread.java:619)
>>>
>>> If I click on the second button, it works! As you can see in the lines
>>> starting with Thread..., everything is created from the UI thread.
>>> Hopefully,
>>>
>>> Maximilian
>>>
>>>
>>>
>>>
>>> Relevant snippets:
>>>
>>> Application.java:
>>>
>>> public int createUI() {
>>> Display display = new Display();
>>> System.out.print(Thread.currentThread().toString());
>>> System.out.print(", ");
>>> System.out.println(display.getThread().toString());
>>> new Ui(display).showMainScreen();
>>> try{
>>> while (!Thread.currentThread().isInterrupted()) {
>>> if (!display.readAndDispatch ()) display.sleep ();
>>> }
>>> } catch(Exception e){
>>> //Nicht gut...
>>> e.printStackTrace();
>>> }
>>> return 0;
>>> }
>>>
>>> Ui.java:
>>>
>>> public void showMainScreen(){
>>> System.out.print(Thread.currentThread().toString());
>>> System.out.print(", ");
>>> System.out.println(display.getThread().toString());
>>> display.asyncExec(new Runnable(){
>>> public void run() {
>>> MessageDialog.showMessage(display, "Erfolgreich
>>> eingeloggt!");
>>> IconManager im = new IconManager();
>>> new AboutIcon().draw(display, dbcon,
>>> dbcon.getUserType());
>>> new LogoutIcon().draw(display, dbcon,
>>> dbcon.getUserType());
>>> }
>>> });
>>> }
>>>
>>>
>>> Icon.java:
>>>
>>> public abstract class Icon implements SelectionListener, MouseListener{
>>> protected Image icon;
>>> protected int width,height,x,y,id;
>>> protected String tooltip;
>>> protected Shell s;
>>> protected DBCon dbcon;
>>> protected Display d;
>>>
>>> public Icon(){
>>> initalize();
>>> }
>>>
>>> /**
>>> * In dieser Methode werden die Initalisierungen
>>> * durchgeführt: Laden des Bildes und laden der Koordinaten
>>> * */
>>> protected abstract void initalize();
>>>
>>> /**
>>> * Mit dieser Methode wird geprüft, ob der Benutzer
>>> * das Icon überhaupt sehen/ankilcken darf
>>> * */
>>> public abstract boolean hasPermission(int user_type);
>>>
>>> /**
>>> * Mit dieser Methode wird das Icon gezeichnet
>>> * */
>>> public void draw(Display d, DBCon dbcon, int user_type){
>>> System.out.print(Thread.currentThread().toString());
>>> System.out.print(", ");
>>> System.out.println(d.getThread().toString());
>>> if(hasPermission(user_type)){
>>> s = new Shell(d, SWT.NO_TRIM);
>>> s.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
>>> this.dbcon = dbcon;
>>> this.d = d;
>>> s.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
>>> s.setLayout(new FillLayout());
>>>
>>> Button b = new Button(s, SWT.FLAT);
>>> b.setBackground(d.getSystemColor(SWT.COLOR_WHITE));
>>> b.setImage(icon);
>>> b.setToolTipText(tooltip);
>>> b.addSelectionListener(this);
>>> b.addMouseListener(this);
>>> b.setData(WidgetUtil.CUSTOM_VARIANT, "Icon");
>>>
>>> s.setSize(width, height);
>>> Point p = dbcon.getPos(id);
>>> if(p != null)
>>> s.setLocation(p.x, p.y);
>>> else
>>> s.setLocation(x, y);
>>> s.setVisible(true);
>>> }
>>> }
>>>
>>> public void mouseDoubleClick(MouseEvent e) {
>>> }
>>>
>>> public void mouseDown(MouseEvent e) {
>>> }
>>>
>>> public void widgetDefaultSelected(SelectionEvent e) {
>>> }
>>>
>>> public void mouseUp(MouseEvent e) {
>>> if(e.button == 2){
>>> s.setLocation(e.x, e.y);
>>> if(!dbcon.setPos(new Point(e.x, e.y), id))
>>> MessageDialog.showError(d, "Konnte die Position des
>>> Icons nicht speichern!");
>>> }
>>> }
>>> }
>>>
>>> LogoutIcon.java:
>>>
>>> package mpw_main.ui;
>>>
>>> import java.util.logging.Level;
>>> import java.util.logging.Logger;
>>>
>>> import org.eclipse.rwt.RWT;
>>> import org.eclipse.rwt.graphics.Graphics;
>>> import org.eclipse.swt.events.SelectionEvent;
>>>
>>> public class LogoutIcon extends Icon {
>>>
>>> public boolean hasPermission(int user_type) {
>>> return true;
>>> }
>>>
>>> protected void initalize() {
>>> icon = Graphics.getImage("images/icon-logout.png",
>>> getClass().getClassLoader());
>>> x = 128;
>>> y = 300;
>>> width = 70;
>>> height = 70;
>>> tooltip = "Logout";
>>> id = 1;
>>> }
>>>
>>> public void widgetSelected(SelectionEvent f) {
>>> System.out.print(Thread.currentThread().toString());
>>> System.out.print(", ");
>>> System.out.println(d.getThread().toString());
>>> dbcon.logout();
>>> try{
>>> RWT.getResponse().sendRedirect("http://www.google.de");
>>> } catch(Exception e){
>>> Logger.getLogger("mpw").log(Level.SEVERE, "Couldn't kick
>>> the user", e);
>>> }
>>> //TODO: Kick the user
>>> }
>>>
>>> }
>>>
>>>
>>> AboutIcon.java:
>>>
>>> public class AboutIcon extends Icon {
>>>
>>> public boolean hasPermission(int user_type) {
>>> return true;
>>> }
>>>
>>> protected void initalize() {
>>> icon = Graphics.getImage("images/icon-about.png",
>>> getClass().getClassLoader());
>>> x = 0;
>>> y = 300;
>>> width = 70;
>>> height = 70;
>>> tooltip = "Über";
>>> id = 0;
>>> }
>>>
>>> public void widgetSelected(SelectionEvent e) {
>>> /*d.syncExec(new Runnable(){
>>> public void run(){
>>> new AboutDialog(d);
>>> }
>>> });*/
>>> System.out.print(Thread.currentThread().toString());
>>> System.out.print(", ");
>>> System.out.println(d.getThread().toString());
>>> }
>>> }
|
|
|
Goto Forum:
Current Time: Thu Mar 28 08:55:30 GMT 2024
Powered by FUDForum. Page generated in 0.03742 seconds
|