Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Standard Widget Toolkit (SWT) » Problem with Image class??
Problem with Image class?? [message #460207] Mon, 22 August 2005 20:21 Go to next message
No real name is currently offline No real name
Messages: 3
Registered: July 2009
Junior Member
Hi

We are working on a graphical editing tool. The model editor has a flyout
palette. After opening and closing a model a few times, we get the error
below.
When we load a model, the memory usage in task manager keeps increasing, so
also the count of handles. We only have 4 images in the image registry. And
we have a few more in the palette, outside the image registry. We have not
supplied any images to the outline view to see if that solves the issue, but
it does not.

In the Image class, in the init(Device, int, int) method, the handle =
OS.CreateCompatibleBitmap(hDC, width, height); call is made. After some
time, this fails to get a handle and we get the error given below. None of
our code is involved here. Is this an eclipse bug OR are we not doing
something?

thanks and regards
Vinay

Unhandled event loop exception
Reason:
No more handles
Error while informing user about event loop exception:
org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:2717)
at org.eclipse.swt.graphics.Image.init(Image.java:1366)
at org.eclipse.swt.graphics.Image.<init>(Image.java:161)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$RotatedTit leLabel.updateImage(FlyoutPaletteComposite.java:988)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$RotatedTit leLabel.setFont(FlyoutPaletteComposite.java:972)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$TitleCanva s.init(FlyoutPaletteComposite.java:1188)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$TitleCanva s. <init>(FlyoutPaletteComposite.java:1170)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.createTitl e(FlyoutPaletteComposite.java:241)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.access$5(F lyoutPaletteComposite.java:240)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$Sash.<init >(FlyoutPaletteComposite.java:607)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.createSash (FlyoutPaletteComposite.java:237)
at
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.<init>(FlyoutPaletteComposite.java:169)
at
org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette.cr eatePartControl(GraphicalEditorWithFlyoutPalette.java:75)
at org.eclipse.ui.internal.PartPane$2.run(PartPane.java:137)
at
org.eclipse.core.internal.runtime.InternalPlatform.run(Inter nalPlatform.java:616)
at org.eclipse.core.runtime.Platform.run(Platform.java:747)
at org.eclipse.ui.internal.PartPane.createChildControl(PartPane .java:133)
at org.eclipse.ui.internal.PartPane.createControl(PartPane.java :205)
at
org.eclipse.ui.internal.PartStack.refreshPresentationSelecti on(PartStack.java:939)
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.jav a:921)
at org.eclipse.ui.internal.EditorStack.setSelection(EditorStack .java:196)
at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:10 20)
at org.eclipse.ui.internal.PartStack.add(PartStack.java:290)
at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:121 )
at
org.eclipse.ui.internal.EditorSashContainer.addEditor(Editor SashContainer.java:59)
at
org.eclipse.ui.internal.EditorAreaHelper.openEditor(EditorAr eaHelper.java:266)
at org.eclipse.ui.internal.EditorManager$4.run(EditorManager.ja va:694)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator .java:69)
at
org.eclipse.ui.internal.EditorManager.createEditorTab(Editor Manager.java:683)
at
org.eclipse.ui.internal.EditorManager.openInternalEditor(Edi torManager.java:790)
at
org.eclipse.ui.internal.EditorManager.openEditorFromDescript or(EditorManager.java:582)
at org.eclipse.ui.internal.EditorManager.openEditor(EditorManag er.java:570)
at
org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched( WorkbenchPage.java:2244)
at
org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(Workben chPage.java:2177)
at org.eclipse.ui.internal.WorkbenchPage.access$6(WorkbenchPage .java:2169)
at org.eclipse.ui.internal.WorkbenchPage$9.run(WorkbenchPage.ja va:2156)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator .java:69)
at
org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPa ge.java:2151)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:299)
at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileActio n.java:96)
at
org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystem EditorAction.java:94)
at
org.eclipse.ui.views.navigator.OpenActionGroup.runDefaultAct ion(OpenActionGroup.java:111)
at
org.eclipse.ui.views.navigator.MainActionGroup.runDefaultAct ion(MainActionGroup.java:293)
at
org.eclipse.ui.views.navigator.ResourceNavigator.handleOpen( ResourceNavigator.java:624)
at
org.eclipse.ui.views.navigator.ResourceNavigator$6.open(Reso urceNavigator.java:388)
at
org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredV iewer.java:429)
at
org.eclipse.core.internal.runtime.InternalPlatform.run(Inter nalPlatform.java:616)
at org.eclipse.core.runtime.Platform.run(Platform.java:747)
at
org.eclipse.jface.viewers.StructuredViewer.fireOpen(Structur edViewer.java:427)
at
org.eclipse.jface.viewers.StructuredViewer.handleOpen(Struct uredViewer.java:635)
at
org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(Stru cturedViewer.java:731)
at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrate gy.java:211)
at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.ja va:206)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrate gy.java:238)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :82)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:2773)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2432)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1377)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:254)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:141)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplicatio n.java:96)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.java:335)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:273)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
at org.eclipse.core.launcher.Main.run(Main.java:704)
at org.eclipse.core.launcher.Main.main(Main.java:688)
Dialog open exception:
org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:2717)
at org.eclipse.swt.SWT.error(SWT.java:2616)
at org.eclipse.swt.SWT.error(SWT.java:2587)
at org.eclipse.swt.graphics.Image.init(Image.java:1564)
at org.eclipse.swt.graphics.Image.init(Image.java:1689)
at org.eclipse.swt.graphics.Image.<init>(Image.java:628)
at org.eclipse.swt.widgets.Decorations.setImages(Decorations.ja va:840)
at org.eclipse.swt.widgets.Decorations.setImages(Decorations.ja va:909)
at org.eclipse.jface.window.Window.configureShell(Window.java:2 91)
at
org.eclipse.jface.dialogs.MessageDialog.configureShell(Messa geDialog.java:159)
at org.eclipse.jface.window.Window.createShell(Window.java:408)
at org.eclipse.jface.window.Window.create(Window.java:347)
at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:925)
at
org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open (InternalErrorDialog.java:67)
at
org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open Question(InternalErrorDialog.java:173)
at
org.eclipse.ui.internal.ide.IDEExceptionHandler.openQuestion Dialog(IDEExceptionHandler.java:151)
at
org.eclipse.ui.internal.ide.IDEExceptionHandler.handleExcept ion(IDEExceptionHandler.java:83)
at
org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor.eventLoopExc eption(IDEWorkbenchAdvisor.java:240)
at
org.eclipse.ui.internal.ExceptionHandler.handleException(Exc eptionHandler.java:62)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1381)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:254)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:141)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplicatio n.java:96)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.java:335)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:273)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
at org.eclipse.core.launcher.Main.run(Main.java:704)
at org.eclipse.core.launcher.Main.main(Main.java:688)
Re: Problem with Image class?? [message #460211 is a reply to message #460207] Mon, 22 August 2005 20:51 Go to previous messageGo to next message
Randy Hudson is currently offline Randy Hudson
Messages: 123
Registered: July 2009
Senior Member
Can you reproduce this consistently? You probably have a resource leak
somewhere and this just happens to be the place when the limit was reached.
Re: Problem with Image class?? [message #460213 is a reply to message #460207] Mon, 22 August 2005 20:59 Go to previous message
Pratik Shah is currently offline Pratik Shah
Messages: 1077
Registered: July 2009
Senior Member
You should use Sleak to see what images are being leaked (and to confirm
that is indeed the problem).
http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/plat form-swt-home/dev.html#tools

"vsikka" <vsikka@pathwaytechnologies.net> wrote in message
news:ded53t$l3u$1@news.eclipse.org...
> Hi
>
> We are working on a graphical editing tool. The model editor has a flyout
> palette. After opening and closing a model a few times, we get the error
> below.
> When we load a model, the memory usage in task manager keeps increasing,
so
> also the count of handles. We only have 4 images in the image registry.
And
> we have a few more in the palette, outside the image registry. We have not
> supplied any images to the outline view to see if that solves the issue,
but
> it does not.
>
> In the Image class, in the init(Device, int, int) method, the handle
=
> OS.CreateCompatibleBitmap(hDC, width, height); call is made. After some
> time, this fails to get a handle and we get the error given below. None of
> our code is involved here. Is this an eclipse bug OR are we not doing
> something?
>
> thanks and regards
> Vinay
>
> Unhandled event loop exception
> Reason:
> No more handles
> Error while informing user about event loop exception:
> org.eclipse.swt.SWTError: No more handles
> at org.eclipse.swt.SWT.error(SWT.java:2717)
> at org.eclipse.swt.graphics.Image.init(Image.java:1366)
> at org.eclipse.swt.graphics.Image.<init>(Image.java:161)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$RotatedTit leLabel.updateIm
age(FlyoutPaletteComposite.java:988)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$RotatedTit leLabel.setFont(
FlyoutPaletteComposite.java:972)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$TitleCanva s.init(FlyoutPal
etteComposite.java:1188)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$TitleCanva s. <init>(FlyoutP
aletteComposite.java:1170)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.createTitl e(FlyoutPaletteC
omposite.java:241)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.access$5(F lyoutPaletteComp
osite.java:240)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite$Sash.<init >(FlyoutPaletteC
omposite.java:607)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.createSash (FlyoutPaletteCo
mposite.java:237)
> at
>
org.eclipse.gef.ui.palette.FlyoutPaletteComposite.<init>(FlyoutPaletteCompos
ite.java:169)
> at
>
org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette.cr eatePartControl(
GraphicalEditorWithFlyoutPalette.java:75)
> at org.eclipse.ui.internal.PartPane$2.run(PartPane.java:137)
> at
>
org.eclipse.core.internal.runtime.InternalPlatform.run(Inter nalPlatform.java
:616)
> at org.eclipse.core.runtime.Platform.run(Platform.java:747)
> at org.eclipse.ui.internal.PartPane.createChildControl(PartPane .java:133)
> at org.eclipse.ui.internal.PartPane.createControl(PartPane.java :205)
> at
>
org.eclipse.ui.internal.PartStack.refreshPresentationSelecti on(PartStack.jav
a:939)
> at org.eclipse.ui.internal.PartStack.setSelection(PartStack.jav a:921)
> at org.eclipse.ui.internal.EditorStack.setSelection(EditorStack .java:196)
> at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:10 20)
> at org.eclipse.ui.internal.PartStack.add(PartStack.java:290)
> at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:121 )
> at
>
org.eclipse.ui.internal.EditorSashContainer.addEditor(Editor SashContainer.ja
va:59)
> at
>
org.eclipse.ui.internal.EditorAreaHelper.openEditor(EditorAr eaHelper.java:26
6)
> at org.eclipse.ui.internal.EditorManager$4.run(EditorManager.ja va:694)
> at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator .java:69)
> at
>
org.eclipse.ui.internal.EditorManager.createEditorTab(Editor Manager.java:683
)
> at
>
org.eclipse.ui.internal.EditorManager.openInternalEditor(Edi torManager.java:
790)
> at
>
org.eclipse.ui.internal.EditorManager.openEditorFromDescript or(EditorManager
..java:582)
> at
org.eclipse.ui.internal.EditorManager.openEditor(EditorManag er.java:570)
> at
>
org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched( WorkbenchPage.ja
va:2244)
> at
>
org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(Workben chPage.java:2177
)
> at
org.eclipse.ui.internal.WorkbenchPage.access$6(WorkbenchPage .java:2169)
> at org.eclipse.ui.internal.WorkbenchPage$9.run(WorkbenchPage.ja va:2156)
> at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator .java:69)
> at
> org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPa ge.java:2151)
> at org.eclipse.ui.ide.IDE.openEditor(IDE.java:299)
> at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileActio n.java:96)
> at
>
org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystem EditorAction.jav
a:94)
> at
>
org.eclipse.ui.views.navigator.OpenActionGroup.runDefaultAct ion(OpenActionGr
oup.java:111)
> at
>
org.eclipse.ui.views.navigator.MainActionGroup.runDefaultAct ion(MainActionGr
oup.java:293)
> at
>
org.eclipse.ui.views.navigator.ResourceNavigator.handleOpen( ResourceNavigato
r.java:624)
> at
>
org.eclipse.ui.views.navigator.ResourceNavigator$6.open(Reso urceNavigator.ja
va:388)
> at
>
org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredV iewer.java:429)
> at
>
org.eclipse.core.internal.runtime.InternalPlatform.run(Inter nalPlatform.java
:616)
> at org.eclipse.core.runtime.Platform.run(Platform.java:747)
> at
>
org.eclipse.jface.viewers.StructuredViewer.fireOpen(Structur edViewer.java:42
7)
> at
>
org.eclipse.jface.viewers.StructuredViewer.handleOpen(Struct uredViewer.java:
635)
> at
>
org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(Stru cturedViewer.jav
a:731)
> at
org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrate gy.java:211)
> at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.ja va:206)
> at
org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrate gy.java:238)
> at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :82)
> at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
> at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:2773)
> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :2432)
> at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1377)
> at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
> at
>
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:254)
> at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:141)
> at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplicatio n.java:96)
> at
>
org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.
java:335)
> at
>
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:273)
> at
>
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:129)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
> at org.eclipse.core.launcher.Main.run(Main.java:704)
> at org.eclipse.core.launcher.Main.main(Main.java:688)
> Dialog open exception:
> org.eclipse.swt.SWTError: No more handles
> at org.eclipse.swt.SWT.error(SWT.java:2717)
> at org.eclipse.swt.SWT.error(SWT.java:2616)
> at org.eclipse.swt.SWT.error(SWT.java:2587)
> at org.eclipse.swt.graphics.Image.init(Image.java:1564)
> at org.eclipse.swt.graphics.Image.init(Image.java:1689)
> at org.eclipse.swt.graphics.Image.<init>(Image.java:628)
> at org.eclipse.swt.widgets.Decorations.setImages(Decorations.ja va:840)
> at org.eclipse.swt.widgets.Decorations.setImages(Decorations.ja va:909)
> at org.eclipse.jface.window.Window.configureShell(Window.java:2 91)
> at
>
org.eclipse.jface.dialogs.MessageDialog.configureShell(Messa geDialog.java:15
9)
> at org.eclipse.jface.window.Window.createShell(Window.java:408)
> at org.eclipse.jface.window.Window.create(Window.java:347)
> at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:925)
> at
>
org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open (InternalErrorDi
alog.java:67)
> at
>
org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open Question(Interna
lErrorDialog.java:173)
> at
>
org.eclipse.ui.internal.ide.IDEExceptionHandler.openQuestion Dialog(IDEExcept
ionHandler.java:151)
> at
>
org.eclipse.ui.internal.ide.IDEExceptionHandler.handleExcept ion(IDEException
Handler.java:83)
> at
>
org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor.eventLoopExc eption(IDEWorkbe
nchAdvisor.java:240)
> at
>
org.eclipse.ui.internal.ExceptionHandler.handleException(Exc eptionHandler.ja
va:62)
> at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:1381)
> at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
> at
>
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:254)
> at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:141)
> at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplicatio n.java:96)
> at
>
org.eclipse.core.internal.runtime.PlatformActivator$1.run(Pl atformActivator.
java:335)
> at
>
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:273)
> at
>
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:129)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
> at org.eclipse.core.launcher.Main.run(Main.java:704)
> at org.eclipse.core.launcher.Main.main(Main.java:688)
>
>
>
>
Previous Topic:packing first column of a TableTree
Next Topic:Image from an URL
Goto Forum:
  


Current Time: Sat Oct 25 12:17:30 GMT 2014

Powered by FUDForum. Page generated in 0.06517 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software