Java - Error: "non-static method getBooks() cannot be referenced from a static context"

 
Vista:

Error: "non-static method getBooks() cannot be referenced from a static context"

Publicado por marta (11 intervenciones) el 30/12/2018 16:37:27
Tengo que hacer un metodo para cancelar los pedidos de una tienda, pero me sale un error al comparar los books que hay en la tienda con los que hay en el pedido para ponerlos en el inventario otra vez antes de eliminar el pedido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void deleteOrder(Customer customer, long idOrder){
    for (int i=0; i<=customer.getOrders().size(); i++){
        if(customer.getOrders().get(i).size()==idOrder){
            for(int j=0; j<=SessionMB.getBooks().size(); j++){ #aqui esta el error
 
 
 
 
 
 
####
public List<Books> getBooks(){
    return listBooks.allBooks();
 
####
public List<Books> allBooks(){
    TypedQuery<Books> query=em.createQuery("SELECT m FROM books m", books.class);
    return query.getResultList();
 
####
public void incStock(int quantity) {
    stock += quantity;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error: "non-static method getBooks() cannot be referenced from a static context"

Publicado por Kabuto (1381 intervenciones) el 30/12/2018 23:43:31
Sin ver el código completo es difícil indicarte la solución correcta, pero de momento prueba a declarar esos metodos como estáticos

1
2
public static List<Books> getBooks(){
    return listBooks.allBooks();

El error que te sale indica que estás llamando a un método "No estático" desde un "contexto estático", por ejemplo, desde un main().
Fíjate que los metodos main siempre se declaran estáticos:

1
public static void main(String[] args)

Esto significa que desde un main, no puedes invocar métodos "no estáticos".
Así que, o los declaras estáticos como he puesto antes, o bien instancias un objeto de la clase en la que estás trabajando para poder invocar ese método.
Esto último no creo que sea la solución que necesites, esto funcionaría solo en determinados casos concretos.

Prueba a declaralos como estáticos y cuéntanos si ha funcionado o no.
Si no funciona, muéstranos el código completo de la clases que estás trabajando, para recomendarte mejor como solucionarlo.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar