2016-04-07 3 views
0

私は現在、学生が登録できるコースのJListを表示するプロジェクトに取り組んでいます。リスト項目をクリックすると、変数がsetTextArea()メソッドに渡され、txtファイル名が取得されます。たとえば、Computer Scienceをクリックすると、courseName変数が渡され、URLに挿入されてtxtファイルが取得されます。getClass()。getResourceを使用してJTextAreaに.txtファイルを取得する

enter image description here

これは完全に正常に動作します。 JARファイルを使用する場合を除きます。私は、getClass()とgetResource()を使ってJARを使うときにリソースにアクセスする必要があることを知っています。しかし、私は働くことができないようです。ここにはオリジナルコードがあります。

public void valueChanged(ListSelectionEvent e) 
{ 
    int selectionNum = courseList.getSelectedIndex(); 
    String courseName; 

    //Switch statement to pass strings to method 
    switch(selectionNum) 
    { 
     case 0: courseName = "computer_science"; 
       setTextArea(courseName); 
       currentCourseClicked ="0"; 
       break; 

     case 1: courseName = "business"; 
       setTextArea(courseName); 
       currentCourseClicked ="1"; 
       break; 

     case 2: courseName = "business2"; 
       setTextArea(courseName); 
       currentCourseClicked ="2"; 
       break; 

     case 3: courseName = "engineering"; 
       setTextArea(courseName); 
       currentCourseClicked ="3"; 
       break; 

     case 4: courseName = "sport"; 
       setTextArea(courseName); 
       currentCourseClicked ="4"; 
       break; 

     case 5: courseName = "early"; 
       setTextArea(courseName); 
       currentCourseClicked ="5"; 
       break; 

     case 6: courseName = "social"; 
       setTextArea(courseName); 
       currentCourseClicked ="6"; 
       break;    
    } 

} //End of valuesChanges Method 



/** 
* This method is used to read the file, with the course name passed 
* from the valueChanged method. 
* @param courseName 
*/ 
@SuppressWarnings("resource") 
public void setTextArea(String courseName) 
{ 
    descriptionPanel.setVisible(true); 
    enrol.setVisible(true); 
    enrol.setFont(new Font("", Font.BOLD, 20)); 

    try 
    { 
     //This retrieves the information from a text file 
     FileReader file = new FileReader("./res/courseInfo/" +courseName + ".txt"); 
     Scanner fileReaderScan = new Scanner(file); 

     String storeAll = ""; 

     //while loop to read trough lines of the text file 
     while(fileReaderScan.hasNextLine()) 
     { 
      String temp = fileReaderScan.nextLine() + "\n"; 
      storeAll += temp; 
     } 
     descriptionTextArea.setText(storeAll); 
    } 
    catch (FileNotFoundException e1) 
    { 
     e1.printStackTrace(); 
    } 
} //end of setTextArea method 

次に、getClassとgetResourceを使用しようとしました。 URLでは機能しません。URLタイプをStringに変更するように求められます。私がこれを行うと、getClassとgetResourceは動作しません。

enter image description here

私は後でString urlString = url + "";を使用して文字列にURLを連結しようとしたが、これもうまくいきませんでした。

これについてどうやったらいいですか?

+0

あなたのリソースが正確ですか?あなたのjarファイルで?もしそうなら正確に? –

+0

URLがFileReaderで機能しないためです。 'url'をString型に変換するかどうかを尋ねます。しかし、私がそうすると、getClass()。getResourceは機能しません。 – Aaronward

+0

*「JARファイルを使用する場合を除いて」*は何を意味しますか? – aribeiro

答えて

2

FileReaderは、JARファイルに入っているときに動作しません.JARファイルではなく現在の作業ディレクトリでファイルを取得しようとします。

FileReader f = new FileReader(new File(ClassA.class.getResource("/res/courseInfo/" +courseName + ".txt").toURI())); 

私はこれがあなたの問題を解決すべきだと思う:

あなたはこのラインを使用する必要があります。


あなたは Scannerで作業しているので、私はあなたが完全にあなたのFileReaderをを削除し、代わりにあなたのスキャナオブジェクトを初期化する場合は、この行を使用することをお勧め:

Scanner fileReaderScan = new Scanner(getClass().getResourceAsStream("/res/courseInfo/" +courseName + ".txt")); 
+0

それはまだ食だけで動作します。 JTextFieldはまだ空です。 – Aaronward

+0

@Aaronward正しいディレクトリにテキストファイルがありますか? – Hackerdarshi

+1

@Aaronwardまた、コンソールからjarファイルを実行しようとすると、スタックトレースを見ることができます。 – Hackerdarshi

関連する問題