每当我关闭帧时,复制的数据都会丢失到剪贴板

时间:2014-02-07 16:19:59

标签: java swing scala

我编写了一个简单的scala swing应用程序,带有文本字段和按钮。每当用户点击按钮时,内容就会被复制到剪贴板。但是,一旦应用程序关闭,剪贴板内容就会丢失。 为什么?有办法解决这个问题吗?

这是我的源代码:

package com.loloof64.scalatest

import java.awt.Dimension
import java.awt.Toolkit
import java.awt.datatransfer.Clipboard
import java.awt.datatransfer.StringSelection
import java.awt.datatransfer.Transferable
import scala.swing.BoxPanel
import scala.swing.Button
import scala.swing.MainFrame
import scala.swing.SimpleSwingApplication
import scala.swing.TextField
import scala.swing.Orientation
import scala.swing.event.ButtonClicked

object ClipboardCopyTest extends SimpleSwingApplication {

  def writeToClipboard(str:String) {
      val clipboard:Clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
      val transferData:Transferable = new StringSelection(str)
      clipboard.setContents(transferData, null)
  }

  override def top = new MainFrame {
    val textfield = new TextField(60)
    val button = new Button("Copy to clipboard") 
    contents = new BoxPanel(Orientation.Vertical){
      contents += (textfield, button)
      listenTo(button)
      reactions += {
        case _:ButtonClicked => writeToClipboard(textfield.text)
      }
    }
    val prefSize = new Dimension(300,200)
    override def size = prefSize
  }

}

欢迎帮助

我在ubuntu 13.10 64位下 我有scala 2.10.3

1 个答案:

答案 0 :(得分:3)

我会看看这个answer.

简而言之,它是Ubuntu的一个已知问题。

来自subject的网站。

“问题发生是因为Xorg采取保守的复制方法。当用户执行选择或复制时,它仅复制对原始数据的引用。它不会从源程序中检索实际数据,直到用户请求粘贴。它以这种方式节省了大量不必要的数据传输,代价是无法从未在其他地方保存剪贴板的已关闭程序中检索数据。“