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

JavaFX控制器出现Unexpected Token错误的原因及解决方法

问题原因

你把for循环直接写在了类的成员定义区域,这违反了Java语法规则——类的直接成员只能是变量、方法、构造器、初始化块或内部类,不能直接放置执行性语句(比如流程控制类的代码)。这就是编译器报"Unexpected Token"的原因,虽然IDE可能没及时标红,但语法上是不合法的。

两种解决方法

方法1:使用实例初始化块

把for循环包裹在一对大括号里,作为类的实例初始化块,它会在控制器对象创建时自动执行:

/* Drink Classes */
{
    for(int i=0; i < drinksMenu.length; i++){
        // 假设Drinks类有对应参数的构造器,根据你的Drinks类实际情况调整参数
        drinksMenu[i] = new Drinks(names[i], calories[i], sizes[i], fat[i], sugar[i], price[i]);
    }
}

方法2:使用FXML控制器初始化方法(推荐)

JavaFX控制器通常用@FXML注解的initialize方法来完成初始化逻辑,这个方法会在FXML加载完成后自动调用:

package com.example.moonbucksgui4;

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class GUIController {
    @FXML
    private Label drinkText;
    @FXML
    private Label mugText;
    @FXML
    private Label gcText;

    private Drinks[] drinksMenu = new Drinks[3];
    private String[] names = {"Cappuccino", "Latte", "Hot Chocolate"};

    /* Drink Info */
    private int[] calories = {60,130,320};
    private String[] sizes = {"Tall","Grande","Venti"};
    private double[] fat = {0.1, 0.3, 3.0};
    private int[] sugar = {8,18,55};
    private double[] price = {5.99, 10.99, 15.35};

    @FXML
    public void initialize() {
        // 在这里初始化Drinks数组
        for(int i=0; i < drinksMenu.length; i++){
            drinksMenu[i] = new Drinks(names[i], calories[i], sizes[i], fat[i], sugar[i], price[i]);
        }
    }

    @FXML
    protected void drinkButtonClick(){
        drinkText.setText("These are Drinks");
        mugText.setText("");
        gcText.setText("");
    }
    @FXML
    protected void mugButtonClick(){
        mugText.setText("These are mugs");
        drinkText.setText("");
        gcText.setText("");
    }
    @FXML
    protected void gcButtonClick(){
        gcText.setText("These are Gift Cards");
        drinkText.setText("");
        mugText.setText("");
    }
}
补充说明
  • 确保你的Drinks类存在对应的构造器,能接收你传入的参数(名称、热量、尺寸、脂肪含量、糖含量、价格),如果构造器参数不同,需要对应调整循环内的代码。
  • 初始化方法initialize不需要手动调用,JavaFX会在FXML文件加载并完成控件注入后自动执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:56