Java:在封闭范围内定义的局部变量 mi 必须是最终的或有效最终的

2023-12-06

我收到错误,如主题所示,我恳请您如何修复它...... 错误出现在 menuItem-loop 中,我尝试将 textArea 前景色设置为从 menuItem: (colors[mi]) 中选取的颜色

    String[] colors = {
            "blue", 
            "yellow",
            "orange",
            "red", 
            "white", 
            "black", 
            "green", 
            };

JMenu mnForeground = new JMenu("Foreground");
            for (int mi=0; mi<colors.length; mi++){
                String pos = Character.toUpperCase(colors[mi].charAt(0)) + colors[mi].substring(1);
                JMenuItem Jmi =new JMenuItem(pos);
                Jmi.setIcon(new IconA(colors[mi]));

                Jmi.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JMenuItem item = (JMenuItem) e.getSource();
                        IconA icon = (IconA) item.getIcon();
                        Color kolorIkony = getColour(colors[mi]); // ERROR HERE: (colors[mi])
                        textArea.setForeground(kolorIkony);
                    }
                });

                mnForeground.add(Jmi);
            }

public Color getColour(String colour){
  try {
      kolor = Color.decode(colour);
  } catch (Exception e) {
      kolor = null; 
  }
  try {
        final Field f = Color.class.getField(colour);
        kolor = (Color) f.get(null);
      } catch (Exception ce) {
        kolor = Color.black;
      }
return kolor;
}

错误的意思是你不能使用局部变量mi在内部类中.


要在内部类中使用变量,您必须声明它final。只要mi是循环的计数器,final无法分配变量,您必须创建一个解决方法来获取mi值在一个final可以在内部类中访问的变量:

final Integer innerMi = new Integer(mi);

所以你的代码将是这样的:

for (int mi=0; mi<colors.length; mi++){

    String pos = Character.toUpperCase(colors[mi].charAt(0)) + colors[mi].substring(1);
    JMenuItem Jmi =new JMenuItem(pos);
    Jmi.setIcon(new IconA(colors[mi]));

    // workaround:
    final Integer innerMi = new Integer(mi);

    Jmi.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JMenuItem item = (JMenuItem) e.getSource();
                IconA icon = (IconA) item.getIcon();
                // HERE YOU USE THE FINAL innerMi variable and no errors!!!
                Color kolorIkony = getColour(colors[innerMi]); 
                textArea.setForeground(kolorIkony);
            }
        });

        mnForeground.add(Jmi);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:在封闭范围内定义的局部变量 mi 必须是最终的或有效最终的 的相关文章

