Проблемы с геттерами и сеттерами - PullRequest
0 голосов
/ 12 июля 2020
• 1000 сеттер в первом списке классов с одним объектом. Что я делаю не так?
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();

Возвращено NullPointer

1 Ответ

0 голосов
/ 12 июля 2020

Прежде всего - мне нравится, что часть вашего кода написана на английском языке sh, а часть - на языке Poli sh. Это очень плохая привычка, которая укусит вас за задницу, если вы когда-нибудь будете работать с международной командой. Не говоря уже о том, что людям на SO или в других местах труднее помочь вам, если они не понимают имена методов или переменных.

Во-вторых, почему эти две строки:

setContactList(users1);
System.out.println(users1.toString());

внутри l oop? Было бы разумнее выполнить их после завершения l oop.

И, наконец, root вашей проблемы. Этот метод:

void initialize(){
    List<Users> lU = getContactList();
    setlC(lU);
    choise();
}

выбрасывает NullPointerException, потому что поле contactList фактически пустое. Это поле инициализируется методом kontakty() из класса Application, который вызывается методом initialize() того же класса. Однако ни один из этих методов не вызывается нигде в классе Groups.

Если не происходит какое-то JavaFX magi c, о котором я не знаю, метод initialize() в классе Groups должен быть:

void initialize(){
       kontakty();
       List<Users> lU = getContactList();
       setlC(lU);
       choise();
    }

или, возможно, даже:

void initialize(){
    super.initialize()
    List<Users> lU = getContactList();
    setlC(lU);
    choise();
}

, если вы хотите, чтобы весь код инициализации из суперкласса также выполнялся в подклассе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...