我正在开发一个JavaFX项目,我的项目结构如下。
我想使用Google Refletions在*fxml
/src/main/java/resources/view/primary
下加载/src/main/java/windchimes.ui/WindChimesApplication.java
个文件。我尝试使用以下代码
Reflections reflections = new Reflections("windchimes.ui",new ResourcesScanner());
Set<String> scenePaths = reflections.getResources(Pattern.compile(".*fxml"));
当我运行上面的代码片段时,java抛出以下异常
引起:java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在 com.sun.javafx.application.LauncherImpl.lambda $ launchApplication1 $ 161(LauncherImpl.java:819) 在 com.sun.javafx.application.PlatformImpl.lambda $ runAndWait $ 175(PlatformImpl.java:326) 在 com.sun.javafx.application.PlatformImpl.lambda为$ null $ 173(PlatformImpl.java:295) 在java.security.AccessController.doPrivileged(Native Method)at com.sun.javafx.application.PlatformImpl.lambda $ runLater $ 174(PlatformImpl.java:294) 在 com.sun.glass.ui.InvokeLaterDispatcher $ Future.run(InvokeLaterDispatcher.java:95) 引起:java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.maximumSize(I)LCOM /谷歌/普通/高速缓存/ CacheBuilder; 在 org.reflections.adapters.JavassistAdapter。(JavassistAdapter.java:28) 在 org.reflections.util.ConfigurationBuilder。(ConfigurationBuilder.java:41) 在org.reflections.Reflections $ 1。(Reflections.java:134)at org.reflections.Reflections。(Reflections.java:134)at org.reflections.Reflections。(Reflections.java:117)at windchimes.ui.WindChimesApplication。(WindChimesApplication.java:27) ......还有10个
我确信我没有根据我的用例创建Reflection对象。有人可以帮助我吗?
答案 0 :(得分:1)
您需要指定包前缀,我相信您正在寻找.fxml文件。这段代码应该有效。你能尝试一下吗?
Reflections reflections = new Reflections(new ConfigurationBuilder().setScanners(new ResourcesScanner())
.setUrls(ClasspathHelper.forPackage("windchimes.ui")));
Set<String> res = reflections.getResources(Pattern.compile(".*\\.fxml"));