void (@NotNull WidgetState state) { if (!(state instanceof MyWidgetState) || !((MyWidgetState)state).conflict) { myIsNotified.set(false); return; } if (myIsNotified.get()) return; myIsNotified.set(true); Alarm alarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, this); alarm.addRequest(() -> { String message = new HtmlBuilder() .append(HtmlChunk.tag("b").addText(JsonBundle.message("schema.widget.conflict.popup.title"))) .append(HtmlChunk.br()).append(HtmlChunk.br()) .appendRaw(state.getToolTip()).toString(); JComponent label = HintUtil.createErrorLabel(message); BalloonBuilder builder = JBPopupFactory.getInstance().createBalloonBuilder(label); JComponent statusBarComponent = getComponent(); Balloon balloon = builder .setCalloutShift(statusBarComponent.getHeight() / 2) .setDisposable(this) .setFillColor(HintUtil.getErrorColor()) .setHideOnClickOutside(true) .createBalloon(); balloon.showInCenterOf(statusBarComponent); }, 500, ModalityState.nonModal()); }