質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.57%

Processingで書いたコードの実行時、java.lang.NullPointerExceptionが出ることへの対処法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,732

toboli

score 15

こんにちは。
Processingで書いたコードを実行すると、java.lang.NullPointerExceptionというエラーが出てしまい、対処に困っています。
対処の方法や方向性などをアドバイスいただけないでしょうか。
エラーメッセージ、ソースコードは以下の通りです。

エラーメッセージ

java.lang.NullPointerException
    at java.io.DataInputStream.readInt(DataInputStream.java:387)
    at processing.core.PFont.<init>(PFont.java:350)
    at processing.core.PApplet.loadFont(PApplet.java:6245)
    at list4_02_AR_Measure.setup(list4_02_AR_Measure.java:148)
    at processing.core.PApplet.handleDraw(PApplet.java:2404)
    at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
    at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
    at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
    at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
    at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
    at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
    at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
    at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
    at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
    at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

該当のソースコード

参考にした本(『ARプログラミング—Processingでつくる拡張現実感のレシピ—』)のサンプルコードをそのまま使用しています。

/* リスト4.2 AR距離計のプログラム */

import jp.nyatla.nyar4psg.*;  // NyAR4psg
import processing.video.*;    // ビデオライブラリ
import processing.serial.*;   // シリアル通信ライブラリ
import cc.arduino.*;          // Arduinoライブラリ

Arduino arduino; // Arduino
Capture cam;     // キャプチャ
MultiMarker ar;  // ARマーカに関する処理をするオブジェクト
int id;          // マーカに割り当てられるID番号

// センサが接続されているアナログピンの番号
int sensorPin = 0;

// マーカに対するセンサの位置(単位:mm)
float offset_x = 45.0;
float offset_y = 0.0;
float offset_z = -30.0;

// キャリブレーションで求めた定数
float a = 118200;
float b = -11.5;

void setup() {
  // 画面の設定
  size(640,480,P3D); 

  // ARをやるための準備
  cam = new Capture(this, width, height);
  ar = new MultiMarker(this, width, height, "camera_para.dat", NyAR4PsgConfig.CONFIG_PSG);

  // マーカの設定(使用するマーカに合わせて値を変更してください)
  id = ar.addARMarker("AR_measure.patt", 50); 

  // Arduinoの設定(自分の環境に合わせてポート番号を変更してください)
  arduino = new Arduino(this, Arduino.list()[0], 57600);

  // フォントの設定(任意のフォントを設定してください)
  PFont font = loadFont("HGSoeiKakugothicUB-50.vlw");
  textFont(font);
}

void draw() {
  // カメラの用意ができていないときは処理をせずに出る
  if (cam.available()==false) return;

  cam.read();             // カメラ画像の読み込み
  background(0);          // 画面の初期化
  ar.drawBackground(cam); // 背景画像の描画
  ar.detect(cam);         // マーカ認識

  // センサ入力からの距離の計算
  float value = arduino.analogRead(sensorPin);  
  float distance = a / (value + b);

  // マーカが認識されていたら
  if ( ar.isExistMarker(id) && distance > 0 ) {
    ar.beginTransform(id);

     // ビームの描画  
      strokeWeight(15);
      stroke(255,0,0,128);   
      line( offset_x, offset_y, offset_z,
            distance + offset_x, offset_y, offset_z );

      // 距離の表示
      rotateZ(PI);
      rotateX(-PI/2);
      fill(255,0,0,127);
      textSize(40);
      translate(-100,-50);
      text("距離:"+int(distance)+"mm",0,0,0);

    ar.endTransform();
  }
}

試したこと

・サンプルコードが載っている本の出版時に使われていたらしいProcessing2.2.1と、Processing3.4(最新版)、どちらのバージョンでも試しましたが、同じエラーが出ました。
・javaのメジャーなエラーだということは分かったのですが、具体的にコードをどう直せばいいかまでは分かりませんでした。

補足情報(FW/ツールのバージョンなど)

PC環境は、windows10です。

ご回答いただけたら幸いです。よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

予めvlw形式のフォントを作成しておく必要があります。
https://processing.org/reference/loadFont_.html

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/26 21:52

    hichon様

    返信が遅くなり、申し訳ありません。
    早々にご回答くださってありがとうございます!

    アドバイス通り、vlw形式のフォントを作成を入れてみると、エラーは出なくなりました!
    本当にありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.57%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る