随机推荐

  • 文本输入中字符串部分的不同文本颜色

    当文本输入的值仍在输入字段中时 如何对字符串的一部分进行样式设置 我知道可以使用元素中具有 contentedible 属性的元素来做到这一点 但 Google 在文本类型的输入中使用其即时建议来做到这一点 输入中出现的第一个完成 建议 虽
  • 检查用户是否安装了Chrome扩展程序

    我正在构建一个 Chrome 扩展程序 为了让整个事情按照我希望的方式工作 我需要一个外部 JavaScript 脚本来检测用户是否安装了我的扩展程序 例如 用户安装我的插件 然后访问带有我的脚本的网站 该网站检测到我的扩展已安装并相应地更
  • 用户输入的数字未相加

    我正在尝试编写一个程序 从用户那里读取一个整数 通过键盘 将其加 100 并显示结果 我所能做的就是让它们像 2 个字符串一样连接起来 而不是将数字加在一起 我不明白为什么它不会添加它们 import java io public clas
  • 如何使用QWebEngineUrlRequestInterceptor

    我需要拦截 Qt 应用程序中的 WebEngine qml 组件中发出的请求 我找到了有关 QWebEngineUrlRequestInterceptor 的文档 它似乎就是这样做的http doc qt io qt 5 qwebengin
  • 查找除已使用的锚点之外的另一个锚点的位置

    我创建了一个代码来显示我的问题 它看起来像这样 userNameID tkinter Label root text Name ID userNameID place x 640 y 320 anchor e userNameID tkin
  • 变更日志/重新分区主题的复制因子应该是多少

    我知道可以为 kafka 流配置复制因子这些内部主题 我们的应用程序用于复制因子为 3 的普通应用程序主题 但到目前为止我还没有为变更日志 重新分区主题配置复制因子 而我的假设是如果一个经纪人死亡 或由于某种原因领导者发生变化 kafka
  • 用于在 overpass-API 端点上运行请求的 Python 包装器

    Overpass API python 包装器是一个围绕 OpenStreetMap Overpass API 的瘦 Python 包装器https github com mvexel overpass api python wrapper
  • 如何在wireshark中仅导出可打印文本(或任何其他数据包属性)

    长话短说 我正在使用 Wireshark 将 SQL 从供应商工具捕获到 Oracle 数据库 它已经有 TNS 协议的解码器 这很棒 我可以通过以下方式访问 SQL 文本 Right Click gt Copy gt Bytes Prin
  • 在 Java servlet 上使用 Processing.org 渲染图像

    如何在 Java servlet 上渲染Processing org 图像 我的斯卡拉代码是 class Image extends PApplet override def setup size 200 200 background 0
  • 当光线从嵌套对象内部开始时如何处理折射

    我正在构建一个简单的光线追踪器用于教育目的 并希望为对象添加折射 使用斯内尔斯定律 我能够在交点处递归地创建新射线 光线追踪器当前仅支持球体 我使用的场景中有多个球体嵌套在彼此内部 具有不同的折射率 如果我从球体外部发出光线 一切看起来都很
  • MongoDB - 我的用户文档应该包含项目 ID 列表吗?

    我有以下收藏users and projects 每个项目都准确地连接到一个用户 我的问题是 每个用户都应该持有项目 ID 列表吗 如果我想检索特定用户的所有项目 哪个选项更有效且最佳实践 在用户 id 属性的项目集合上创建索引 不仅仅是查
  • 查找匹配的“)”时出现意外的 EOF 错误[重复]

    这个问题在这里已经有答案了 尝试运行 bash 脚本 虽然某些功能正常工作 但我收到以下消息 line 34 unexpected EOF while looking for matching 这是代码 我标记了有问题的行 在斜边方法中 b
  • 使用 coalesce() 避免嵌套聚合错误

    我目前有一个使用合并的查询在 SQL Server 中工作 但是在 Amazon Redshift 中不起作用 有没有一种方法可以更合适地编写它以在 Redshift 中使用 coalesce sum Score nullif sum Sc
  • 如何将函数与 pandas 数据框一起使用

    如何将函数与 pandas 数据框一起使用 例如 a b london uk newyork usa berlin germany df1 df a b def doSomething df1 return df1 doSomething
  • 返回给定短语的匹配列表

    我正在尝试创建一种方法 可以检查给定短语是否与短语列表中的至少一项匹配并返回它们 输入是短语 短语列表和同义词列表词典 重点是要使其具有普遍性 这是示例 phrase This is a little house dictSyns litt
  • 用于提取学院、大学和研究所名称的正则表达式?

    我的文件中有一堆这样的字符串 M S Arizona University Tucson Az 1957 B A American International College Springfield Mass 1978 B A Americ
  • 模块“torch”没有属性“has_mps”

    我刚刚观看了一个 YouTube 视频 教如何安装PyTorchnightly MacBook 通过 M1 芯片加速 然而 我遇到了一个非常奇怪的问题 我可以在 jupyter 笔记本中看到torch has mps True 但是在 vs
  • JAVA- JRE/JDK/JVM(平台独立性)

    Java 是一种独立于平台的语言 但是 JVM 是依赖于机器的 所以 我的问题是 java的哪些部分是平台无关的 JRE JDK 还是 JVM 请解释 JVM JRE JDK这些都是java语言的支柱 每个组件单独工作 JDK和JRE物理上
  • 如何整齐地查询对应的对象数组项?

    我有一组将用于某些过程的对象 var x new List
  • Java:在封闭范围内定义的局部变量 mi 必须是最终的或有效最终的

    我收到错误 如主题所示 我恳请您如何修复它 错误出现在 menuItem loop 中 我尝试将 textArea 前景色设置为从 menuItem colors mi 中选取的颜色 String colors blue yellow or