我正在尝试将表行从Google Chrome拖放到Linux上的Java Swing应用程序中,但它行不通。我还尝试调试Java应用程序,但我没有得到任何C ...

问题描述 投票:0回答:1

从镀铬到gedit的拖拉效果很好。

从镀铬到Windows上的Java应用程序,如所预期的。

$DISPLAY
  • Shows:0.11,意味着使用X11。
  • $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>

我已经检查了:

jcef拖放处理:如果是JCEF问题,则从Chrome拖动应该可以工作,但行不通。

Java秋千方法:如果是Java问题,该方法应在调试中触发,但不会从Chrome接收事件。

Waylandvs. X11:我怀疑这可能与Linux上Chrome和Java应用程序之间的剪贴板处理有关。但是在Red Hat 8上安装XCLIP剪贴板后,问题仍然存在。

    问题:
  • 为什么拖放仅因镀铬而失败,但要与Firefox一起工作?
  • 有一种方法可以修改Java启动参数以允许所有应用程序的拖放?
  • 这可能与Mime类型处理或Java安全设置有关?

是与Ubuntu中的Chromium(JDK-8299842)
    drag-Drop无关的问题,并且是否有任何已知的分辨率?
  • 我不确定这是否是您问题的原因,但是…
  • dataflavor.stringflavor并不对应于文本/普通哑剧类型

  • TransferHandler.canImport()

  • 接收文本的最佳方法是使用SelectBestTextflavor

    GetReaderFortext

mimeType = "application/x-java-serialized-object"
java linux google-chrome drag-and-drop chromium
1个回答
0
投票
GetTextplainunicodeflavor()

,它确实与文本/平原相对应,但是它将数据返回为RAW InputStream,这意味着您必须获得本机charset(通常不是本地charset(通常不是)与charset.defaultcharset()!)相同,然后将InputStream转换为读取器,以获取正确的文本。 使用上述方法更容易。

© www.soinside.com 2019 - 2025. All rights reserved.