import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.program.*;
public class LeakExample {
static Display display;
static Shell shell;
static List list;
static Canvas canvas;
static Image image;
public static void main(String[] args) {
// DeviceData data = new DeviceData();
// data.tracking = true;
// display = new Display(data);
display = new Display();
// Sleak sleak = new Sleak();
// sleak.open();
shell = new Shell(display);
shell.setLayout(new FillLayout());
list = new List(shell, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
list.setItems(Program.getExtensions());
canvas = new Canvas(shell, SWT.BORDER);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (image != null) {
e.gc.drawImage(image, 0, 0);
}
}
});
list.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
image = null; // potentially leak one image
String[] selection = list.getSelection();
if (selection.length != 0) {
Program program = Program.findProgram(selection[0]);
if (program != null) {
ImageData imageData = program.getImageData();
if (imageData != null) {
if (image != null) image.dispose();
image = new Image(display, imageData);
}
}
}
canvas.redraw();
}
});
shell.setSize(shell.computeSize(SWT.DEFAULT, 200));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
}
}