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

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

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

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

MongoDB

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

IntelliJ IDEA

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

Spring Boot

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

Q&A

解決済

1回答

1811閲覧

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

mercredi

総合スコア26

Java EE

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

MongoDB

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

IntelliJ IDEA

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

Spring Boot

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

0グッド

0クリップ

投稿2017/03/23 01:18

編集2017/03/23 01:25

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

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

上図のように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; } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

java

1CSVReaderRunner.readCsvFunForOneSymbol("…");

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

java

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

投稿2017/03/23 13:28

Hiroshi-Aoki

総合スコア804

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

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

mercredi

2017/03/23 15:44

回答ありがとうございます。 すみません、書き方がわるかったです。 Staticなので最初はHiroshi-Aokiさんのおっしゃるようにnewしないで呼び出しました。 いろいろ試してみたんですが、メソッド呼び出しだけではなく、ありとあらゆる’.(ドット)’の右辺に入力候補が全く出てこないことに気が付きました。IntelliJだけでなく、Eclipseでも新しいプロジェクトを作っていろいろ試してみたのですが、メソッドというメソッド、プロパティというプロパティがエラーになってしまいます。ビルトインのメソッドやプロパティでも同じです。 JDKが問題なのではないかと思っております。 昨日Javaフォルダをプログラムの追加と削除から完全に消して、全てインストールしなおしたのですが、以前はC:\Program Files (x86)に入ってたのが、今は C:\Program Filesに入っています(インストールエラーが出たためです)。それと何か関係があるのでしょうか? ちなみにIntelliJのProject structureからJDKの設定はしています。
Hiroshi-Aoki

2017/03/24 01: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版が入っても正しく動作しません。 今回のクラスパスの問題とは直接関係はないと思いますが、導入先が不適切なのでこの機会にチェックですね。
mercredi

2017/03/26 18:02

すみません、解答に気が付きませんでした。 ご丁寧にお返事いただいてありがとうございます。勉強になります。 そうです、インストールし直したのはJavaのみ、再インストール後にIntelliJのJDKの設定をそれに併せて変更しております。 クラスメイトなどのパソコンで全く同じプロジェクトのメソッドなどを呼びだすときちんと呼び出されました。なのでやはりJDKが問題なのではないかと思っております。何人かの知人に見せた結果、パソコンをreformatするのが一番手っ取り早いと言われたのですが、セメスター終了まであと残すところ4週間なので躊躇しておりました。Reformatせずに問題が解決するのならそっちの方が全然いいので解答していただいたことを一つ一つ確認して報告いたします。 補足:C:\Program Files (x86)とC:\Program Files違い知りませんでした。勉強になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問