我的项目是Processing的一个导出的android项目。它使用Fontastic库。每当我尝试在我的Android设备上运行它时,它总是强制关闭。我之所以认为它是因为MainActivity上的 font.setup(),但我想不出任何解决方案。请查看以下代码行。谢谢。
这是 MainActivity.java
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
public static Wave font;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
font.setup();
}
}
这是名为 Wave.java
的类import fontastic.FPoint;
import fontastic.Fontastic;
import processing.core.PApplet;
import processing.core.PFont;
public class Wave extends PApplet {
Fontastic f;
float charWidth = 512;
PFont myFont;
int version = 0;
boolean fontBuilt = false;
public void setup(){
randomize();
create();
}
public void randomize(){
version++;
if (f != null) { f.cleanup(); }
f = new Fontastic(this, "WaveFont" + nf(version,4));
f.setAdvanceWidth(PApplet.parseInt(charWidth));
for (int i=0; i<Fontastic.alphabet.length; i++) {
char c = Fontastic.alphabet[i];
FPoint[] points = new FPoint[4];
float rectSize = charWidth * 0.5f;
float rnd = charWidth * 0.2f;
points[0] = new FPoint(charWidth / 2 - rectSize / 2, charWidth / 2 - rectSize / 2);
points[1] = new FPoint(charWidth / 2 - rectSize / 2, charWidth / 2 + rectSize / 2);
points[2] = new FPoint(charWidth / 2 + rectSize / 2, charWidth / 2 + rectSize / 2);
points[3] = new FPoint(charWidth / 2 + rectSize / 2, charWidth / 2 - rectSize / 2);
points[0].setControlPoint1(points[0].x + rnd, points[0].y + random(-rnd, rnd));
points[1].setControlPoint1(points[1].x + random(-rnd, rnd), points[1].y - rnd);
points[2].setControlPoint1(points[2].x - rnd, points[2].y + random(-rnd, rnd));
points[3].setControlPoint1(points[3].x - random(-rnd, rnd), points[3].y + rnd);
points[0].setControlPoint2(points[0].x + random(-rnd, rnd), points[0].y + rnd);
points[1].setControlPoint2(points[1].x + rnd, points[1].y + random(-rnd, rnd));
points[2].setControlPoint2(points[2].x + random(-rnd, rnd), points[2].y - rnd);
points[3].setControlPoint2(points[3].x - rnd, points[3].y + random(-rnd, rnd));
f.addGlyph(c).addContour(points);
}
}
public void create(){
f.buildFont();
f.cleanup();
myFont = createFont(f.getTTFfilename(), 200);
fontBuilt = true;
}
}
答案 0 :(得分:1)
您需要创建要使用其方法的类的对象。如果您不这样做,您将获得NullPointerException
,因为变量font
未初始化。
这样做
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
font = new Wave(); // You missed this line
font.setup();
}