分析期间无法访问菜单

时间:2014-11-26 09:46:03

标签: java javafx profiling jvisualvm

我有一个JavaFX应用程序,我想在JVisualVM分析器下运行。但是,在分析器下运行时,我无法从菜单栏访问菜单项。

到目前为止,我的应用程序只是一个使用SceneBuilder构建的简单场景。它有一个AnchorPane和一个默认的菜单栏。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <MenuBar layoutX="-41.0" layoutY="-12.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </children>
</AnchorPane>

代码也很简单,没什么特别的:

@Override
public void start(Stage primaryStage) throws IOException
{
    String path = "Window.fxml";
    URL url = getClass().getClassLoader().getResource(path);
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(url);

    Parent root = loader.load();        
    Scene scene = new Scene(root, 600, 400);
    primaryStage.setScene(scene);
    primaryStage.show();
}

我执行以下操作:

  • 从Eclipse运行应用程序,直到窗口显示,
  • 点击&#34;文件&#34;看是否&#34;关闭&#34;变得可见
  • 启动JVisualVM,
  • 双击我的应用程序,
  • 转到&#34; Profiler&#34;标签
  • 点击&#34; CPU&#34;并等到它已经注入了分析说明
  • 点击&#34;文件&#34;再次,但&#34;关闭&#34;没有出现

在Eclipse中,我看到控制台窗口中出现以下错误消息:

Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: com/sun/javafx/tk/Toolkit$$Lambda$166
    at com.sun.javafx.tk.Toolkit$$Lambda$166/563347763.get$Lambda(Unknown Source)
    at com.sun.javafx.tk.Toolkit.runPulse(Unknown Source)
    at com.sun.javafx.tk.Toolkit.firePulse(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$363(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$41/353428524.run(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

如何分析从我的JavaFX应用程序菜单中调用的方法?

我还尝试将应用程序打包到可执行的JAR文件中,这样就不会涉及Eclipse。

1 个答案:

答案 0 :(得分:0)

如果探查器使用BCI /检测,则此问题可能相关:Transforming lambdas in Java 8

如果探查器有任何选项可以停止跟踪lambdas的性能,请尝试使用它。

了解您的问题是否仍然存在于较新版本的Java中会很有趣。