GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Erro ao atualizar

Tags: #<Tag:0x00007f289b8e5dd0>

Saudações a todos!
Estou com uma dificuldade ao atualizar um elemento no meu sistema, cujo erro é o seguinte:
Exception in thread “AWT-EventQueue-0” java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:638)
at java.util.ArrayList.get(ArrayList.java:414)
at controlador.ControlAreaFormacao.alterar(ControlAreaFormacao.java:196)
at visao.TelaConfigAreaFormacaos.btnGravarActionPerformed(TelaConfigAreaFormacaos.java:223)
at visao.TelaConfigAreaFormacaos.access$200(TelaConfigAreaFormacaos.java:19)
at visao.TelaConfigAreaFormacaos$3.actionPerformed(TelaConfigAreaFormacaos.java:132)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

O Método esta aqui:
public void alterar(TelaConfigAreaFormacaos tcaf) {
// try {
if (this.validarFormulario(tcaf)) {
if (this.validarAreaFormacao(tcaf)) {
String afs = tcaf.getTxtAreaFormacao().getText().trim();
String ne = (String) tcaf.getCbxAreaFormacao().getSelectedItem();
// int idOculto=Integer.valueOf(tcaf.getTxtIdAreaFormacao().getText().trim());
List ltAreaFormacao = this.afd.obterAfNielEnsino(afs, ne);
AreaFormacao af = ltAreaFormacao.get(0);
// AreaFormacao af=new AreaFormacao(idOculto);
af.setDesignacaoareaFormacao(tcaf.getTxtAreaFormacao().getText().trim());
af.setAbreviacaoAreaFormacao(tcaf.getTxtAbAFormacao().getText().trim());
List ltne = this.ned.obterDesigNivelensino(ne);
af.setNivelensino(ltne.get(0));
this.afd.actualizarEntidade(af);
this.limparFormulario(tcaf);
JOptionPane.showMessageDialog(this.flutuante(), “Alterado com sucesso…” + af.getDesignacaoareaFormacao(), "Erro: ", JOptionPane.INFORMATION_MESSAGE);
}

        }

// } catch (Exception erro) {
// JOptionPane.showMessageDialog(this.flutuante(), “Erro ao alterar…” + erro.getMessage(), "Erro: ", JOptionPane.ERROR_MESSAGE);
// }
}

Classe de consulta:
private int obterIdNEnsino(String ne) {
NivelEnsinoDao ned = new NivelEnsinoDao();
List ltne = ned.obterDesigNivelensino(ne);
return ltne.get(0).getIdnivelensino();
}

public List<AreaFormacao> obterAfNielEnsino(String desigAreaFormacao, String nivelEnsino) {
    this.sessao = HibernateUtil.HibernateUtil.getSessionFactory().openSession();
    this.trn = this.sessao.beginTransaction();
    int idNEnsino = this.obterIdNEnsino(nivelEnsino);
    Query sql = this.sessao.createQuery("From AreaFormacao where designacaoareaFormacao=:desigAreaFormacao and idnivelensino=:idNEnsino");
    sql.setString("desigAreaFormacao", desigAreaFormacao);
    sql.setInteger("idNEnsino", idNEnsino);
    List<AreaFormacao> lista = sql.list();
    this.sessao.close();
    this.trn.commit();
    return lista;
}

