从镀铬到gedit的拖拉效果很好。
从镀铬到Windows上的Java应用程序,如所预期的。
$DISPLAY
$XDG_SESSION_TYPE
i还将铬安装为JCEF集成。i尝试通过运行来强制X11模式:
export XDG_SESSION_TYPE=x11
带有Drop处理程序的Java应用程序:
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.*;
public class DragDropSwingApp {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Drag & Drop Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
JTextArea textArea = new JTextArea("Drop text here...");
textArea.setFont(new Font("Arial", Font.PLAIN, 16));
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setDropTarget(new DropTarget() {
@Override
public void drop(DropTargetDropEvent dtde) {
try {
dtde.acceptDrop(DnDConstants.ACTION_COPY);
Object data = dtde.getTransferable().getTransferData(DataFlavor.stringFlavor);
textArea.setText(data.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
});
frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
frame.setVisible(true);
});
}
}
html页面用于拖动文本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Drag & Drop Demo</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }
.draggable { padding: 10px; background-color: lightblue; width: 300px; margin: auto; cursor: grab; }
</style>
</head>
<body>
<h2>Drag this text into the Java application</h2>
<div class="draggable" draggable="true" id="dragText">Hello from the Web!</div>
<script>
document.getElementById("dragText").addEventListener("dragstart", function(event) {
event.dataTransfer.setData("text/plain", event.target.innerText);
});
</script>
</body>
</html>
Java秋千方法:如果是Java问题,该方法应在调试中触发,但不会从Chrome接收事件。
Waylandvs. X11:我怀疑这可能与Linux上Chrome和Java应用程序之间的剪贴板处理有关。但是在Red Hat 8上安装XCLIP剪贴板后,问题仍然存在。
:
TransferHandler.canImport()
接收文本的最佳方法是使用SelectBestTextflavor
和GetReaderFortext::
mimeType = "application/x-java-serialized-object"
,它确实与文本/平原相对应,但是它将数据返回为RAW InputStream,这意味着您必须获得本机charset(通常不是本地charset(通常不是)与charset.defaultcharset()!)相同,然后将InputStream转换为读取器,以获取正确的文本。 使用上述方法更容易。