You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复JavaFX解析CSS时出现的错位'expected RBRACE'错误?

JavaFX CSS变量使用报错修复方案

报错信息

Mar 26, 2023 11:16:27 PM javafx.css.CssParser parse
WARNING: CSS Error parsing jar:file:///D:/Projects/jfxtest3/build/libs/jfxtest3-1.0-SNAPSHOT.jar!/com/example/jfxtest3/main.css: Expected RBRACE at [4,4]

问题代码

:root
{
    --rosewatercol: #f5e0dc;
    --flamingocol: #f2cdcd; <-- according to the error, there should be a closed bracket at pos 4 in this line
    --pinkcol: #f5c2e7;
    --mauvecol: #cba6f7;
    --redcol: #f38ba8;
    --marooncol: #eba0ac;
    --peachcol: #fab387;
    --yellowcol: #f9e2af;
    --greencol: #a6e3a1;
    --tealcol: #94e2d5;
    --skycol: #89dceb;
    --sapphirecol: #74c7ec;
    --bluecol: #89b4fa;
    --lavendercol: #b4befe;
    --accentcol: --tealcol;
    --textcol: #cdd6f4;
    --subtext1col: #bac2de;
    --subtext0col: #a6adc8;
    --overlay2col: #9399b2;
    --overlay1col: #7f849c;
    --overlay0col: #6c7086;
    --surface2col: #585b70;
    --surface1col: #45475a;
    --surface0col: #313244;
    --basecol: #1e1e2e;
    --mantlecol: #181825;
    --crustcol: #11111b;
}

.root
{
    -fx-background-color: linear-gradient(from 0% 0% to 100% 100%, #181825, #1e1e2e);
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
}

.root *
{
    -fx-font-size: 18;
    -fx-text-fill: --textcol;
    -fx-fill: --textcol;
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
    -fx-background-radius: 12;
}

.button
{
    -fx-background-color: --surface0col;
    -fx-font-size: 18;
    -fx-text-fill: --textcol;
    -fx-fill: --textcol;
}

.button:hover
{
    -fx-background-color: --surface1col;
}

.vbox
{
    -fx-background-color: --surface0col;
}

.hbox
{
    -fx-background-color: --surface0col;
}

.accordion
{
    -fx-background-color: --surface0col;
}

.titled-pane > .title
{
    -fx-background-color: --surface0col;
    -fx-background-insets: 0;
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
}

.titled-pane > .title > *.text
{
    -fx-fill: #fff;
}

.titled-pane > .content
{
    -fx-background-color: --surface0col;
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
}

错误原因及修复方法

1. 非法注释导致解析混乱

代码中--flamingocol: #f2cdcd; <-- according to the error...这一行的注释格式完全错误,JavaFX CSS仅支持/* 注释内容 */格式的注释,这种HTML转义的行内内容会被解析器判定为无效代码,进而引发位置匹配混乱的报错。
修复:直接删除该行的注释内容,或改为合法的CSS注释:

--flamingocol: #f2cdcd; /* 原注释内容 */

2. 变量引用语法错误

JavaFX CSS中引用自定义变量必须使用var(--变量名)的语法,直接书写--变量名会被解析为无效的属性值,导致CSS解析失败。
修复:所有使用变量的位置都要包裹在var()中,示例:

  • 错误写法:-fx-text-fill: --textcol;
  • 正确写法:-fx-text-fill: var(--textcol);

3. 变量赋值其他变量的语法错误

当一个变量的值依赖另一个变量时,同样需要用var()包裹目标变量,否则会被解析为普通字符串而非变量引用。
修复:将--accentcol: --tealcol;改为:

--accentcol: var(--tealcol);

修复后的完整代码

:root
{
    --rosewatercol: #f5e0dc;
    --flamingocol: #f2cdcd;
    --pinkcol: #f5c2e7;
    --mauvecol: #cba6f7;
    --redcol: #f38ba8;
    --marooncol: #eba0ac;
    --peachcol: #fab387;
    --yellowcol: #f9e2af;
    --greencol: #a6e3a1;
    --tealcol: #94e2d5;
    --skycol: #89dceb;
    --sapphirecol: #74c7ec;
    --bluecol: #89b4fa;
    --lavendercol: #b4befe;
    --accentcol: var(--tealcol);
    --textcol: #cdd6f4;
    --subtext1col: #bac2de;
    --subtext0col: #a6adc8;
    --overlay2col: #9399b2;
    --overlay1col: #7f849c;
    --overlay0col: #6c7086;
    --surface2col: #585b70;
    --surface1col: #45475a;
    --surface0col: #313244;
    --basecol: #1e1e2e;
    --mantlecol: #181825;
    --crustcol: #11111b;
}

.root
{
    -fx-background-color: linear-gradient(from 0% 0% to 100% 100%, #181825, #1e1e2e);
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
}

.root *
{
    -fx-font-size: 18;
    -fx-text-fill: var(--textcol);
    -fx-fill: var(--textcol);
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
    -fx-background-radius: 12;
}

.button
{
    -fx-background-color: var(--surface0col);
    -fx-font-size: 18;
    -fx-text-fill: var(--textcol);
    -fx-fill: var(--textcol);
}

.button:hover
{
    -fx-background-color: var(--surface1col);
}

.vbox
{
    -fx-background-color: var(--surface0col);
}

.hbox
{
    -fx-background-color: var(--surface0col);
}

.accordion
{
    -fx-background-color: var(--surface0col);
}

.titled-pane > .title
{
    -fx-background-color: var(--surface0col);
    -fx-background-insets: 0;
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
}

.titled-pane > .title > *.text
{
    -fx-fill: #fff;
}

.titled-pane > .content
{
    -fx-background-color: var(--surface0col);
    -fx-border-style: none;
    -fx-border-width: 0;
    -fx-border-insets: 0;
}

内容的提问来源于stack exchange,提问作者Luh0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:46:58