java - getter 和 setter 的问题
问题描述
我在使用 getter 和 setter 时遇到问题,因此我将对象列表设置在一个类用户对象列表中,并在第二类中使用 getter,当我运行调试器时,尽管当我设置 setter 时,getter 返回 Null第一个包含一个对象的类列表。我做错了什么?
public class Aplication extends Controller {
private final Logger logger = Logger.getLogger(Main.class.getName());
@FXML
private ListView<String> contacts;
@FXML
private Label nameContact;
@FXML
private TextField myMessage;
@FXML
private TextArea Message;
@FXML
private Label limitText;
@FXML
private Label startowyLabel;
private List<Users> contactList;
private static Client client;
public static boolean online = false;
private final Stage win =Main.getWindow();
public void pustaLista() {
ObservableList<String> data = contacts.getItems();
if (data.isEmpty()) {
ObservableList<String> newData = FXCollections.observableArrayList("Kontakty są puste");
contacts.setItems(newData);
}
}
public static void close(){
client.sendMessage(new ChatMessage(ChatMessage.LOGOUT, ""));
}
public List<Users> getContactList() {
return contactList;
}
public void setContactList(List<Users> contactList) {
this.contactList = contactList;
}
public void kontakty() {
List<String> list;
List<String> list2 = new ArrayList<>();
Contacts contact = new Contacts(logintext);
DBI db = new DB();
try {
Connection connection = DriverManager.getConnection(Constants.JDBC_URL, Constants.JDBC_USERNAME, Constants.JDBC_PASSWORD);
list = db.readCon(connection, contact);
for (String s : list) {
Users user = new Users(s);
list2.add(db.findUser(connection, user));
}
connection.close();
} catch (SQLException e) {
logger.log(Level.SEVERE, "Couldn't connect to database", e);
}
if (list2.isEmpty()) {
pustaLista();
} else {
List<Users> users1 = new ArrayList<>();
for(String s: list2){
String[] res = s.split(" ");
Users users = new Users();
users.setNickname(logintext);
users.setFistName(res[0]);
users.setLastName(res[1]);
users1.add(users);
System.out.println(users.getLastName());
setContactList(users1);
System.out.println(users1.toString());
}
ObservableList<String> observableList = FXCollections.observableArrayList(list2);
contacts.setItems(observableList);
}
}
public void wyszukaj() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(this.getClass().getResource("search.fxml"));
Pane pane = loader.load();
Scene scene = new Scene(pane);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle("Wyszukiwanie");
stage.getIcons().clear();
stage.getIcons().add(new Image(this.getClass().getResource("search.png").toString()));
stage.show();
}
public void update() {
int dl = myMessage.getText().length();
limitText.setText(dl + "/1000");
}
void append(String mess){
if(Message.getText() != null) {
Message.setText(Message.getText() + mess);
} else {
Message.setText(mess);
}
}
public String autor() {
DBI db = new DB();
String res = "";
Users users = new Users(Controller.logintext);
try {
Connection connection = DriverManager.getConnection(Constants.JDBC_URL, Constants.JDBC_USERNAME, Constants.JDBC_PASSWORD);
res = db.findUser(connection, users);
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return res;
}
public void createGroup() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(this.getClass().getResource("groups.fxml"));
Pane pane = loader.load();
Scene scene = new Scene(pane);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle("Wybranie osób do grupy");
stage.getIcons().clear();
stage.getIcons().add(new Image(this.getClass().getResource("group.png").toString()));
stage.show();
}
@FXML
void initialize() {
kontakty();
client = new Client("localhost", 1500, autor(), this);
win.setOnCloseRequest(e->{
e.consume();
Main.closeProgram();
});
if(!client.start())
return;
myMessage.setOnKeyPressed(e-> {
if(e.getCode().equals(KeyCode.ENTER)){
client.sendMessage(new ChatMessage(ChatMessage.MESSAGE, myMessage.getText()));
myMessage.setText("");
}
});
myMessage.setOnKeyReleased(e -> {
if(e.getCode() != KeyCode.ENTER)
update();
});
contacts.setOnMouseClicked(mouseEvent -> {
nameContact.setVisible(true);
myMessage.setVisible(true);
Message.setVisible(true);
limitText.setVisible(true);
online = true;
startowyLabel.setVisible(false);
nameContact.setText(contacts.getSelectionModel().getSelectedItem());
limitText.setText("0/1000");
});
}
}
一级
public class Groups extends Aplication{
private final Logger logger = Logger.getLogger(Main.class.getName());
public List<Users> getlC() {
return lC;
}
public void setlC(List<Users> lC) {
this.lC = lC;
}
@FXML
private ListView<String> lv;
private List<Users> lC;
public void choise(){
List<String> list = new ArrayList<>();
for (Users users : getlC()) {
list.add(users.getFistName() + " " + users.getLastName() + " " + users.getNickname());
}
System.out.println(lC.toString());
System.out.println(list.toString());
ObservableList<String> observableList = FXCollections.observableArrayList(list);
lv.setItems(observableList);
}
@FXML
void initialize(){
List<Users> lU = getContactList();
setlC(lU);
choise();
}
}
二班
for(String s: list2){
String[] res = s.split(" ");
Users users = new Users();
users.setNickname(logintext);
users.setFistName(res[0]);
users.setLastName(res[1]);
users1.add(users);
System.out.println(users.getLastName());
setContactList(users1);
System.out.println(users1.toString());
}
通常在这里返回数据
List<Users> lU = getContactList();
返回空指针
解决方案
首先 - 我喜欢你的一些代码是英文的,有些是波兰语的。如果您曾与国际团队合作,这是一个非常糟糕的习惯,会让您大吃一惊。更不用说,如果他们不理解方法或变量名称,那么 SO 或其他地方的人会更难帮助您。
第二 - 为什么这两行:
setContactList(users1);
System.out.println(users1.toString());
在循环内?在循环完成后执行它们会更有意义。
最后 - 你的问题的根源。这种方法:
void initialize(){
List<Users> lU = getContactList();
setlC(lU);
choise();
}
抛出NullPointerException
,因为字段contactList
实际上是空的。kontakty()
该字段由 class中的方法初始化,该方法由同一类的方法Application
调用。initialize()
但是,这些方法都没有在 class 中的任何地方调用Groups
。
除非发生了一些我不知道的 JavaFX 魔术,否则initialize()
类中的方法Groups
应该是:
void initialize(){
kontakty();
List<Users> lU = getContactList();
setlC(lU);
choise();
}
甚至可能:
void initialize(){
super.initialize()
List<Users> lU = getContactList();
setlC(lU);
choise();
}
如果您希望超类中的所有初始化代码也在子类中执行。
推荐阅读
- angular - Angular 7 SSR 使用导航器定义参数
- android - 未生成 ViewBinding 类
- python - 如何在python中使用awk命令
- angular - jhipster 和当前日期显示和检查
- scala - 如何针对 Long 值类型优化我的 properFractions 函数
- tinymce - 从 TinyMCE 获取 HTML 标记?
- java - 替换 Jenkins 的扩展选择或复选框的活动选择分隔符
- python-3.x - HTTPError:HTTP 错误 403:在从 Python3 中的链接下载 csv 文件期间定义标头时返回 Forbidden 或 None
- azure - 启用对 API 的 Azure 可用性测试访问
- python - 如何对推文进行分类(支持与不支持)以预测选举结果