DirectoryChooser Javafx buged? [英] DirectoryChooser Javafx buged?

查看:186
本文介绍了DirectoryChooser Javafx buged?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Directory Chooser设置带有所选路径的TextField。
如果我选择某个目录,如Desktop或任何其他文件夹,它会返回路径,但如果我从我的库中选择directorys,如我的Documents(C:\ Users \ Victor \ Document),则返回null。这是一个错误?
我正在使用下面的代码:

  DirectoryChooser chooser = new DirectoryChooser(); 

chooser.setTitle(Selecioneodiretório);

文件defaultDirectory = new文件(folderChooser);

chooser.setInitialDirectory(defaultDirectory);

File selectedDirectory = chooser.showDialog(null);

pathFolderTxtField.setText(selectedDirectory.getAbsolutePath());

folderChooser = selectedDirectory.getPath();


解决方案

这是一个错误。



它在JavaFX 2.2.6和Java 8中修复(都尚未发布):



(显示警告信息):

  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;

公共类DirectoryChooserTest扩展Application {
@Override public void start(final Stage stage){
final TextField pathField = new TextField(C:/ Users);
pathField.setPrefWidth(250);

按钮chooseButton = new按钮(选择);
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(Selecioneodiretó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 rror:8 0 0 7 0 0 5 7 inp F ile  - > 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 r r:8 0 0 7 0 0 5 7使用数据表来确定数据。

要获得错误,您需要从目录选择器对话框的左侧面板中选择一个库。


I'm using Directory Chooser for set a TextField with the selected path. If I choose some directory like Desktop, or any other folder it returns the path, BUT if I choose the directorys from my library like my Documents (C:\Users\Victor\Documents) it returns null. Is it a bug?? I'm using the code below:

        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();

解决方案

This is a bug.

It is fixed in JavaFX 2.2.6 and Java 8 (both not yet released):

RT-28571 Choose a Windows 7 Library in a DirectoryChooser results in a COM Error

The fix doesn't actually allow library selection. If the user tries to select a library, instead the JavaFX system pops up an alert and prevents the directory chooser from closing:

Sample code I ran on JavaFX 2.2.4 (which gave an error) and the early access Java 8b77 (which showed the alert message instead) was:

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); }
}

Error reported is:

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 . 

To get the error you need to choose a library from the left hand panel of the directory chooser dialog.

这篇关于DirectoryChooser Javafx buged?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