2016-06-13 25 views
0

Ich habe mit dem Problem konfrontiert während java.awt.FileDialog mit dem nächsten Codeschnipsel aufgerufen. OS X Spinner ständig Spinnen und nichts ändern (Finder lässt sich nicht öffnen)OS X El Capitan 10.11.3 Java 8 FileDialog öffnet nicht

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) throws Exception{ 
    primaryStage.setTitle("CSV Parser"); 
    Button button = new Button(); 
    button.setText("Import Translations"); 
    button.setOnAction(event -> { 
     String openFile = openFile(); 
     System.out.println("Open file " + openFile); 
    }); 

    VBox vbox = new VBox(); 
    vbox.setPadding(new Insets(10)); 
    vbox.setSpacing(8); 
    vbox.getChildren().add(button); 
    primaryStage.setScene(new Scene(vbox)); 
    primaryStage.show(); 
} 

public static String openFile() { 

    JFrame parentFrame = getJFrame("JFrame"); 
    String osName = System.getProperty("os.name"); 

    if (osName.toLowerCase().contains("mac")) { 
     FileDialog fileDialog = new FileDialog(parentFrame); 

     FilenameFilter csvFilter = (dir, name) -> name.endsWith(".csv"); 
     fileDialog.setFilenameFilter(csvFilter); 
     fileDialog.setFile("*.csv"); 
     fileDialog.setMode(FileDialog.LOAD); 
     String dirHome = System.getProperty("user.home"); 
     fileDialog.setDirectory(dirHome); 
     fileDialog.setVisible(true); 

     boolean isShowing = fileDialog.isShowing(); 

     if (isShowing) { 
      File fileToOpen = new File(fileDialog.getFile()); 
      String path = fileToOpen.getAbsolutePath(); 
      parentFrame.dispatchEvent(new WindowEvent(parentFrame, WindowEvent.WINDOW_CLOSING)); 
      return path; 
     } else { 
      parentFrame.dispatchEvent(new WindowEvent(parentFrame, WindowEvent.WINDOW_CLOSING)); 
      return null; 
     } 

    } 

    return null; 
} 

private static JFrame getJFrame(String name) { 
    JFrame parentFrame = new JFrame(name); 

    parentFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return parentFrame; 
} 


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

Ich brauche nur die Fähigkeit zu haben, eine Datei mit entsprechenden Erweiterung wählen (kein Ordner), das Aussehen der Dialog nicht über ein Bi Sinn, aber ich möchte es ohne externen Bibliotheken implementieren. Ich wäre für jede Hilfe dankbar.

+0

* "und Spinner drehen sich" * Was für Spinner? Warum nicht 'JFileChooser' anstelle von' FileDialog' verwenden? Um eine bessere Hilfe zu erhalten, veröffentlichen Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

+0

@AndrewThompson Es funktioniert nicht mit JFileChooser nicht mit FileDialog. Viele Leute, die in SO über Probleme mit JFileChooser berichtet haben, haben mich dazu entschieden, zu FileDialog zu wechseln. – Ray

Antwort

0

Ihr Dialog ist mit einem neuen Rahmen verknüpft (der nicht sichtbar ist) ... Sie sollten entweder das Argument null des Dialogkonstruktors oder den Verweis des aktuellen Rahmens verwenden, mit dem der Dialog logisch verknüpft werden soll.

+0

Ich habe bereits mehrere Lösungen ausprobiert, es funktioniert nicht mit null nicht mit übergeordnetem Rahmen. Ich habe die Methode zur Erstellung des Eltern-Frames zur Frage hinzugefügt. Ich lese Post, um die Einstellungen von lookAndFeel zu ändern, um Plattform zu überqueren, aber es hilft nicht – Ray

+0

Dann poste ein MCVE. –

+0

Erstellen Sie keinen JFrame, der unsichtbar ist, und fügen Sie ihm einen Dialog hinzu, das ist nicht sinnvoll. –