3

我在 mac osx 10.6.8 上使用 netbeans 7.3.1

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

照片.jpg
picture.jpg
blank space.txt

我明白了

not found %E7%85%A7%89%87.jpg
dropped picture.jpg
not found blank%20space.txt

虽然我期待

dropped 照片.jpg
dropped picture.jpg
dropped blank space.txt

问题:我如何要求 JavaFX 使用与我的操作系统相同的字符编码?

替代问题:我如何要求 JavaFX 和 Mac OS X 使用 UTF-8 作为默认字符编码?

答案:请参阅 Petr 给出的答案,它没有回答问题,但它指出了真正的问题。

代码:

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

更新:我更新了我的问题以包括:

  1. 一个恰当的问题
  2. 最小示例代码。现在您可以复制、粘贴、编译和测试。也许它在 Windows 上可以正常工作
  3. 答案
4

1 回答 1

1

我假设您正在谈论 JavaFX 中的这个错误:https ://javafx-jira.kenai.com/browse/RT-23541

它已在 JavaFX 8 中修复。您可以从此处在 Early Access 版本中对其进行测试:http: //jdk8.java.net

于 2013-09-10T15:19:04.940 回答