我试图在scalax的scala上使用javafx2。
我编写了一个简单的应用程序,并添加了一个菜单和一个菜单项。当我单击菜单并悬停在菜单项上时,有时不突出显示菜单,因此无法单击它。
为了检查我的代码是否做错了什么,我在Windows机器上运行了完全相同的代码,它可以正常工作。
我不明白为什么会这样。我猜想它通常与unity或gnome或linux有关。
还有其他人遇到过同样的问题吗?有什么办法可以解决或克服它?
谢谢我前进
代码示例:只有菜单具有奇怪的行为
package com.msp.ippokratis.ui
import scalafx.Includes._
import scalafx.collections.ObservableBuffer
import scalafx.collections.ObservableBuffer.observableBuffer2ObservableList
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.layout.{BorderPane,FlowPane,Priority}
import scalafx.scene.control.{MenuBar,MenuItem,Menu,Button,ComboBox}
import scalafx.event.ActionEvent
object Exampl extends JFXApp {
stage = new PrimaryStage {
scene = new Scene {
content = new BorderPane {
prefHeight = 400
prefWidth = 400
top = new MenuBar {
menus = Seq(
new Menu {
text = "File"
items = Seq(
new MenuItem {
text = "Println"
onAction = (evt: ActionEvent) => {
println("Clicked Menu Item Println")
}
})
})
}
center = new FlowPane {
hgrow = Priority.ALWAYS
content = Seq(
new Button {
text = "Sample Button"
onAction = (evt: ActionEvent) => {
println("Button Clicked")
}
},
new ComboBox {
val seq = List("Apple", "Orange", "Mango", "Banana").toSeq
items = ObservableBuffer(seq.asInstanceOf[Seq[Nothing]])
onAction = (evt: ActionEvent) => {
println("Combobox")
}
})
}
}
}
}
}
编辑1:如果我单击菜单并使用键盘导航,然后按Enter,它也可以在Linux上运行。
最佳答案
回顾过去,我遇到了两个问题,这些问题影响了Linux上基于Java的用户界面:
共享对象错误
SWT应用程序(例如Eclipse本身)显示出奇怪的鼠标交互。我认为只有从Ubuntu系统信息库在系统范围内安装SWT共享库时,情况才如此。为了合理地确定不是这种情况,请尝试运行主目录中的所有内容(JRE,JavaFX),并根据需要调整路径。如果您特别偏执,请删除所有JRE软件包以及所有依赖于它们的内容-尤其是在软件包名称中包含“jni”的情况下。
更有可能:禁用合成
尝试登录到没有进行合成的 session 。例如,尝试安装“openbox”,然后注销,然后在提示您登录时选择新的openbox session 。如果这对您有用,那么我可以寻找一种方法来使Java与复合窗口管理器(例如Unity)更好地协作。
更新:也许您已经退回到Java2D管道上了
如果您的应用程序无法在Linux上使用3D硬件加速,它将转而使用基于Java2D的软件3D渲染。 Java2D被设计为使用称为DGA的X11扩展,主要供应商(例如NVIDIA)不再支持该扩展。结果是大量的CPU烧焦,呆滞且无响应的UI。尝试将sun.java2d.pmoffscreen设置为false,以防止其干扰。
如果您使用的是Java 7,请尝试设置-Dsun.java2d.xrender=true
。
这不是什么
根据您的描述,这似乎与Scala或ScalaFX无关。我希望在JavaFX或JRE本身的本机渲染位中会出现任何渲染和/或可移植性问题。