使用 MigLayout 将 JLabel 添加到 JPanel 时出现 Class 转换异常(java.lang.String 无法转换为 net.miginfocom.layout.CC)

Class cast exception (java.lang.String cannot be cast to net.miginfocom.layout.CC) while adding a JLabel to a JPanel using MigLayout

我有以下代码:

JPanel panel = new JPanel(new MigLayout());;
JLabel label = new JLabel("Sample Label")
panel.add(label, "gaptop 20, gapbottom 20,wrap");

当我浏览 MigLayout 文档时,上面的代码片段看起来有效 对我来说,但是 运行 它抛出 java.lang.ClassCastException 异常,下面的堆栈跟踪

java.lang.ClassCastException: java.lang.String cannot be cast to net.miginfocom.layout.CC
        at com.intellij.ui.layout.migLayout.patched.MigLayout.addLayoutComponent(MigLayout.kt:403)
        at java.awt.Container.addImpl(Container.java:1128)
        at java.awt.Container.add(Container.java:973)
        at com.xxx.size.plugin.MemoryMeasurementTool_Tool.loadToolResultPanel(xxxMeasurementTool_Tool.java:58)
        at com.xxx.size.plugin.MemoryAnalyzer.run(xxxAnalyzer.java:75)
        at jetbrains.mps.smodel.WorkbenchModelAccess$UndoContextSetup.run(WorkbenchModelAccess.java:378)
        at jetbrains.mps.smodel.ActionDispatcher.dispatch(ActionDispatcher.java:84)
        at jetbrains.mps.smodel.ActionDispatcher.lambda$wrap[=14=](ActionDispatcher.java:105)
        at jetbrains.mps.smodel.ActionDispatcher.dispatch(ActionDispatcher.java:84)
        at jetbrains.mps.smodel.ActionDispatcher.lambda$wrap[=14=](ActionDispatcher.java:105)
        at jetbrains.mps.smodel.LockRunnable.run(LockRunnable.java:60)
        at jetbrains.mps.smodel.TryRunPlatformWriteHelper.lambda$tryWrite(TryRunPlatformWriteHelper.java:122)
        at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1057)
        at jetbrains.mps.smodel.TryRunPlatformWriteHelper.runWrite(TryRunPlatformWriteHelper.java:103)
        at jetbrains.mps.smodel.TryRunPlatformWriteHelper.tryWrite(TryRunPlatformWriteHelper.java:120)
        at jetbrains.mps.smodel.WorkbenchModelAccess.lambda$tryWriteInCommand(WorkbenchModelAccess.java:226)
        at jetbrains.mps.util.ComputeRunnable.compute(ComputeRunnable.java:32)
        at jetbrains.mps.util.AbstractComputeRunnable.run(AbstractComputeRunnable.java:27)
        at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
        at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:178)
        at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:168)
        at jetbrains.mps.smodel.WorkbenchModelAccess.tryWriteInCommand(WorkbenchModelAccess.java:243)
        at jetbrains.mps.smodel.WorkbenchModelAccess.lambda$runCommandInEDT_(WorkbenchModelAccess.java:157)
        at jetbrains.mps.smodel.EDTExecutor.tryRun(EDTExecutor.java:60)
        at jetbrains.mps.smodel.EDTExecutorInternal.tryToRunTopTask(EDTExecutorInternal.java:231)
        at jetbrains.mps.smodel.EDTExecutorInternal.flushNTasks(EDTExecutorInternal.java:194)
        at jetbrains.mps.smodel.EDTExecutorInternal.doFlush(EDTExecutorInternal.java:168)
        at jetbrains.mps.smodel.EDTExecutorInternal.flushTasksQueue(EDTExecutorInternal.java:156)
        at jetbrains.mps.smodel.EDTExecutorInternal.lambda$guaranteeWriteSafetyViaHack(EDTExecutorInternal.java:147)
        at com.intellij.openapi.application.TransactionGuardImpl.run(TransactionGuardImpl.java:315)
        at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
        at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
        at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
        at java.awt.EventQueue.access0(EventQueue.java:98)
        at java.awt.EventQueue.run(EventQueue.java:715)
        at java.awt.EventQueue.run(EventQueue.java:709)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
        at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:719)
        at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:668)
        at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:363)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

看来你用错了import(你用的是Intellij Idea打补丁的MigLayout,用法可能和标准的不一样)。检查您的 MigLayout 是否导入为:

import net.miginfocom.swing.MigLayout;