Character encoding Javafx字符编码不匹配

Character encoding Javafx字符编码不匹配,character-encoding,javafx,Character Encoding,Javafx,我正在mac osx 10.6.8上使用netbeans 7.3.1 问题: 当我删除以下文件时: 照片.jpg picture.jpg blank space.txt 我明白了 当我期待的时候 dropped 照片.jpg dropped picture.jpg dropped blank space.txt 问题:我如何要求JavaFX使用与我的操作系统相同的字符编码 备选问题:我如何要求JavaFX和MacOSX使用UTF-8作为默认字符编码 回答:见Petr给出的答案,它没有回答问题

我正在mac osx 10.6.8上使用netbeans 7.3.1

问题: 当我删除以下文件时:

照片.jpg
picture.jpg
blank space.txt
我明白了

当我期待的时候

dropped 照片.jpg
dropped picture.jpg
dropped blank space.txt
问题:我如何要求JavaFX使用与我的操作系统相同的字符编码

备选问题:我如何要求JavaFX和MacOSX使用UTF-8作为默认字符编码

回答:见Petr给出的答案,它没有回答问题,但它指向了真正的问题

代码:

导入java.io.File;
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.input.DragEvent;
导入javafx.scene.input.Dragboard;
导入javafx.scene.input.TransferMode;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类SimpleDropFile扩展应用程序{
私有VBox根=新的VBox(10);
@凌驾
公共无效开始(阶段初始阶段){
场景=新场景(根,300,250);
场景:setOnDragOver(onDragOver);
场景。Setondragdroped(Ondragdroped);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
EventHandler onDragOver=新的EventHandler(){
@凌驾
公共无效句柄(DrageEvent事件){
Dragboard db=event.getDragboard();
if(db.hasFiles()){
event.acceptTransferModes(TransferMode.COPY);
}否则{
event.consume();
}
}
};
EventHandler ondragdroped=新的EventHandler(){
@凌驾
公共无效句柄(DrageEvent事件){
Dragboard db=event.getDragboard();
布尔成功=假;
if(db.hasFiles()){
成功=真实;
对于(文件:db.getFiles()){
if(file.exists()){
root.getChildren().add(新标签(“droped”+file.getName());
}否则{
root.getChildren().add(新标签(“未找到”+文件.getName());
}
}
}
事件。setDropCompleted(成功);
event.consume();
}
};
公共静态void main(字符串[]args){
发射(args);
}
}
更新: 我更新了我的问题,包括:

  • 恰当的问题
  • 最小样本代码。现在您可以复制、粘贴、编译和测试。也许它可以在windows上正常工作
  • 答案

  • 我假设您正在谈论JavaFX中的这个bug:


    它是在JavaFX8中修复的。您可以在早期的Access版本中从这里进行测试:

    您所说的“做错”到底是什么意思?请解释什么不起作用。不支持OS x 10.6上的JavaFX 2.x配置(仅支持OS x 10.7.3+)。我想知道你是如何在你的机器上安装并运行JavaFX的。@jewelsea:当Netbeans安装程序问我它运行的是什么版本的OS X时,我只是对它撒了个谎。(也就是说,我修改了文件/System/Library/CoreServices/SystemVersion.plist)@uoo:我更新了我的问题,现在它有一个问题。如果JavaFX8修复了它会很好,但会怎么说?我不想注册它是指向JavaFX bug跟踪器的链接,这个特定bug说:当拖动的文件路径包含空格或特殊字符时,Dragboard(DragEvent.getDragboard())包含无效文件。如果你对JavaFX感兴趣的话,在那里建立一个帐户可能会很有用。这正是我遇到的问题。jdk7有解决办法吗?或者我必须等待jdk8吗?不幸的是,您必须等待jdk8。我认为没有解决办法
    dropped 照片.jpg
    dropped picture.jpg
    dropped blank space.txt
    
    import java.io.File;
    import javafx.application.Application;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.input.DragEvent;
    import javafx.scene.input.Dragboard;
    import javafx.scene.input.TransferMode;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    
    public class SimpleDropFile extends Application {
        private VBox root = new VBox(10);
    
        @Override
        public void start(Stage primaryStage) {        
            Scene scene = new Scene(root, 300, 250);
            scene.setOnDragOver(onDragOver);
            scene.setOnDragDropped(onDragDropped);
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        EventHandler onDragOver = new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent event) {
                Dragboard db = event.getDragboard();
                if (db.hasFiles()) {
                    event.acceptTransferModes(TransferMode.COPY);
                } else {
                    event.consume();
                }
            }
        };
    
        EventHandler onDragDropped = new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent event) {
                Dragboard db = event.getDragboard();
                boolean success = false;
                if (db.hasFiles()) {
                    success = true;
                    for (File file:db.getFiles()) {
                        if(file.exists()){
                            root.getChildren().add(new Label("dropped " + file.getName()));
                        } else {
                            root.getChildren().add(new Label("not found " + file.getName()));                        
                        }
                    }
                }
                event.setDropCompleted(success);
                event.consume();
            }
        };
    
        public static void main(String[] args) {
            launch(args);
        }
    }