2016-04-01 8 views
1

私はその問題が正確に何かを理解しようとしてきましたが、私が何をしてもうまくいかないようです。 私はコロンで区切られた名前と共に数字と共にリストされたテキストファイルを持っています。 この例は次のとおりです。JavaFXファイルから読み込むと "InvocationTargetException"がスローされますか?

ベティ・ロス:52の

アンジースコッツ:29

マイケル・ローゼン:72

リストが非常に長いと10,000以上のラインを備えています。

public class PeopleIds { 
    public static int UNDEFINED_ID = -1; 
    private static HashMap<String, Integer> people; 

    public static void initialize() { 
     people = new HashMap<String, Integer>(); 
     System.out.println(new File("res/ids/people_ids.txt").exists()); 
     try { 
      Files.lines(Paths.get("res/ids/people_ids.txt")).forEach(s -> { 
       people.put(s.replaceAll(":.*", "").trim(), Integer.parseInt(s.replaceAll(".*:", ""))); 
      }); 
     } catch (IOException e) { 
      System.out.println("Unable to read specified file."); 
      e.printStackTrace(); 
     } 
    } 

    public static int getId(final String name) { 
     final Integer id = people.get(name); 
     return id != null ? id : UNDEFINED_ID; 
    } 
} 

は私がGUIControllerクラスからinitializeメソッドを呼び出します。私は、アプリケーションの起動中に例外があったことを私に言って、例外がスローされ、PeopleIds.initialize()で、このクラスから呼び出す

public class GUIController implements Initializable { 
    @FXML 
    private TableView<PersonData> personTable; 
    @FXML 
    private TableColumn<PersonData, String> name; 
    @FXML 
    private TableColumn<PersonData, Integer> limit; 
    @FXML 
    private TextField searchInput; 
    @FXML 
    private ImageView personIcon; 

    private Image undefinedIcon; 
    private PersonIcon icon; 
    private ObservableList<PersonData> data; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     PeopleIds.initialize(); 
     undefinedIcon = new Image(getClass().getResourceAsStream("/ids/no.png")); 
     name.setCellValueFactory(new PropertyValueFactory<PersonData, String>("name")); 
     limit.setCellValueFactory(new PropertyValueFactory<PersonData, Integer>("limit")); 
     data = PriceData.getData(); 
     personTable.setPeople(data); 
     searchInput.textProperty().addListener((ov, oldValue, newValue) -> { 
      final String input = searchInput.getText(); 
      if (input.length() == 0) return; 
      searchInput.setText(input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase()); 
      filterSearch(); 
     }); 
    } 
} 

方法。ここで

は、その全体が記録されたものである。

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: javafx.fxml.LoadException: 
/C:/Confidential/bin/base/PersonGUI.fxml 

    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.load(Unknown Source) 
    at base.PersonGUI.start(PersonGUI.java:13) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(Unknown Source) 
    ... 1 more 
Caused by: java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 
    at java.io.BufferedReader$1.hasNext(Unknown Source) 
    at java.util.Iterator.forEachRemaining(Unknown Source) 
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) 
    at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) 
    at base.PeopleIds.initialize(PeopleIds.java:17) 
    at base.GUIController.initialize(GUIController.java:36) 
    ... 18 more 
Caused by: java.nio.charset.MalformedInputException: Input length = 1 
    at java.nio.charset.CoderResult.throwException(Unknown Source) 
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source) 
    at sun.nio.cs.StreamDecoder.read(Unknown Source) 
    at java.io.InputStreamReader.read(Unknown Source) 
    at java.io.BufferedReader.fill(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    ... 24 more 
Exception running application base.PersonGUI 

私はここで何が起こっているかわからないんだけど?私はそれを調べて、人々はfxmlファイル(コンテンツをフォーマットするために使用され、GUIControllerとMainクラスと同じパッケージにリンクされているもの)を移動すると言いましたが、それは既にあります。

I

+0

デバッグしようとしましたか?例外は実際には 'PeopleIds.initialize();'から来るのでしょうか? –

答えて

1

ファイルがある間にExceptionがある場合は、次のようなエラーメッセージが表示されることがあります。ファイルを開くときではなく、Files.linesストリーム操作(Stream.forEachにはthrows句がない)のチェックされていない例外がスローされます。

これは、ここでは、簡単にスタックトレースで見ることができます

Files.lines(Paths.get("res/ids/people_ids.txt")).forEach(s -> { 
    people.put(s.replaceAll(":.*", "").trim(), Integer.parseInt(s.replaceAll(".*:", ""))); 
}); 

、起こる:

あなたドン(Files.readAllBytes vs Files.lines getting MalformedInputExceptionを参照してください、これが使用されて間違ったCharsetによって引き起こされる)

Caused by: java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 

catch句でこの種の例外をキャッチしないでください:

} catch (IOException e) { 

あなたも未チェックの例外をキャッチする

} catch (Exception e) { 

を使用する必要があります。

関連する問題