Classe do modelo:
@Entity
@Table(name = “area_formacao”,
schema = “public”
)
public class AreaFormacao implements java.io.Serializable {

private int idareaFormacao;
private Nivelensino nivelensino;
private String abreviacaoAreaFormacao;
private String designacaoareaFormacao;
private Set<CoordenacaoArea> coordenacaoAreas = new HashSet<CoordenacaoArea>(0);
private Set<Curso> cursos = new HashSet<Curso>(0);

public AreaFormacao() {
}

public AreaFormacao(int idareaFormacao) {
    this.idareaFormacao = idareaFormacao;
}

public AreaFormacao(int idareaFormacao, Nivelensino nivelensino) {
    this.idareaFormacao = idareaFormacao;
    this.nivelensino = nivelensino;
}

public AreaFormacao(int idareaFormacao, Nivelensino nivelensino, String abreviacaoAreaFormacao, String designacaoareaFormacao, Set<CoordenacaoArea> coordenacaoAreas, Set<Curso> cursos) {
    this.idareaFormacao = idareaFormacao;
    this.nivelensino = nivelensino;
    this.abreviacaoAreaFormacao = abreviacaoAreaFormacao;
    this.designacaoareaFormacao = designacaoareaFormacao;
    this.coordenacaoAreas = coordenacaoAreas;
    this.cursos = cursos;
}

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idarea_formacao", unique = true, nullable = false)
public int getIdareaFormacao() {
    return this.idareaFormacao;
}

public void setIdareaFormacao(int idareaFormacao) {
    this.idareaFormacao = idareaFormacao;
}

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idnivelensino", nullable = false)
public Nivelensino getNivelensino() {
    return this.nivelensino;
}

public void setNivelensino(Nivelensino nivelensino) {
    this.nivelensino = nivelensino;
}

@Column(name = "abreviacao_area_formacao")
public String getAbreviacaoAreaFormacao() {
    return this.abreviacaoAreaFormacao;
}

public void setAbreviacaoAreaFormacao(String abreviacaoAreaFormacao) {
    this.abreviacaoAreaFormacao = abreviacaoAreaFormacao;
}

@Column(name = "designacaoarea_formacao")
public String getDesignacaoareaFormacao() {
    return this.designacaoareaFormacao;
}

public void setDesignacaoareaFormacao(String designacaoareaFormacao) {
    this.designacaoareaFormacao = designacaoareaFormacao;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "areaFormacao")
public Set<CoordenacaoArea> getCoordenacaoAreas() {
    return this.coordenacaoAreas;
}

public void setCoordenacaoAreas(Set<CoordenacaoArea> coordenacaoAreas) {
    this.coordenacaoAreas = coordenacaoAreas;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "areaFormacao")
public Set<Curso> getCursos() {
    return this.cursos;
}

public void setCursos(Set<Curso> cursos) {
    this.cursos = cursos;
}

@Override
public String toString() {
    return designacaoareaFormacao;
}

}

Bem-vindo ao fórum.

Formata direitinho seu código para ficar melhor de ler, só colocar ele dentro disso:
```
```

E o que tem na linha 196 da classe ControlAreaFormacao?

não consigo localizar a linha que fizeste menção agradeceria se me ajudasses!

o mé todo da classe control Area de Formação é este:
public void alterar(TelaConfigAreaFormacaos tcaf) {
// try {
if (this.validarFormulario(tcaf)) {
if (this.validarAreaFormacao(tcaf)) {
String afs = tcaf.getTxtAreaFormacao().getText().trim();
String ne = (String) tcaf.getCbxAreaFormacao().getSelectedItem();
// int idOculto=Integer.valueOf(tcaf.getTxtIdAreaFormacao().getText().trim());
List ltAreaFormacao = this.afd.obterAfNielEnsino(afs, ne);
AreaFormacao af = ltAreaFormacao.get(0);
// AreaFormacao af=new AreaFormacao(idOculto);
af.setDesignacaoareaFormacao(tcaf.getTxtAreaFormacao().getText().trim());
af.setAbreviacaoAreaFormacao(tcaf.getTxtAbAFormacao().getText().trim());
List ltne = this.ned.obterDesigNivelensino(ne);
af.setNivelensino(ltne.get(0));
this.afd.actualizarEntidade(af);
this.limparFormulario(tcaf);
JOptionPane.showMessageDialog(this.flutuante(), “Alterado com sucesso…” + af.getDesignacaoareaFormacao(), "Erro: ", JOptionPane.INFORMATION_MESSAGE);
}

        }

// } catch (Exception erro) {
// JOptionPane.showMessageDialog(this.flutuante(), “Erro ao alterar…” + erro.getMessage(), "Erro: ", JOptionPane.ERROR_MESSAGE);
// }
}

