2015-01-30 2 views
0

Когда я запускаю эту тему я этот результат, и я не khow почемуИсключения в потоке java.lang.NullPointerException

FirstThread работает

Загрузки бар страница

Исключение в потоке «резьбовой 0" java.lang.NullPointerException в com.sctrcd.multidsdemo.integration.threads.FirstThread.run (FirstThread.java:29)

А код,

package com.sctrcd.multidsdemo.integration.threads; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.PageRequest; 
import org.springframework.data.domain.Sort.Direction; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.support.AnnotationConfigContextLoader; 
import com.sctrcd.multidsdemo.domain.bar.Bar; 
import com.sctrcd.multidsdemo.integration.config.AppConfig; 
import com.sctrcd.multidsdemo.integration.repositories.bar.BarPagingAndSortingRepository; 
import com.sctrcd.multidsdemo.integration.repositories.bar.BarRepository; 
@ContextConfiguration(classes =AppConfig.class, 
loader=AnnotationConfigContextLoader.class) 

общественный класс FirstThread расширяет тему {

@Autowired 
BarPagingAndSortingRepository barPage; 
    public void run() { 
    System.out.println("FirstThread is running"); 
    System.out.println("Loading bar page"); 
    Page<Bar> bars=barPage.findAll(new PageRequest(0, 1, Direction.DESC, "id")); 
    System.out.println("Bar page loaded"); 
    Bar bar=bars.getContent().get(0); 
    System.out.println("Creating bar"); 
    System.out.println(bar.getId()); 
    System.out.println(); 
    //int a = 20; 
    Thread.currentThread().interrupt(); 
    System.out.println("Interrupt"); 
    } 
    public static void main(String args[]) { 
    FirstThread thread=new FirstThread(); 
    thread.start(); 
    } 
} 
+5

Вы должны сообщить нам, какая строка - строка 29. И просто подумайте о том, что на этой линии - что может быть нулевым, что вы, возможно, захотите проверить? – dcsohl

+1

где вы начали barPage ??? ahhh ok через Autowired ... –

+0

'barPage' имеет аннотацию' @ Autowired' на нем - это может быть или не быть проблемой. – dcsohl

ответ

0

Запустить программу в режиме отладки и оценить каждый метод призванию и переменную в 29 строке. Итак, вы увидите, какой из них имеет значение null

Поскольку этот код запускается из общедоступного static void main - инициализируется какой-либо контекст Injection, а @Autowired аннотация не работает, поэтому barPage имеет значение null.
В тесте JUnit это может сработать, если в тестах Junit были специальные аннотации, которые инициализировали контекст Spring.
Посмотрите здесь: http://www.springbyexample.org/examples/intro-to-ioc-creating-a-spring-application.html
И всегда думайте об одном правиле. Бобы могут быть введены (автоматически) только в других бобов. Ваш тест-случай не является компонентом

+0

Страница bars = barPage.findAll (новый PageRequest (0, 1, DECC, «id»)); is null – Khouadja

+0

Переменная "barPage" равна нулю? Так что проблема в том, что нет ничего Injected @Autowired BarPagingAndSortingRepository barPage; – StrekoZ

+0

да, но я не понимаю, почему – Khouadja

0

И это pagingAndSorting боб

package com.sctrcd.multidsdemo.integration.repositories.bar; 
 

 
import org.springframework.data.repository.PagingAndSortingRepository; 
 

 
import com.sctrcd.multidsdemo.domain.bar.Bar; 
 

 
public interface BarPagingAndSortingRepository extends PagingAndSortingRepository<Bar, Integer> { 
 

 
}

0

Ваш Основной метод должен выглядеть следующим образом, чтобы успешно связан с Spring контекст:

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class MainApp { 
    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");  
     BarPagingAndSortingRepository barPage = (BarPagingAndSortingRepository) context.getBean("barPage"); 
    } 
} 
Смежные вопросы