我只用了幾個星期的java,我不知道發生了什麼。Android中的線程。不知道該怎麼做。超困惑
我正在製作一個畫布,我從一個tutoral複製粘貼了這段代碼,但它有一堆錯誤,我肯定只會發生這種錯誤,因爲我不知道如何實際設置代碼。本教程適用於已經知道如何進行線程處理的人員,而且我迷路了。我不知道如何解決這些錯誤。
即:
postInvalidate()「心不是一個方法」或什麼的,即使它是一個內置的Android功能...同樣與setWillNotDraw和其他的。
我超級困惑,我不知道如何解決這些錯誤。
package com.example.routedrawingtest;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
class PanelThread extends Thread {
private SurfaceHolder _surfaceHolder;
private DrawingPanel _panel;
private boolean _run = false;
public PanelThread(SurfaceHolder surfaceHolder, DrawingPanel panel) {
_surfaceHolder = surfaceHolder;
_panel = panel;
}
public void setRunning(boolean run) { //Allow us to stop the thread
_run = run;
}
@Override
public void run() {
Canvas c;
while (_run) { //When setRunning(false) occurs, _run is
c = null; //set to false and loop ends, stopping thread
try {
c = _surfaceHolder.lockCanvas(null);
synchronized (_surfaceHolder) {
postInvalidate();
}
} finally {
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
public void surfaceCreated(SurfaceHolder holder) {
setWillNotDraw(false); //Allows us to use invalidate() to call onDraw()
_thread = new PanelThread(getHolder(), this); //Start the thread that
_thread.setRunning(true); //will make calls to
_thread.start(); //onDraw()
}
public void surfaceDestroyed(SurfaceHolder holder) {
try {
_thread.setRunning(false); //Tells thread to stop
_thread.join(); //Removes thread from mem.
} catch (InterruptedException e) {}
}
上面的代碼並不好,特別是設置布爾變量運行需要以某種記憶障礙的進行,以確保能見度。使變量易變是最簡單的方法。 – brain 2013-03-21 11:11:43