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

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

ただいまの
回答率

90.51%

  • Spring Boot

    724questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • Java EE

    410questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

  • MongoDB

    273questions

    MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

  • IntelliJ IDEA

    168questions

    IntelliJ IDEA(インテリジェイ アイディア)は、JetBrains社が開発した、 JavaやScalaなどで利用される統合開発環境です。

JavaEEで作ったメソッドが呼び出せない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 600

mercredi

score 18

前提・実現したいこと

IntelliJでJavaEE、Springboot、Mavenを使ってTrading systemを作っています。
データはCSVファイルに保存してあり、CSVReaderRunnerクラスのreadCsvFunForOneSymbolメソッドで読み込みTreeMapにストアして返しています。
このメソッドを別のクラスから呼び出したいのですが、以下のように"Cannot resolve symbol"というエラーが出てしまいます。

発生している問題・エラーメッセージ

![イメージ説明](bb984bd82d6159bf15252a54cd430cf9.png)

上図のようにInstantiateして呼び出した場合も、普通に呼び出した場合も同じエラーが出てきます。
CSVReaderRunnerクラス内でも呼びだしてみたのですが、やはり同じエラーが出てしまいました。

ちなみにユニットテストをしてみたところ、readCsvFunForOneSymbolメソッドはパスしました。

CSVReaderRunnerクラス

package guru.springframework.services;


import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;

import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import com.opencsv.CSVReader;

import guru.springframework.domain.FunData;
import guru.springframework.domain.HistoricalData;

public class CSVReaderRunner {

    CSVReaderRunner()
    {}

    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");

