当前位置: 首页 > 面试题库 >

Google Guice桌面应用程序-如何使其正常工作?

陆啸
2023-03-14
问题内容

我已经在Web应用程序中使用Guice了,没有问题,我想在桌面应用程序中使用它。我当然缺少一件事-
一种告诉我的应用程序如何绑定所有内容并知道什么是什么的方法。在Web应用程序中,我在Application类中对此进行了声明,如何在桌面应用程序中进行声明

这是我正在使用的相关代码:

public class GuiceModule extends AbstractModule
{
   @Override
   protected void configure()
   {
   // Enable per-request-thread PersistenceManager injection.
   install(new PersistenceManagerFilter.GuiceModule());
   // Business object bindings go here.
   bind(ProjectQueries.class).to(JdoProjectQueries.class);
   bind(new TypeLiteral<Repository<Project>>() { }).to(JdoProjectRepository.class);
 }

我的主班:

@Inject
public Repository<Project> projectRepo;

public void createNewProject() {
   ...
   projectRepo.persist(newProject);
}

我当然在上projectRepo.persist(newProject);

那么,我还需要做些什么才能使其正常工作?

编辑:

好的,现在该部分工作了,谢谢:)似乎我需要做更多的事情才能使持久性以这种方式工作。

我现在在这里得到NPE:

public void persist(T entity) 
{ 
pmProvider.get().makePersistent(entity); 
}

get()在此处返回null

看起来像install(new PersistenceManagerFilter.GuiceModule());
是不足够的。我需要做什么?我的存储库类始于:

public abstract class JdoRepository<T> implements Repository<T> { 
  private final Class<T> clazz; 
  private final Provider<PersistenceManager> pmProvider; 
  protected JdoRepository(Class<T> clazz, Provider<PersistenceManager> pmProvider)    {       this.clazz = clazz; this.pmProvider = pmProvider; 
}

在我的PMF,我有:

public static class GuiceModule extends AbstractModule {

  @Override protected void configure() { 
    bind(PersistenceManager.class).toProvider(new Provider<PersistenceManager>() {
      public PersistenceManager get() { 
         return PersistenceManagerFilter.pm.get(); 
         } 
      }); 
    } 
   }

问题答案:

Bootstrap用main方法创建类。

将当前的静态主要方法代码移至非静态代码。例如Application#run

Bootstrap类中创建主要方法:

public static void main(String[] args) {
    Injector injector = Guice.createInjector(new GuiceModule())
    Application app = injector.getInstance(Application.class);
    app.run();
}

运行Bootstrap类。



 类似资料:
  • 在学习这本书的过程中,你已经掌握了很多关于 Git 的命令。虽然这些是在学习过程中不可缺少的,但是版本控制的核心并不是让你学习所有的命令和参数。 当你掌握一些基本的概念,再加上一个带有用户图形界面的应用程序的帮助,就可以让你的日常工作变得更加简单。一个最大的好处就是它会为你提供了一个可视化的用户操作界面。 在桌面应用程序中,很多任务使用起来会更加容易和更方便。并且你也不需要记住那几十个繁琐的 Gi

  • 我想迁移到JavaFX11。我已经学习了OpenJFX的“JavaFX11入门”(https://openjfx.io/openjfx-docs/),使用OpenJDK 11.0.1和Gluon的JavaFX SDK 11.0.1(在Netbeans 10VC2上),并且已经能够使示例应用程序运行(在我看来,我应该能够很容易地将JavaFX8代码移植到JavaFX11)。 然而,这正是我无法找到方

  • 问题内容: 首先,我对专业从事这项工作不感兴趣。我是一名Web开发人员,我的一个同事最近离开了Spotify,他说他将主要在JavaScript中使用SpotifyDesktop应用程序。他说,它使用“ Chrome框架”,并且内部的所有内容都像网络应用程序(HTML / JS / CSS)一样完成。 作为一个从未为Desktop构建任何东西的Web开发人员,这是个好消息。如果我可以使用我已经知道

  • 作者:陈希章 发表于 2017年3月22日 桌面应用程序,在我这篇文章的语境中,我是特指在Windows桌面上面直接运行的.NET应用程序,包括Console Application,WPF Application,Windows Forms Application, UWP Application,并且限于篇幅,我只会以Console Application作为演示,因为无论表现形式如何不同,它

  • 问题内容: 我想开始开发JavaFX桌面应用程序,该应用程序将与Google Maps API紧密配合(如果一切顺利)。我的上手时间比我想象的要困难得多,在这一点上,我只是在问一个人,请提供一个示例代码,这些代码可以简单地加载地图并在地图上固定一些位置。任何帮助将不胜感激。到目前为止,我能做的最好的事情就是在WebView中加载maps.google.com,这显然根本不涉及API,并且现在对我毫