即使在重置存储库之后,也会出现慢速(JavaFX)代码

时间:2014-01-25 03:26:29

标签: java eclipse listview javafx-2

我只是遇到了一个奇怪的行为,我甚至不能说它是否是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是错误地实现的,并且在整个过程中都在做一些奇怪的事情。

我在互联网上找不到任何解决方案甚至类似的问题....但现在真正的问题才刚刚开始: 当我删除处理程序并再次运行程序时,它将保持缓慢!因此该程序处于与以前相同的状态 - 只是仍然破碎!这让我很疯狂,因为我看不出这种行为的任何合理解释。

我已经尝试过:

  • 删除存储库中的bin文件夹并再次构建代码(+ reboot)
  • 通过git重置存储库
  • 抛出一半代码并重新开始。在任何时候它再次起作用,遗憾的是我无法再现这种效果。然后我再次实现了Handler,问题从一开始就开始......

编辑:在构建过程/更新二进制文件时看起来出现了问题。我删除了99%的代码(&gt; 5k LOC),然后就可以了。我将原始项目复制/粘贴回我的工作区,并且孔代码工作顺利 - 即使打开了Handler。所以我无法想象一种产生简约设置的方法。顺便说一句:我不允许发布完整的项目文件夹(大学的东西......)

edit2:我'使用带有java64的win7 64bit。其他javaFX程序正在工作(即使是grafic密集的oracle示例)。我没有使用任何特定于JavaFX的存储库设置或构建器

1 个答案:

答案 0 :(得分:0)

好的,几分钟前我遇到了同样的问题,我想我这次找到了源头。

我在调试模式下始终运行我的代码。为了检查EventHandlers条件,我在Eclipse中创建了一些断点。我还在下面的代码行中创建了一个断点(参见上面的代码)

public void handle(KeyEvent arg0) {

鼠标悬停在断点上会提供以下信息:

  

此行有多个标记

     

方法断点:NewList [Entry] - 句柄(KeyEvent)

     

实现:javafx.event.EventHandler .handle

我不知道这里发生了什么,但我认为它是这样的: 我正在覆盖JavaFX EventHandler方法,调试器必须检查每个JavaFX交互/ EventHandler调用的断点。因此,Eclipse无法在适当的时间处理大量的检查,而且所有检查似乎都很慢。 要明确这一点:断点本身不必在任何时候被调用,只要它的存在就足以引起问题。

在非调试模式下停用断点或运行应用程序将解决所有问题。我认为避免任何类型的Listener / EventHandler中的所有入口断点应该是一个好主意:)