    public static SortedMap<DateTime, FunData> readCsvFunForOneSymbol(String path, String symbol) throws IOException {
        DateTime t = DateTime.now();
        SortedMap<DateTime, FunData> result = new TreeMap<DateTime, FunData>();
        String csvFile = path + symbol + ".csv";

        CSVReader reader = null;
        try {
            reader = new CSVReader(new FileReader(csvFile));
            String[] line;
            while ((line = reader.readNext()) != null) {
                FunData data = new FunData();
                data.setDate(t);
                System.out.println(line[0]);
                data.setTrillingPE(Double.parseDouble(line[0]));
                data.setPriceToSales(Double.parseDouble(line[1]));
                data.setYield(Double.parseDouble(line[2]));
                data.setPB(Double.parseDouble(line[3]));
                data.setEV(Double.parseDouble(line[4]));
                data.setEarningsQuarterlyGrowth(Double.parseDouble(line[5]));
                data.setNetIncomeToCommon(Double.parseDouble(line[6]));
                data.setRevenueGrowth(Double.parseDouble(line[7]));
                data.setOperatingCashflow(Double.parseDouble(line[8]));
                data.setReturnOnEquity(Double.parseDouble(line[9]));

                if (!result.keySet().contains(t)) {
                    result.put(t, data);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            Logger.getLogger(CSVReaderRunner.class.getName()).log(Level.ERROR, "Error while open file", e);
        }

        return result;

    }

    public static List<String> loadSymbols(String path) {

        String csvFile = path + "symbols.csv";

        List<String> symbols = new ArrayList<String>();

        CSVReader reader = null;
        try {
            reader = new CSVReader(new FileReader(csvFile));
            String[] line;
            while ((line = reader.readNext()) != null) {

                symbols.add(line[0]);
            }
        } catch (IOException e) {
            e.printStackTrace();
            Logger.getLogger(CSVReaderRunner.class.getName()).log(Level.ERROR, "Error while open file", e);
        }

        return symbols;

    }

    public static SortedMap<DateTime, HistoricalData> readCsvForOneSymbol(String path, String symbol)
            throws IOException {

        SortedMap<DateTime, HistoricalData> result = new TreeMap<DateTime, HistoricalData>();



        String csvFile = path + symbol + ".csv";



        System.out.println("csv file: " + csvFile);

        CSVReader reader = null;
        try {
            reader = new CSVReader(new FileReader(csvFile));
            String[] line;
            while ((line = reader.readNext()) != null) {
                HistoricalData data = new HistoricalData();
                DateTime t = new DateTime(DATE_FORMAT.parse(line[0]));
                data.setDate(t);
                data.setAdjClosePrice(line[6]);
                data.setClosePrice(line[4]);
                data.setHighPrice(line[2]);
                data.setLowPrice(line[3]);
                data.setOpenPrice(line[1]);
                data.setSymbol(symbol);
                data.setVolume(line[5]);
                if (!result.keySet().contains(t)) {
                    result.put(t, data);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            Logger.getLogger(CSVReaderRunner.class.getName()).log(Level.ERROR, "Error while open file", e);
        } catch (ParseException e) {
            Logger.getLogger(CSVReaderRunner.class.getName()).log(Level.ERROR, "Error while parsing date", e);
        }

        return result;

    }


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

readCsvFunForOneSymbolはstaticメソッドになっていますね。
staticなのでnewで生成したインスタンスのメソッドとして呼び出そうととしても、
インスタンスには存在しないものなので解決(resolve≒見つける)することができず呼び出せません。
呼び出し方は以下になります。

CSVReaderRunner.readCsvFunForOneSymbol("…");

newで生成したインスタンスのメソッドとして呼び出す(質問に記載された使い方)のであれば、
メソッドの定義にあるstaticを削除します。
これに伴い他のメソッドのstaticも削除することになるので合わせて変更してください。

public SortedMap<DateTime, FunData> readCsvFunForOneSymbol(String path, String symbol) throws IOException {
…
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/24 00:44

    回答ありがとうございます。

    すみません、書き方がわるかったです。
    Staticなので最初はHiroshi-Aokiさんのおっしゃるようにnewしないで呼び出しました。

    いろいろ試してみたんですが、メソッド呼び出しだけではなく、ありとあらゆる’.(ドット)’の右辺に入力候補が全く出てこないことに気が付きました。IntelliJだけでなく、Eclipseでも新しいプロジェクトを作っていろいろ試してみたのですが、メソッドというメソッド、プロパティというプロパティがエラーになってしまいます。ビルトインのメソッドやプロパティでも同じです。

    JDKが問題なのではないかと思っております。
    昨日Javaフォルダをプログラムの追加と削除から完全に消して、全てインストールしなおしたのですが、以前はC:\Program Files (x86)に入ってたのが、今は C:\Program Filesに入っています(インストールエラーが出たためです)。それと何か関係があるのでしょうか?

    ちなみにIntelliJのProject structureからJDKの設定はしています。

    キャンセル

  • 2017/03/24 10:13

    いろいろと試されたのですね。
    その状況はクラスパスの指定に問題があると発生します。
    いくつか思いついた確認点があります。

    まず「全てインストールしなおした」状況と状態について私の理解を。
    すべてインストールし直してからご質問の状況になったとうことかなと思いました。
    さらに、Java, IntelliJ, Eclipseと3つのソフトが登場していますが、今回インストールし直したのはJavaだけ。
    そして、再インストール後にIntelliJはJDKの設定はインストール後にあわせて変更している。
    という状況と推察します。
    この前提だと。

    ・そもそもJDKのインストールがハードディスクの空き容量不足などで失敗している
    ・32bit版のJDKを64bit版のソフトが入るパスに導入してしまっている
    ・JDKのインストールパスを変更したが、IntelliJ側のJDKのパス修正がうまくできていない

    下記を確認・試行してみてください。
    ・IntelliJのProject StructureからProjectのJDKのEditボタンを押下しJDKのPathとClasspathを確認。
    ・ディスクの空き容量が十分にあることを確認
    ・JDKのインストールパスをC:\JDKに指定してインストールし直す(空白を含むパスは避けるという定説)
    ・IntelliJのProjectのJDKのEditボタンを押下しJDKのPathを修正。IntelliJ再起動後にClasspathを確認。

    ※インストールでエラーが発生した場合にはエラーメッセージを教えてください。メッセージから何が問題だったかわかるかもしれません。

    補足
    C:\Program Files (x86)は32bit版のアプリケーションが導入されるパスです。JDKは32bit版のものを使用していたのだと思います。
    C:\Program Filesは64bit版のアプリケーションが導入されるパスで、JDKも64bit版のものを使うのが正しいです。このパスに32bit版が入っても正しく動作しません。
    今回のクラスパスの問題とは直接関係はないと思いますが、導入先が不適切なのでこの機会にチェックですね。

    キャンセル

  • 2017/03/27 03:02

    すみません、解答に気が付きませんでした。
    ご丁寧にお返事いただいてありがとうございます。勉強になります。

    そうです、インストールし直したのはJavaのみ、再インストール後にIntelliJのJDKの設定をそれに併せて変更しております。

    クラスメイトなどのパソコンで全く同じプロジェクトのメソッドなどを呼びだすときちんと呼び出されました。なのでやはりJDKが問題なのではないかと思っております。何人かの知人に見せた結果、パソコンをreformatするのが一番手っ取り早いと言われたのですが、セメスター終了まであと残すところ4週間なので躊躇しておりました。Reformatせずに問題が解決するのならそっちの方が全然いいので解答していただいたことを一つ一つ確認して報告いたします。

    補足:C:\Program Files (x86)とC:\Program Files違い知りませんでした。勉強になりました、ありがとうございます。

    キャンセル

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

  • Spring Boot

    724questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • Java EE

    410questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

  • MongoDB

    273questions

    MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

  • IntelliJ IDEA

    168questions

    IntelliJ IDEA(インテリジェイ アイディア)は、JetBrains社が開発した、 JavaやScalaなどで利用される統合開発環境です。