我只是遇到了一个奇怪的行为,我甚至不能说它是否是JavaFX特定的问题,Eclipse问题甚至是首先开始修复的地方。
但首先要做的事情是:我正在编写一个JavaFX应用程序(Eclipse Kepler / Java 1.7),其中包含一些扩展的ListView。该程序需要大约1秒才能加载。
扩展的ListView看起来像这样:
public class NewList<T extends Obj> extends ListView<T>{
public NewList(){
// addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>(){
//
// @Override
// public void handle(KeyEvent arg0) {
// if(arg0.getText().equals(KeyCode.DELETE)){
// getItems().remove(getSelectionModel().getSelectedItem());
// }
// }
// });
}
}
在同一构造函数中也有一些MouseEvents(如拖放),它们按预期工作。 现在我想将一个EventHandler添加到我的扩展ListView中(参见上面代码中的命令)。 该代码现在大约需要8秒才能开始,也就是正常情况下的8倍。令我惊讶的是,程序在我的primaryStage的.show()方法中有90%的加载时间(只有一个)。加载时间过后,GUI速度极慢,CPU使用率达到100%。 也许Handler是错误地实现的,并且在整个过程中都在做一些奇怪的事情。
我在互联网上找不到任何解决方案甚至类似的问题....但现在真正的问题才刚刚开始: 当我删除处理程序并再次运行程序时,它将保持缓慢!因此该程序处于与以前相同的状态 - 只是仍然破碎!这让我很疯狂,因为我看不出这种行为的任何合理解释。
我已经尝试过:
编辑:在构建过程/更新二进制文件时看起来出现了问题。我删除了99%的代码(&gt; 5k LOC),然后就可以了。我将原始项目复制/粘贴回我的工作区,并且孔代码工作顺利 - 即使打开了Handler。所以我无法想象一种产生简约设置的方法。顺便说一句:我不允许发布完整的项目文件夹(大学的东西......)
edit2:我'使用带有java64的win7 64bit。其他javaFX程序正在工作(即使是grafic密集的oracle示例)。我没有使用任何特定于JavaFX的存储库设置或构建器
答案 0 :(得分:0)
好的,几分钟前我遇到了同样的问题,我想我这次找到了源头。
我在调试模式下始终运行我的代码。为了检查EventHandlers条件,我在Eclipse中创建了一些断点。我还在下面的代码行中创建了一个断点(参见上面的代码)
public void handle(KeyEvent arg0) {
鼠标悬停在断点上会提供以下信息:
此行有多个标记
方法断点:NewList [Entry] - 句柄(KeyEvent)
实现:javafx.event.EventHandler .handle
我不知道这里发生了什么,但我认为它是这样的: 我正在覆盖JavaFX EventHandler方法,调试器必须检查每个JavaFX交互/ EventHandler调用的断点。因此,Eclipse无法在适当的时间处理大量的检查,而且所有检查似乎都很慢。 要明确这一点:断点本身不必在任何时候被调用,只要它的存在就足以引起问题。
在非调试模式下停用断点或运行应用程序将解决所有问题。我认为避免任何类型的Listener / EventHandler中的所有入口断点应该是一个好主意:)