Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串变量出现NullPointException错误(初学者)_Java_Variables_Processing - Fatal编程技术网

Java 字符串变量出现NullPointException错误(初学者)

Java 字符串变量出现NullPointException错误(初学者),java,variables,processing,Java,Variables,Processing,我试图模仿这里看到的一个类似的代码,但我似乎有点混淆了代码。我试图得到这些字母的效果,基本上就是画这幅画的后期图像。但是我得到了一个NullPointException,并假设它与我初始化字符串变量的方式有关,但我似乎找不到我做错了什么 错误 Exception in thread "Animation Thread" java.lang.NullPointerException at processing.opengl.PGL.getString(PGL.java:1029)

我试图模仿这里看到的一个类似的代码,但我似乎有点混淆了代码。我试图得到这些字母的效果,基本上就是画这幅画的后期图像。但是我得到了一个NullPointException,并假设它与我初始化字符串变量的方式有关,但我似乎找不到我做错了什么

错误

Exception in thread "Animation Thread" java.lang.NullPointerException
    at processing.opengl.PGL.getString(PGL.java:1029)
    at processing.opengl.PGraphicsOpenGL.getGLParameters(PGraphicsOpenGL.java:6076)
    at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1547)
    at MLKpractice.letterfit(MLKpractice.java:147)
    at MLKpractice.draw(MLKpractice.java:98)
    at processing.core.PApplet.handleDraw(PApplet.java:2120)
    at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:197)
    at processing.core.PApplet.run(PApplet.java:1998)
    at java.lang.Thread.run(Thread.java:680)
程序说错误在第127行

lettersquare.beginDraw();
但我相信错误就在上面

PFont font;
String fontpath = "ArialMT-200.vlw";
int fontstart = 300;
int fontend = 8;
float fontsize = fontstart;
float fontsizedecrease = 0.97;
PImage bg;
PImage australia;
PImage austria;
String country1 = "australia.jpg";
String country2 = "austria.jpg";
String letters = "Australia";
char[] chars = new char[52];
int nchars = 0;
int iterations = 500;
int c = 0;
PGraphics letter,lettersquare,drawing;

void setup(){
  //initialize the sketch
  size(900,600);
  //background(255);
  //initialize the font
  //font = loadFont(fontpath);
  ///*
  for(int i=0;i<letters.length();i++){
    boolean found = false;
    char lc = letters.charAt(i);
    for(int j=0;j<nchars;j++){
      if(chars[j]==lc){
        found = true;
        break;
      }
    }
    if(!found) chars[nchars++] = lc;
  }
  chars = (char[]) subset(chars,0,nchars);
  font = createFont("Arial",200,true,chars);
  //*/
  textAlign(CENTER,CENTER);
  //load the image that will be filled with letters
  australia = loadImage(country1);
   austria = loadImage(country2);

  bg = loadImage("background.jpg");
  //posterize the image
  australia.filter(THRESHOLD,0.4);
  australia.filter(BLUR,3);
  australia.filter(THRESHOLD,0.6);
  //initialize the drawing buffers
  letter = createGraphics((int)fontsize,(int)fontsize,JAVA2D);
  lettersquare = createGraphics((int)fontsize,(int)fontsize,P2D);
  drawing = createGraphics(width,height,JAVA2D);
  drawing.beginDraw();
  drawing.background(255);
  // THIS STUPID THING NEEDS TO GO HERE!!!!
  drawing.image(bg,0,0);
  drawing.endDraw();
}

void draw(){

  if(floor(fontsize)>fontend&&c<letters.length()-1){
    if(!letterfit()){
      fontsize *= fontsizedecrease;
    }else{
      c++;
      if(c==11){
        fontsize *= 0.75;
      }
    }

    tint(255);
    image(drawing,0,0);


  if (keyCode == LEFT) {
    image(austria,0,0);
    }
   // if (keyCode == RIGHT) {
     // frog1.frogx = frog1.frogx + 1;
   // }


    if(mousePressed){
      tint(255,100);
      image(australia,0,0);
    }
  }else{
    tint(255);
    image(drawing,0,0);
    println(c+" "+letters.length());
    /*
    save("mlk-"+hour()+""+minute()+""+second()+".tif");
    exit();
    */
    noLoop();
  }
} 
boolean letterfit(){
  letter.beginDraw();
  letter.background(255,0);
  letter.fill(0);
  letter.textAlign(CENTER,CENTER);
  letter.translate(fontsize/2,fontsize/2);
  letter.rotate(random(TWO_PI));
  letter.scale(fontsize/fontstart);
  letter.textFont(font);
  letter.smooth();
  letter.text(letters.charAt(c),0,0);
  letter.endDraw();
  lettersquare.beginDraw();
PFont字体;
字符串fontpath=“ArialMT-200.vlw”;
int fontstart=300;
int-fontend=8;
float fontsize=fontstart;
float-fontsizedecrease=0.97;
皮马杰bg;
PImage澳大利亚;
PImage奥地利;
字符串country1=“australia.jpg”;
字符串country2=“austria.jpg”;
字符串字母=“澳大利亚”;
char[]chars=新字符[52];
int-nchars=0;
int迭代次数=500;
int c=0;
印刷字体、方形字体、图纸;
无效设置(){
//初始化草图
规模(900600);
//背景(255);
//初始化字体
//font=loadFont(fontpath);
///*

对于(inti=0;i您最有可能遇到的问题是,如果主渲染器是Java2D,则无法使用OpenGL PGraphics渲染器

该链接有一个变通方法,主要涉及将主渲染器更改为OpenGL


更新版本的PGraphics应该会给您一个更详细的例外情况。

在调用letterfit()之前您是否调用了setup()?@JoachimIsaksson是的,我不会调用letter fit,直到稍后我会在letterfit()的开头打印出letter的值。它可能是0。不知怎的!@ChristineAustin试图打印图形的返回值。这很奇怪,在某一点上,我可以从我引用的站点获取整个代码,并且代码工作正常,但现在如果我尝试这样做,我会得到错误…啊,我现在明白了,这都是因为处理2.0b1吗?我只是担心c因为我用它做作业,学校的电脑运行在我原来的代码工作的旧版本上。@ChristineAustin据我所知,它只与2.x版本相关,1.x应该可以工作。好的,谢谢你的帮助!我想我会播放它保存并在1.x版本上运行它,因为代码在那里工作。我会我自己从来没有注意到过!天才:]