Wir versuchen, ein Projekt mit Guice Refactoring. Die Idee ist, alle Sprache Schnittstelle zu einem Concreate-Objekt wie Französisch oder Polnisch zu binden.Guice Injektion Null Zeiger
Wir haben ein Modul für die Bindung:
public class StandardModule extends AbstractModule {
@Override
protected void configure() {
bind(Language.class).to(Polish.class);
}
}
Und ein classe (AboutDialog.java), die dieses injizierten Objekt verwenden:
@Inject Language language;
public AboutDialog(JFrame parent) {
super(parent, "", true);
this.language=language;
this.setTitle(language.getLanguageInUse().getString("AboutDialog.title"));
this.parent = parent;
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
pack();
}
Und wir haben als Ergebnis:
java.lang.NullPointerException at net.sf.jmoney.gui.AboutDialog.<init>(AboutDialog.java:67)
Zeile 67 ist:
this.setTitle(language.getLanguageInUse().getString("AboutDialog.title"));
Unsere Schnittstelle ist:
public interface Language {
public ResourceBundle getLanguageInUse();
}
Und die polnische Klasse:
public class Polish implements Language {
private ResourceBundle languageInUse;
public Polish() {
languageInUse = ResourceBundle.getBundle(Constants.LANGUAGE_PL);
}
public ResourceBundle getLanguageInUse() {
return languageInUse;
}
}
Wir sind verloren ...
Sie sollten Ihren Code ein wenig ändern, um zu sehen, wo geworfen wird der NPE 'Code Resource Bündel = language.getLanguageInUse();.. String label = bundle.getString ("AboutDialog.title"); ' –
Das Nullobjekt ist Sprache. Wir denken, dass die Injektion nicht funktioniert. – user1810567
Wie erstellen Sie den AboutDialog? Ich glaube nicht, dass Sie den Dialog mit Guice erstellen, weil Guice einen leeren Konstruktor benötigt oder binden Sie Jframe irgendwo ein? –