Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BeautyEye外观和感觉空JMenuBar项目_Java_Linux_Swing_Java 8_Look And Feel - Fatal编程技术网

Java BeautyEye外观和感觉空JMenuBar项目

Java BeautyEye外观和感觉空JMenuBar项目,java,linux,swing,java-8,look-and-feel,Java,Linux,Swing,Java 8,Look And Feel,我正在Java桌面程序中使用look-and-feel,但最近发现JMenuBar显示empy JMenuItems,如下面的屏幕截图所示 正如您所看到的,菜单区域在那里,但颜色与Jframe contentPane相同,并且没有可见的菜单文本 测试此功能的示例程序(从下载BeautyEye库)为: 我是BeautyEye项目的作者 需要注意的几点: BeautyEye已经迁移到 GitHub:,您可以找到 那里的最新版本。但是我很抱歉,这里没有英语 导言 因为JDK版本更新太快,我只是 用j

我正在Java桌面程序中使用look-and-feel,但最近发现JMenuBar显示empy JMenuItems,如下面的屏幕截图所示

正如您所看到的,菜单区域在那里,但颜色与Jframe contentPane相同,并且没有可见的菜单文本

测试此功能的示例程序(从下载BeautyEye库)为:


我是BeautyEye项目的作者

需要注意的几点:

  • BeautyEye已经迁移到 GitHub:,您可以找到 那里的最新版本。但是我很抱歉,这里没有英语 导言
  • 因为JDK版本更新太快,我只是 用jdk8做一些测试(并且只针对Windows),所以我不能保证 在所有平台中暂时与jdk8完全兼容
  • 我认为这个问题是由Java透明API引起的,您可以获取最新的源代码来调试它:例如使用系统框架样式,但不使用透明框架边框等

  • 你可以通过163.com与我联系,我希望你能解决这个问题。

    我已经用jdk 1.8_u45调试过了,在Windows平台上是正常的。 我想这可能是linux平台java1.8_45的一个bug


    您的代码在这里正常工作。Win7、Java 7和beautyeye\u lnf\u v3.5\u all\u in\u one.zip的PLAF。Linux、Java 8和beautyeye\u lnf\u v3.5\u all\u in\u one.zip的PLAF不工作:(此问题是否也出现在演示应用程序中请注意,您的SSCE会替换背景线程上的外观,而不是EDT上的外观。在EDT上执行所有操作时,您是否存在相同的问题?@saimiris_-devel我会在Gnome 3环境中运行您的示例。如果我使用OpenJRE 8,我的问题与您在屏幕截图中显示的问题相同。如果我使用racle JRE 8菜单按预期显示。我获取了最新的源代码,并在GNU/Linux和Java 1.8下编译了我的示例,它似乎得到了修复!我在构建项目的dist jar时遇到问题,根据Oracle常见问题解答,它给出了编译错误,如“错误:包sun.swing.table不存在”“直接调用sun.*包的Java程序不保证在所有Java兼容平台上都能工作。”
    import java.awt.*;
    import javax.swing.*;
    import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
    
    public class JavaMenuBarExample implements Runnable
    {
      private JFrame frame;
      private JMenuBar menuBar;
      private JMenu fileMenu;
      private JMenuItem openMenuItem;
    
      public static void main(String[] args)
      { 
        try
            {
                BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
                org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
                UIManager.put("RootPane.setupButtonVisible", Boolean.FALSE);
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
        // the proper way to show a jframe (invokeLater)
        SwingUtilities.invokeLater(new JavaMenuBarExample());
      }
    
      @Override
      public void run()
      {
        frame = new JFrame("Java Menubar Example");
        menuBar = new JMenuBar();
        fileMenu = new JMenu("File");
        openMenuItem = new JMenuItem("Open");
        fileMenu.add(openMenuItem);
        // add menus to menubar
        menuBar.add(fileMenu);
        // put the menubar on the frame
        frame.setJMenuBar(menuBar);
    
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(400, 300));
        frame.pack();
        frame.setVisible(true);
      }
    }