2

選択したパスで TextField を設定するために Directory Chooser を使用しています。デスクトップなどのディレクトリやその他のフォルダーを選択すると、パスが返されますが、ドキュメント (C:\Users\Victor\Documents) などのライブラリからディレクトリを選択すると、null が返されます。バグですか??以下のコードを使用しています。

        DirectoryChooser chooser = new DirectoryChooser();

        chooser.setTitle("Selecione o diretório");

        File defaultDirectory = new File(folderChooser);

        chooser.setInitialDirectory(defaultDirectory);

        File selectedDirectory = chooser.showDialog(null);

        pathFolderTxtField.setText(selectedDirectory.getAbsolutePath());

        folderChooser = selectedDirectory.getPath();
4

1 に答える 1

4

これはバグです。

JavaFX 2.2.6 および Java 8 で修正されています (どちらもまだリリースされていません)。

RT-28571 DirectoryChooser で Windows 7 ライブラリを選択すると、COM エラーが発生する

この修正では、実際にはライブラリの選択が許可されていません。ユーザーがライブラリを選択しようとすると、代わりに JavaFX システムが警告を表示し、ディレクトリ チューザーが閉じないようにします。

ライブラリ選択アラート

JavaFX 2.2.4 (エラーが発生) で実行したサンプル コードと、早期アクセスJava 8b77 (代わりに警告メッセージが表示された) は次のとおりです。

import java.io.File;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;

public class DirectoryChooserTest extends Application {
  @Override public void start(final Stage stage) {    
    final TextField pathField = new TextField("C:/Users");
    pathField.setPrefWidth(250);

    Button chooseButton = new Button("Choose");
    chooseButton.setOnAction(new EventHandler<ActionEvent>() {
      @Override public void handle(ActionEvent t) {
        chooseDirectory(stage, pathField);
      }
    });

    VBox layout = new VBox(10);
    layout.getChildren().addAll(pathField, chooseButton);
    layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;");

    stage.setScene(new Scene(layout));
    stage.show();
  }

  private void chooseDirectory(Stage stage, TextField pathField) {
    DirectoryChooser chooser = new DirectoryChooser();
    chooser.setTitle("Selecione o diretório");
    chooser.setInitialDirectory(new File(pathField.getText()));
    File selectedDirectory = chooser.showDialog(stage);
    if (selectedDirectory != null) {
      pathField.setText(selectedDirectory.getAbsolutePath());
    }  
  }

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

報告されたエラーは次のとおりです。

E r r o r : 8 0 0 7 0 0 5 7   i n   p F i l e - > G e t D i s p l a y N a m e ( S I G D N _ F I L E S Y S P A T H ,   & p a t h ) 
 C O M   E r r o r : 8 0 0 7 0 0 5 7   T h e   p a r a m e t e r   i s   i n c o r r e c t . 

エラーを取得するには、ディレクトリ選択ダイアログの左側のパネルからライブラリを選択する必要があります。

于 2013-02-22T19:13:00.947 に答える