2016-05-09 7 views
1

現在のプロジェクトの一部は、.txtログファイルを読み込み、そのログファイルが通常のパスに存在しない場合、JavaFX FileChooser 、ユーザーがファイルを指すようにします。しかし、現在の状態では、ファイルチューザーウィンドウがポップアップし、.txtファイルの場所を指し示すと、プログラム全体がアイドル状態になります。私は、ファイルへのパスを必要とする別のクラスにおける方法でJavaFX FileChooserは、ウィンドウが閉じられた後、他のコードをすべて停止します。

public class GetDirectory extends Application { 

    @Override 
    public void start(final Stage primaryStage) { 
     FileChooser fileChooser = new FileChooser(); 
     FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt"); 
     fileChooser.getExtensionFilters().add(extFilter); 
     File file = fileChooser.showOpenDialog(primaryStage); 
     main.gamedata.LogReader logReader = new LogReader(); 
     logReader.setPathTemp(file.getAbsolutePath()); 
     primaryStage.close(); 
    } 
} 

:アプリケーションを拡張するクラスで

private List<String> getHearthstoneLogContent(String pathToFile) { 
     try { 
      File file = new File(pathToFile); 
      if (file.exists() && !file.isDirectory()) { 
       return Files.readAllLines(Paths.get(pathToFile)); 
      } else { 
       // The out_log.txt file does not exist, we should let the user choose the path. 
       Application.launch(GetDirectory.class); 
       System.out.println("sup"); 
       return Files.readAllLines(Paths.get(pathTemp)); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
     } 
     return null; 
    } 

しかし「SUP」はに印刷されることは決してありませんコンソール。

私は

を試してみましたが、私は、アプリケーションが閉じないので、それがかもしれないと思ったので、私が使用してみました:

primaryStage.close(); 
    PlatformImpl.tkExit(); 
    Platform.exit(); 

をしかし、それは生成するので、我々はそれを使用することはできませんIllegalStateException:ツールキットが終了しました。私は唯一のような小さなタスクのためにそれを必要とするので、私はしたいがJavaFXの内部のすべての私のコードをラップしていない

を行うにはしたくない何

あなたが問題になっているプロジェクトを詳しく見てみたい場合: http://github.com/nymann/DeckSniffer/

+1

(打ち上げを呼び出す方法を[への回答を参照してください)ONCよりe in java](http://stackoverflow.com/questions/24320014/how-to-call-launch-more-than-once-in-java)を参照してください。それはあなたの問題を解決するのに役立ちますか? – jewelsea

+0

あなたが私の問題を解決したものに興味があるなら、私の広範な質問に協力してくれてありがとう、あなたは私の追加された「答え」/説明を見ることができます:) – Akudo

答えて

1

簡単な説明

それはちょうどチューザポップアップウィンドウを持つために、あなたはまだする必要があることが判明しましたprimaryStage.show();およびprimaryStage.close();それが停止するのを止める。私はその後、私は、アプリケーションを拡張するクラスでやってしまった何だから、0

作業を例に、それは不透明だ設定することにより、

を簡単にポップアップしないprimaryStageを作るのハックの方法を作った:

public class test1 extends Application{ 
    public static String fileAsString; 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     FileChooser fileChooser = new FileChooser(); 
     File file = fileChooser.showOpenDialog(primaryStage); 
     fileAsString = file.getAbsolutePath(); 

     primaryStage.setOpacity(0); 
     primaryStage.show(); 
     primaryStage.close(); 
    } 
} 

、アプリケーションがから呼び出されるクラスに:

public class test2 { 

    public test2() { 
     testFromMethod(); 
    } 

    public static void main(String[] args) { 
     new test2(); 
    } 

    private void testFromMethod() { 
     System.out.println("Hello from testFromMethod()!"); 
     Application.launch(test1.class); 
     System.out.println("Goodbye from testFromMethod()!"); 
     System.out.println(test1.fileAsString); 
    } 
} 
関連する問題