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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

2825閲覧

java.awt.geom.Point2D.DoubleのDouble型配列がnullになってしまう

m_s

総合スコア51

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/06/18 16:48

###したいこと
先ほど質問させていただいたもの(java.lang.NullPointerException の発生原因が分からないです)の続きで質問させていただきます。
java.awt.geom.Point2D.DoubleのDouble型をもちいてdouble型の数値を座標x,yに代入したいです
###発生している問題・エラーメッセージ

  • 該当のソースコード

java

1 2import java.awt.Color; 3import java.awt.Graphics; 4import java.awt.event.MouseEvent; 5import java.awt.event.MouseListener; 6import java.awt.geom.Point2D.Double; 7 8import javax.swing.JFrame; 9import javax.swing.JPanel;; 10 11public class Main extends JPanel{ 12 13 Mouse mouse = new Mouse(); 14 public static Double[] point; 15 public static int point_num = 0; 16 public static final int SIZE = 300; 17 18 public Main(){ 19 final int POINT_SIZE = 10; 20 point = new Double[POINT_SIZE];//該当部分:pointがnullかも? 21 22 addMouseListener(mouse); 23 } 24 25 26 27 public static void main(String[] args) { 28 new Main(); 29 // TODO 自動生成されたメソッド・スタブ 30 JFrame f = new JFrame(); 31 f.setSize(600,400); 32 f.add(new Main()); 33 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 34 f.setResizable(true); 35 f.setVisible(true); 36 37 38 } 39//(以下省略) 40}

デバックした所、コンストラクタ内の変数pointがnullになっていました。mainメソッドでは、Mainコンストラクタが呼び出されているのでなぜnullになっているのか自分では分からない状況です。Double型の"配列”にしたことが悪かったのでしょうか?

解答お願いします

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MIURA_Yasuyuki

2016/06/18 17:09

変数pointがnullだったのはどこのタイミングでしょうか?また、何をもってnullだと判断していましたか?「new Main();」の後だったらnullにはならないと思います。
swordone

2016/06/19 00:52

問題は、pointがnullだったのか、配列pointの中身がnullだったのか、ですが、pointのがnullというのは間違いないのですか?
m_s

2016/06/19 01:09

pointがnullだったのは point = new Double[POINT_SIZE]; をMainコンストラクタで呼び出した直後です eclipseのデバックのウォッチ機能でpointを確認した所配列pointの各要素が全てnullになっていました。 きちんと配列pointの宣言を行っているので、なぜpointがnullになっているのか分からないです。
m_s

2016/06/19 01:14

swordoneさん デバックで確認すると配列pointの各要素がnullになっていました。 ということは、pointにはいっている配列の先頭アドレスもnullになっているのかなぁと思ったのですがやっぱりそういうものなのでしょうか?
guest

回答3

0

"pointがnull"と"pointの配列の中身がnull"は意味が違います。
前者はいわば「配列の箱がない状態」、後者は「箱はあるが、中身が空の状態」です。
それぞれ、先頭アドレスがnullと、先頭アドレスはあるがそのアドレスが持つアドレスがnullという状態に該当します。ここを混同しないようにしてください。

投稿2016/06/19 13:18

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m_s

2016/06/21 04:10

解決のきっかけになりました! ありがとうございました
guest

0

ベストアンサー

pointがnullだったのは point = new Double[POINT_SIZE]; をMainコンストラクタで呼び出した直後です eclipseのデバックのウォッチ機能でpointを確認した所配列pointの各要素が全てnullになっていました。 きちんと配列pointの宣言を行っているので、なぜpointがnullになっているのか分からないです。

配列pointはできたが、配列の中身が無い状態です。配列pointの各要素がnullになるのは正しいです。

Java

1point[0] = new Double(x0, y0); 2point[1] = new Double(x1, y1); 3// …

みたいに各要素に代入していく必要があります。

投稿2016/06/19 02:36

MIURA_Yasuyuki

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m_s

2016/06/21 04:11

pointの各要素にnew Doubleしたらエラー回避できました! ありがとうございます
guest

0

NullPointerExceptionが発生する原因としては、
pointの配列がnull、または、point[0]のDouble型が未定義のいずれかが考えられます。
おそらく、後者ではないでしょうか。

pointの変数を初期化するタイミングで、配列の参照先も初期化してはいかがでしょうか。
具体的には、以下の様に0で初期化してみてください。
point = new Double[POINT_SIZE];
Arrays.fill(point, 0d);

また、コンストラクタ内でstaticの変数を初期化しています。

おそらく、クラスの意図としてはインスタンスごとに使用すると推測しますので、
staticは外して、コンストラクタ呼出し後に変数に格納するのがよいです。
Main main = new Main();

staticに使用したい場合、以下の様に記載して、
コンストラクタでは初期化しないのがよいです。
コンストラクタはインスタンスを生成するために使用する機能です。

final int POINT_SIZE = 10;
public static final Double[] point = new Double[POINT_ZIZE];
static {
Arrays.fill(point, 0d);
}

投稿2016/06/20 03:58

y_tochukaso

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m_s

2016/06/21 04:09

解決しました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問