事件处理是否涉及单独的线程?

时间:2016-11-12 13:02:39

标签: java multithreading

伙计这是我的代码。可以在processing library docsunfolding maps library docs找到所用库的文档。它在画布中显示Google地图。调用setup()方法一次,然后重复调用draw()方法。一旦按下键盘上的w按钮,当调用keyPressed()时,背景变为白色。

import processing.core.*;
import de.fhpotsdam.unfolding.*;
import de.fhpotsdam.unfolding.providers.Google;

public class MyDefaultEventExample extends PApplet {

    private UnfoldingMap map;

    public void setup(){
        size (800, 600, OPENGL);
        map = new UnfoldingMap (this, 50, 50, 700, 500, new Google.GoogleMapProvider());

    }

    public void draw(){
        map.draw();
    }

    public void keyPressed(){
        if(key == 'w'){
            background (255, 255, 255);
        }
    }
}

现在我并没有准确地理解幕后发生的事情。我已经考虑过了,并从中理解了一些东西。我不知道我是否正确。请检查这是否真的发生了。

据我说 -

  1. PApplet类中有一个main方法,只要我运行负责显示画布并调用setup()和draw()方法的程序就会调用它。伪代码(不是非常"精确",只是为了给出我的感受)可以用来描述这个是

       public static void main (){
    
           PApplet myApplet = new PApplet();
    
           myApplet.displayCanvas(); //displays a default canvas with a default background lets say gray.
           myapplet.setup();// calls the setup method.
    
           /* code for creating and calling a separate thread to handle events. */
    
           // repeatedly calls the draw method until the user closes the canvas window and closes the program
           while(!windowClosed){ 
               myApplet.draw();
           }   
       }
    
  2. 另外,伪代码(不是非常"精确",只是为了给出我的感觉的要点)用于监听根据我的单独线程中的事件应该是这样的:

    while(!windowClosed){
        Event event = listenForEvents();
        handleEvent(event); // this accounts for calling keyPressed().
    }
    
  3. 这是正确的思维方式还是全部发生在while循环内部的主线程中,或者涉及的线程超过2个。我写下了我的感受。任何建议/帮助将非常感激:)

1 个答案:

答案 0 :(得分:0)

查看此SO问题: How do you debug Java Applets?

有关于如何调试applet以及如何列出所有线程的说明。如果有任何工作线程,您将能够确定自己。