Не удается найти символ с помощью метода Guice createInjector - PullRequest
1 голос
/ 03 апреля 2019

Я получаю странную ошибку с моим проектом, я добавил Guice к своим зависимостям в POM.xml, все кажется нормальным, IDE предлагает все, даже когда я писал код для запуска Injector, он предлагал мне метод, который я хотел использовать, но позже он помечает его красным, говоря, что его нельзя найти, я никогда не испытывал ничего подобного. Может быть, я что-то забыл. Кто-нибудь может мне помочь?

Мой проект - настольное приложение JavaFX maven.

Это вывод ошибки

/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java -Dmaven.multiModuleProjectDirectory=/Users/ochamo/Documents/Proyectos/apde-alumnus/APDEAlumnus "-Dmaven.home=/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3" "-Dclassworlds.conf=/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/m2.conf" "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=52291:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/boot/plexus-classworlds-2.5.2.jar" org.codehaus.classworlds.Launcher -Didea.version2019.1 com.zenjava:javafx-maven-plugin:8.8.3:jar
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building APDE-Alumnus 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> javafx-maven-plugin:8.8.3:jar (default-cli) > [jfxjar]package @ APDE-Alumnus >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ APDE-Alumnus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 10 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ APDE-Alumnus ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 13 source files to /Users/ochamo/Documents/Proyectos/apde-alumnus/APDEAlumnus/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/ochamo/Documents/Proyectos/apde-alumnus/APDEAlumnus/src/main/java/edu/apde/alumnus/main/Main.java:[22,47] cannot find symbol
  symbol:   class createInjector
  location: class com.google.inject.Guice
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.584 s
[INFO] Finished at: 2019-04-03T12:10:32-06:00
[INFO] Final Memory: 21M/309M
[INFO] ------------------------------------------------------------------------

Вот зависимость Guice в pom.xml

<dependency>
   <groupId>com.google.inject</groupId>
   <artifactId>guice</artifactId>
   <version>4.2.1</version>
</dependency>

Код, который я использую для начальной загрузки моего основного класса в

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage primaryStage) throws Exception {

       try {
           final Injector injector = new Guice.createInjector(new MainModule()); // this is the source of the error It cannot find createInjector.

           FXMLLoader fxmlLoader = new FXMLLoader();
           fxmlLoader.setLocation(Main.class.getResource("/fxml/main/main-view.fxml"));
           System.out.printf("location: " + fxmlLoader.getLocation());
           GridPane root = fxmlLoader.load();
           Scene scene = new Scene(root);

           primaryStage.setScene(scene);
           primaryStage.setTitle("Login");
           primaryStage.show();
       } catch (IllegalStateException ex) {
           ex.printStackTrace();
       }
    }
}

1 Ответ

0 голосов
/ 03 апреля 2019

Метод createInjector - это метод статический (см. Javadocs ) ...

public static Injector createInjector(Module... modules) {
    return createInjector((Iterable)Arrays.asList(modules));
}    

При попыткечтобы вызвать его следующим образом ...

new Guice().createInjector(...)

... вы пытаетесь вызвать метод instance , и он не компилируется, так как нет экземпляраметод с именем createInjector в классе Guice.

Вместо этого вы должны вызывать его следующим образом:

Guice.createInjector(...)

Для ясности;вместо вызова new Guice() вы просто вызываете Guice.

Для фона:

  • Необходимо вызвать метод instance на экземпляре своего класса;чтобы вызвать метод экземпляра, вы должны создать экземпляр класса, в котором определен метод.Например: new Foo().doIt()
  • A static метод вызывается без создания экземпляра его класса;чтобы вызвать статический метод, вы просто ссылаетесь на него по имени класса.Например: Foo.doIt()
...