Java 如何重写标准类或如何实际刷新ResourceBundle?

Java 如何重写标准类或如何实际刷新ResourceBundle?,java,Java,我正面临一个让我发疯的问题,我希望你能帮助我 场景 我正在开发一个Java应用程序,它使用一个外部库(我无法修改jar),该库使用ResourceBundle读取一个属性。ResourceBundle分配给库中一个类内的静态变量。我希望能够动态更改该属性,因此在多次尝试之后,我使用ListResourceBundle实现了该属性列表,因为这是在运行时更改值的最简单方法 应用程序有两个线程: -主线程:这是第一个通过外部库首次加载ResourceBundle。 -子线程:它还使用外部库和加载Res

我正面临一个让我发疯的问题,我希望你能帮助我

场景

我正在开发一个Java应用程序,它使用一个外部库(我无法修改jar),该库使用
ResourceBundle
读取一个属性。
ResourceBundle
分配给库中一个类内的静态变量。我希望能够动态更改该属性,因此在多次尝试之后,我使用
ListResourceBundle
实现了该属性列表,因为这是在运行时更改值的最简单方法

应用程序有两个线程: -主线程:这是第一个通过外部库首次加载
ResourceBundle
。 -子线程:它还使用外部库和加载
ResourceBundle
的类

问题

当我更改
ListResourceBundle
properties值并调用
ResourceBundle.clearCache()
时,它会工作,外部库接受新值

当我尝试从线程执行相同的操作时,问题出现了,我更改了值,
clearCache()
,但它使用了主线程的最后一个值,而不是通过子线程指定的值。事实上,如果我从Tread获取属性的值,它将返回新值,尽管外部类使用旧值

我尝试的

  • 我尝试使用
    clearCache
    指定类加载器,但是
    ListResourceBundle
    正在加载AppClassLoader,哪个类加载器是
    null
    ,因此我无法通过它强制
    clearCache
  • 我曾尝试在应用程序启动时使用
    ResourceBundleControl
    禁用缓存,但不起作用:
public long gettimeolive(字符串baseName,区域设置){
返回TTL\u DONT\u缓存;
}
备选方案

  • 我是否缺少子线程中的
    clearCache
    ?是否存在完全禁用
    ResourceBundle
    缓存的方法?我只使用一个属性
  • 在Java中,是否可以将标准类用法(
    Java.util.ResourceBundle
    )重定向到自定义类?我还没有发现这方面的任何东西,我认为这应该不难。这样,我就可以强制外部库从我自己的、不是缓存的、也不是基于
    ResourceBundle
    的类中读取属性
乞讨会上有一个“大家好”,但我不知道它在哪里。。。我正在尝试编辑它,但它没有改变…1)您所指的库是否公开可用?如果是,是哪一类?2)
ResourceBundle
存储在
final
中的字段(库中的字段)?2) 您当前的代码(在多线程环境中不起作用的代码)是什么样子的?