Hallo,
ich habe den folgenden Code und möchte gerne, dass der Display / Screen nur 1x geöffnet werden kann.
D.h. ich rufe die Methode auf und ein Display / Screen öffnet sich (was es Stand jetzt auch macht).
Nun rufe ich noch einmal die Methode auf, aber es soll der verwendete Screen nur aktualisiert werden.
Aktuell ist es aber so, dass ich dann in der Task - Leiste einen zweiten Prozess (und ein weiteres Window) erhalten.
So sieht der Code aktuell aus:
Display display speichere ich aktuell auch in einem Layer drüber, sodass es nicht ständig neu erzeugt wird...
Ich schätze das Problem ist dadurch, dass ich mehrere Threads erstelle?
Was muss ich hier ändern?
ich habe den folgenden Code und möchte gerne, dass der Display / Screen nur 1x geöffnet werden kann.
D.h. ich rufe die Methode auf und ein Display / Screen öffnet sich (was es Stand jetzt auch macht).
Nun rufe ich noch einmal die Methode auf, aber es soll der verwendete Screen nur aktualisiert werden.
Aktuell ist es aber so, dass ich dann in der Task - Leiste einen zweiten Prozess (und ein weiteres Window) erhalten.
So sieht der Code aktuell aus:
Display display speichere ich aktuell auch in einem Layer drüber, sodass es nicht ständig neu erzeugt wird...
Java:
public static void openScreen(Display display, String url, int width, int height, String titleText,
boolean fullscreen, boolean exitWithEsc, int exitKey) {
LOGGER.info("START openScreen");
display.asyncExec(new Runnable() {
public void run() {
final Shell shell = new Shell(display);
if (exitWithEsc) {
shell.addListener(SWT.Traverse, new Listener() {
@Override
public void handleEvent(Event event) {
if (event.character == exitKey) {
event.doit = false;
shell.close();
display.close();
}
}
});
}
shell.setSize(width, height);
shell.setFullScreen(fullscreen);
shell.setText(titleText);
shell.setLocation(0, 0);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
gridLayout.marginWidth = 0;
gridLayout.marginHeight = 0;
shell.setLayout(gridLayout);
final Browser browser = new Browser(shell, SWT.NONE);
browser.setJavascriptEnabled(true);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.FILL;
data.horizontalSpan = 3;
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
data.widthHint = width;
data.heightHint = height;
browser.setLayoutData(data);
shell.open();
browser.setUrl(url);
}
});
LOGGER.info("END openScreen");
return;
}
Ich schätze das Problem ist dadurch, dass ich mehrere Threads erstelle?
Lasse ich das weg, bekomme ich eine Exception (invalid Thread Access)...display.asyncExec(new Runnable() {
Was muss ich hier ändern?