Как показать пустые ячейки? - PullRequest
0 голосов
/ 28 сентября 2019

Я использую tableview из javafx, и в некоторых моментах моего кода будет элемент, который будет нулевым, как его лечить?Иногда idProcesso и tempoE будут нулевыми, но я хочу показать idProcessador.

каждая строка содержит переменные класса Processor, но одной из этих переменных является другой объект, Process, и это, в свою очередь, может бытьиногда ноль, как изменить, чтобы линии ничего не показывали?потому что, когда я прошу показать, даст нулевую точку

public void initialize(URL location, ResourceBundle resources) {

    idProcessador = new TableColumn("ID Processador");
    idProcessador.setPrefWidth(100);
    idProcessador.setCellValueFactory(data -> 
            new SimpleIntegerProperty(data.getValue().getId()).asObject());
    idProcesso = new TableColumn("ID Processo");
    idProcesso.setCellValueFactory(data -> 
            new SimpleIntegerProperty(data.getValue().
                        getProcessoRodando().getId()).asObject());
    tempoE = new TableColumn("Tempo Execução Restante");
    tempoE.setPrefWidth(100);
    tempoE.setCellValueFactory(data -> 
            new SimpleIntegerProperty(data.getValue().
                        getProcessoRodando().getTempoExecucaoRest()).asObject());
    tabProcessador.getColumns().addAll(idProcessador, idProcesso,tempoE);
}



public class Processador {
    private Processo processoRodando;
    private int id;
    private Integer quantum =  null;    
}




public class Processo implements Comparable<Processo> {
    int id ;
    int tempoExecucao;
    int estadoProcesso;
    int tempoExecucaoRest;
}

1 Ответ

0 голосов
/ 30 сентября 2019

Похоже, ваша проблема в этих двух строках:

idProcesso.setCellValueFactory(data -> 
        new SimpleIntegerProperty(data.getValue().
                    getProcessoRodando().getId()).asObject());

tempoE.setCellValueFactory(data -> 
        new SimpleIntegerProperty(data.getValue().
                    getProcessoRodando().getTempoExecucaoRest()).asObject());

Иногда data.getValue().getProcessoRodando() возвращает ноль.Очевидно, что вы не можете вызвать метод с нулевым значением.

Самое простое решение - воспользоваться рекомендацией, приведенной в Что такое NullPointerException и как его исправить? и избегать вызоваМетод с нулевым значением:

idProcesso.setCellValueFactory(data -> {
        Processo processo = data.getValue().getProcessoRodando();
        return new SimpleObjectProperty<Integer>(processo != null ?
            Integer.valueOf(processo.getId()) : null);
    });

tempoE.setCellValueFactory(data -> {
        Processo processo = data.getValue().getProcessoRodando();
        return new SimpleObjectProperty<Integer>(processo != null ?
            Integer.valueOf(processo.getTempoExecucaoRest()) : null);
    });

Вы также можете использовать Bindings.select или Bindings.selectString , но они ненадежны, так как используют отражение, котороеозначает, что если вы допустите орфографическую ошибку, компилятор не заметит или не отметит ее.

В качестве дополнительного примечания вы должны включить все предупреждения компилятора и устранить их.Затем компилятор предупредит вас, что ваши объекты TableColumn должны иметь типы:

private TableColumn<Processador, Integer> idProcessador;

// ...

idProcessador = new TableColumn<>("ID Processador");
...