Veja na parte esquerda da tela do editor do seu IDE, é onde geralmente ficam os números das linhas.
Procure a 196.
Talvez o atalho CTRL + G funcione para encontrar mais fácil.

List ltAreaFormacao = this.afd.obterAfNielEnsino(afs, ne);
AreaFormacao af = ltAreaFormacao.get(0);

nesta linha está o elemento pesquisado na posição indicado para ser alterado…
List ltAreaFormacao = this.afd.obterAfNielEnsino(afs, ne);

estou com dificuldades de formatar textos nesta página…

Como está muito confuso entender seu código e localizar a linha especifica do erro. Vou te explicar o porque do erro e você vê onde pode mexer.
O erro se dar ao tentar acessar uma posição em um vetor/lista na qual não existe. No seu caso a lista tem 0 posições ou seja está nula e você está tentando acessar informações que não existem.
Agora tente identificar qual lista/vetor estas acessando e retornando o erro, o erro é na linha 196…

public void alterar(TelaConfigAreaFormacaos tcaf) {
if (this.validarFormulario(tcaf)) {
if (this.validarAreaFormacao(tcaf)) {
String afs = tcaf.getTxtAreaFormacao().getText().trim();
String ne = (String) tcaf.getCbxAreaFormacao().getSelectedItem();
List ltAreaFormacao = this.afd.obterAfNielEnsino(afs, ne);
AreaFormacao af = ltAreaFormacao.get(0);
af.setDesignacaoareaFormacao(tcaf.getTxtAreaFormacao().getText().trim());
af.setAbreviacaoAreaFormacao(tcaf.getTxtAbAFormacao().getText().trim());
List ltne = this.ned.obterDesigNivelensino(ne);
af.setNivelensino(ltne.get(0));
this.afd.actualizarEntidade(af);
this.limparFormulario(tcaf);
JOptionPane.showMessageDialog(this.flutuante(), “Alterado com sucesso…” + af.getDesignacaoareaFormacao(), "Erro: ", JOptionPane.INFORMATION_MESSAGE);
}
}
}

public void alterar(TelaConfigAreaFormacaos tcaf) {
if (this.validarFormulario(tcaf)) {
if (this.validarAreaFormacao(tcaf)) {
String afs = tcaf.getTxtAreaFormacao().getText().trim();
String ne = (String) tcaf.getCbxAreaFormacao().getSelectedItem();
List ltAreaFormacao = this.afd.obterAfNielEnsino(afs, ne);
AreaFormacao af = ltAreaFormacao.get(0);
af.setDesignacaoareaFormacao(tcaf.getTxtAreaFormacao().getText().trim());
af.setAbreviacaoAreaFormacao(tcaf.getTxtAbAFormacao().getText().trim());
List ltne = this.ned.obterDesigNivelensino(ne);
af.setNivelensino(ltne.get(0));
this.afd.actualizarEntidade(af);
this.limparFormulario(tcaf);
JOptionPane.showMessageDialog(this.flutuante(), “Alterado com sucesso…” + af.getDesignacaoareaFormacao(), "Erro: ", JOptionPane.INFORMATION_MESSAGE);
}
}
}

enviei te uma imagem para facilitar a percepção…

Boss GabrielA2 enviei te uma imagem para facilitar a compreenção…

Boss RoinujNosde preciso tanto da vossa ajuda…

A List ltne está vazia. A posição 0 não existe.

Como ultrapassar esta dificuldade… para sair do zéro?

Seu list ltne não tem nada nele! Não vi a classe NivelEnsinoDao para saber, mas supondo pela forma em que você inicializou essa classe é plausível que você não esteja adicionando nenhum atributos as variáveis dessa classe instanciada, então por isso a List ltne sempre será nula.

Adicione algum item nela e também verifique o tamanho dela antes de acessar algum valor.
if (index < list.size()) {
//Pode acessar
}

//