摆动菜单 Java 7 mac osx

Posted

技术标签:

【中文标题】摆动菜单 Java 7 mac osx【英文标题】:Swing menus Java 7 mac osx 【发布时间】:2012-08-24 05:14:09 【问题描述】:

我一直在运行在小程序上的 mac os x 上测试我的 Swing 应用程序。

当我在浏览器中运行这个小程序时,我注意到 JMenus/JMenuItems 上的鼠标悬停不能正常工作。

这是一个重现问题的小程序:

package com.macosx.tests;

import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;

import javax.swing.*;

public class Example extends JApplet 

    JMenuBar bar;
    JMenu file, edit;
    JMenuItem new1, save, close;

    private void doStart() 
        bar = new JMenuBar();

        file = new JMenu("File");
        edit = new JMenu("Edit");

        new1 = new JMenuItem("New");
        save = new JMenuItem("Save");
        close = new JMenuItem("Close");

        setJMenuBar(bar);
        bar.add(file);
        bar.add(edit);
        file.add(new1);
        file.add(save);
        file.add(close);
    

    @Override
    public void start() 
        try 
            SwingUtilities.invokeAndWait(new Runnable() 
                public void run() 
                    doStart();
                
            );
         catch (Exception e) 
            throw new RuntimeException(e);
        
    

使用此代码,生成一个 .jar 文件。在 Eclipse 中,您可以使用导出功能,并且只需确保将 Main-Class 定义为上述类。

一旦你运行了 jar,创建一个包含内容的 html 文件:

<html>
<head>
<title>Menu test Applet</title>
</head>
<body>
<applet id="appletID"   
  code="com.macosx.tests.Example" 
  archive="tests.jar">
</applet>
</div>
</body>
</html>  

在此之后,运行 html 文件并检查菜单:它们不应接收鼠标悬停事件。 难道我做错了什么?这是一个Java错误吗? 有没有 Mac 用户来测试这个问题?

我正在运行带有最新 Oracle JRE for mac (http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1637588.html) 的 Mac OSX 10.7.4。使用 Firefox 进行测试。

java.vendor     Oracle Corporation
java.version    1.7.0_06
os.name         Mac OS X
os.version      10.7.4

谢谢

【问题讨论】:

不要在没有充分考虑和充分理由的情况下混合 Swing 和 AWT 组件。始终如一地使用 Swing。有关详细信息,请参阅Mixing heavy and light components。 您能否发布您提交的错误报告的链接? @whiskeyspider: bugs.sun.com/bugdatabase/view_bug.do?bug_id=7194878 老实说,我认为他们永远不会解决这个问题。 Apple 也在尝试从他们的系统中删除 java,因此如果您想在 applet 中运行应用程序,您将遇到许多其他问题。 【参考方案1】:

代码在这里运行良好。我怀疑这是该 JRE 中的错误。

将代码改为:

    转储java.version & java.vendor 删除主要内容(这只会使事情变得混乱) - 然后.. 提交错误报告。

测试机详情

从这个properties applet获得的详细信息:

Name            Value
java.vendor     Oracle Corporation
java.version    1.7.0_05
os.name         Windows 7
os.version      6.1

浏览器: FireFox 15.0

【讨论】:

出于好奇,您使用的是哪个 JRE?您是否在浏览器中运行了小程序?如果我将程序作为应用程序运行,则可以正常工作。只有在浏览器中运行小程序时才会出现问题。顺便说一句,如果您使用重量级弹出窗口,这也使用 jre6u33 发生,根据mail.openjdk.java.net/pipermail/swing-dev/2012-March/…,这是 Java 7 中的默认设置。 在我测试过的任何 JRE 版本的 Windows 或 Linux 中都不会出现此问题。这只发生在 Mac OS X 上。我针对这个问题提出了一个错误。谢谢 好。让我们了解进展/新闻。 我在使用 JComboBox 时遇到了同样的问题。当鼠标悬停在 Mac 小程序上的项目上时,该项目不会突出显示。在 Windows 上它工作得很好。您可以在 Windows 和 Mac 上运行此在线摇摆小程序演示 linkk 并查看不同之处。为了解决这个问题,我使用了实现鼠标悬停事件的代码。 感谢您的反馈。您应该将该评论转化为答案。

以上是关于摆动菜单 Java 7 mac osx的主要内容,如果未能解决你的问题,请参考以下文章

sh 在Mac OSX上下文菜单中清除多个Atom

非级联类型的菜单栏项目在 Mac OSX 的 Tkinter 上不起作用

就像在我的 Mac OSX Cocoa 应用程序中在 Microsoft Word 中一样创建字体菜单

Mac OSX Java 终端版本不正确

PyQt MenuBar Mac OSX 雪豹

如何在锁定屏幕上保持 osx 上的菜单栏应用程序“活动”?