Erro ao atualizar

16 respostas
java
T

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;
}

}

16 Respostas

R

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?

T

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

T
o  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);

//        }

}
R

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.

T

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);

T

estou com dificuldades de formatar textos nesta página…

G

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…

T
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);

}

}

}<div class="lightbox-wrapper"><a class="lightbox" href="https:/uploads/3X/3/d/3dba1e66f3f749ae47b17419663ac719e1a85910.png.webp" data-download-href="/uploads/default/3dba1e66f3f749ae47b17419663ac719e1a85910" title="ll.png"><img src="/uploads/3X/3/d/3dba1e66f3f749ae47b17419663ac719e1a85910.png.webp" alt="ll" data-base62-sha1="8O3SLoIoLPDVxCybJPw65eNTZOE" width="690" height="209" data-small-upload="/uploads/3X/3/d/3dba1e66f3f749ae47b17419663ac719e1a85910.png.webp"><div class="meta">
<svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use xlink:href="#far-image"></use></svg>ll.png1461×444 19.2 KB<svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use xlink:href="#discourse-expand"></use></svg>
</div></a></div>
T
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);

}

}

}

<div class="lightbox-wrapper"><a class="lightbox" href="https:/uploads/3X/3/d/3dba1e66f3f749ae47b17419663ac719e1a85910.png.webp" data-download-href="/uploads/default/3dba1e66f3f749ae47b17419663ac719e1a85910" title="ll.png"><img src="/uploads/3X/3/d/3dba1e66f3f749ae47b17419663ac719e1a85910.png.webp" alt="ll" data-base62-sha1="8O3SLoIoLPDVxCybJPw65eNTZOE" width="690" height="209" data-small-upload="/uploads/3X/3/d/3dba1e66f3f749ae47b17419663ac719e1a85910.png.webp"><div class="meta">
<svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use xlink:href="#far-image"></use></svg>ll.png1461×444 19.2 KB<svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use xlink:href="#discourse-expand"></use></svg>
</div></a></div>
T

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

T

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

T

Boss RoinujNosde preciso tanto da vossa ajuda…

R

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

T

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

G

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.

R
Adicione algum item nela e também verifique o tamanho dela antes de acessar algum valor.

if (index < list.size()) {

//Pode acessar

}
Criado 15 de abril de 2021
Ultima resposta 15 de abr. de 2021
Respostas 16
Participantes 3