对于GTK3,Javafx似乎调用了不再有效的GTK2函数。有什么办法可以解决这个问题?
要进行复制,可以使用股票debian(stretch)Mate destop与来自反向端口的股票Openjdk 11以及来自Maven的openjfx 12-ea8一起使用。 其他设置也显示出相同的效果-但我猜这种设置很容易复制。
public void test() {
AnchorPane anchorpane = new AnchorPane();
anchorpane.setOnDragDetected(event -> {
//test don'z care about mode
final Dragboard db = anchorpane.startDragAndDrop(TransferMode.COPY_OR_MOVE);
final ClipboardContent cc = new ClipboardContent();
cc.putString("somecontent");
SnapshotParameters snapshotParameters = new SnapshotParameters();
snapshotParameters.setViewport(new Rectangle2D(0, 0, 50,50));
db.setDragView(anchorpane.snapshot(snapshotParameters, null));
db.setContent(cc);
event.consume();
});
Stage test =new Stage();
test.setScene(new Scene(anchorpane));
test.show();
}
如果我使用-Djdk.gtk.verbose = true参数运行它,则会得到:
checking GTK version 3
trying GTK library libgtk-3.so.0
using GTK library version 3 set libgtk-3.so.0
Glass GTK library to load is glassgtk3
loaded gdk_x11_display_set_window_scale
当我这样做时,会出现此消息,并且没有显示dragview:
(java:2946):GLib-GObject-WARNING **:/build/glib2.0-B1uXK /glib2.0-2.50.3/./gobject/gsignal.c:2523:信号'暴露事件'对于类型'GtkWindow'的实例'0x7f63001f2a40'无效
现在,如果我使用参数-Djdk.gtk.version = 2 -Djdk.gtk.verbose = true运行它
checking GTK version 2
trying GTK library libgtk-x11-2.0.so.0
using GTK library version 2 set libgtk-x11-2.0.so.0
Glass GTK library to load is glassgtk2
现在,反对gtk2的一切都能正常工作:显示了Dragview,没有错误。
似乎它可以正确检测到gtk3(不错!),但是仍然对gtk3库使用gtk2调用,但失败了。
是否有某种变通办法,例如以某种方式重新创建dragview或将Popup设置为dragview或其他方式,以使其在用户桌面上工作而对他们没有特殊要求?