SDA SE Wiki

Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering

User Tools

Site Tools


  • 1 zu 1 beziehung zu Display instanz
  • letztere ist praktisch nichts anderes (zumindest nicht viel :-) ) als der EPT
  • in nahezu allen Fällen genau 1 Display/EPT
  • details in arbeit.

Die main-Methode einer typischen SWT Applikation sieht z.B. so aus

  /**
   * Invokes as a standalone program.
   */
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    ControlExample instance = new ControlExample(shell);
    shell.setText(getResourceString("window.title"));
    setShellSize(display, shell);
    shell.open();
    while (! shell.isDisposed()) {
       if (! display.readAndDispatch()) display.sleep();
    }
    instance.dispose();
  }

(schamlos entwendet aus den Eclipse SDK Beispielen, die ihr hier findet: http://www.eclipse.org/downloads)

Bemerkenswert im Gegensatz zu einer Swing/awt Applikation:

Das Dispatching der Events geschieht (mehr oder weniger) explizit und in aller Öffentlichkeit. Die while-Schleife im obigen Beispiel ist der Event Loop. Was die Methode Display.readAndDispatch() im Großen&Ganzen macht, wollen wir uns im folgenden ansehen.

Nehmen wir der Einfachheit halber an, das Windowing-System (also Windows,X11 etc) stellt unserer Applikation einen fifo bereit, in den es alle möglichen Events schreibt, um uns über Benutzerinteraktionen wie Mousebewegungen, Tastatureingaben, etc auf dem Laufenden zu halten. Auf der anderen Seite sitzt unsere Applikation und ließt diese Events. Das sieht in etwa so aus:

public boolean readAndDispatch(){
  //try to read exactly one event from the fifo
  //IMPORTANT: this method blocks until one event is 
  //read!
  Event ev = readOneEvent(windowSystemFifo);

  //Dispatch event to top-level Widgets and/or other low-level
  //event listeners that have registered with this Display instance
  dispatchEvent(ev);

  //Return true   if there are events left in the fifo, 
  //       false  if the fifo is empty
  return windowSystemFifo.hashMoreData();
}

den Code habe ich mir natürlich ausgedacht! Die eine oder andere Sache fehlt vermutlich.

research/jtransformer/eventprocessingthread.txt · Last modified: 2018/05/09 01:59 (external edit)

SEWiki, © 2019