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

LibGDX中使用proxy出现UnsupportedOperationException错误排查求助

问题:LibGDX开发中Screen代理类抛出UnsupportedOperationException

报错详情

Execution error (UnsupportedOperationException) at bucket_drops_screen_extension.main_menu.proxy$java.lang.Object$Screen$e6e56cf1/show (REPL:-1).
show

我的代码片段

(defn screen
  [] 
  (proxy [java.lang.Object Screen] []
    (render [delta]
      (.clear ScreenUtils Color/BLACK)
      (.apply (deref globals/viewport))
      (let [matrix (.. @globals/viewport getCamera combined)]
        (.setProjectionMatrix @globals/sprite-batch matrix))
      (.begin @globals/sprite-batch)
      (.draw @globals/font @globals/sprite-batch "test" 1 1)
      (.end @globals/sprite-batch))
    (resize [x y]
      (.update @globals/viewport x y true))))

代码问题分析

LibGDX的Screen是一个接口,在Clojure中用proxy实现接口时,必须覆盖所有抽象方法。Screen接口要求实现show()、hide()、pause()、resume()、dispose()等方法,你只实现了render和resize,未实现的方法默认会抛出UnsupportedOperationException——游戏调用show()方法时触发了这个默认逻辑,导致报错。

另外,proxy参数里不需要显式继承java.lang.Object,Clojure实现接口时会自动处理父类逻辑。

修复后的代码:

(defn screen
  [] 
  (proxy [Screen] []
    (render [delta]
      (.clear ScreenUtils Color/BLACK)
      (.apply (deref globals/viewport))
      (let [matrix (.. @globals/viewport getCamera combined)]
        (.setProjectionMatrix @globals/sprite-batch matrix))
      (.begin @globals/sprite-batch)
      (.draw @globals/font @globals/sprite-batch "test" 1 1)
      (.end @globals/sprite-batch))
    (resize [x y]
      (.update @globals/viewport x y true))
    (show [])
    (hide [])
    (pause [])
    (resume [])
    (dispose [])))

这类错误的定位方法

  • 聚焦报错方法名:报错直接指向show方法,说明该方法的实现存在问题。对于接口代理类的异常,优先检查是否覆盖了接口的所有抽象方法。
  • 核对接口文档:查LibGDX官方文档,确认Screen接口的所有必填方法,逐一对照代码补全。
  • REPL辅助检查:在Clojure REPL中导入Screen接口后,用(.getMethods Screen)打印所有方法,快速确认哪些方法未实现。
  • 牢记代理类默认行为:Clojure的proxy对未实现的接口方法,默认逻辑就是抛出UnsupportedOperationException,遇到这类异常直接关联接口方法完整性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:31:03