UPDATE: Действительно умные люди быстро указали на этот ответ , который объясняет странность, описанную ниже
ОРИГИНАЛЬНЫЙ ОТВЕТ:
я знаю, помогает ли это кому-либо, но я был застрял с той же проблемой, даже когда делал что-то вроде правды. В моем основном методе у меня есть такой код:
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {
"common.xml",
"token.xml",
"pep-config.xml" });
TokenInitializer ti = context.getBean(TokenInitializer.class);
и в файле token.xml
у меня была строка
Я заметил, что пакет .path больше не существует, поэтому я просто положил строку навсегда.
И после этого NPE начал заходить. В pep-config.xml
у меня было всего 2 боба:
и класс SomeAbac имеет свойство, объявленное как
@Autowired private Settings settings;
по неизвестной причине, настройки null в init (), когда элемент
отсутствует вообще, но когда он присутствует и имеет некоторые bs в качестве basePackage, все работает Что ж. Теперь эта строка выглядит так:
, и она работает. Может быть, кто-то может дать объяснение, но для меня это достаточно прямо сейчас)
Вы должны использовать API WIN 32 Threads, см. http://www.mingw.org/wiki/Use_the_thread_library http://msdn.microsoft.com/en-us/library/ms684254 ( v = vs.85) .aspx
С MinGW у вас есть несколько вариантов. Мои рекомендации:
Используя Windows API, вы можете попробовать что-то вроде этого:
/*
* main.c
*
* Created on: 18/10/2011
* Author: Cesar Carlos Ortiz Pantoja.
*/
#include <windows.h>
#include <stdio.h>
int exitCondition;
struct threadParams{
int param1;
int param2;
};
static DWORD WINAPI myFirstThread(void* threadParams)
{
struct threadParams* params = (struct threadParams*)threadParams;
while(exitCondition){
printf("My Thread! Param1:%d, Param2:%d\n", params->param1, params->param2);
fflush(stdout);
Sleep(1000);
}
return 0;
}
int main(void){
DWORD threadDescriptor;
struct threadParams params1 = {1, 2};
exitCondition = 1;
CreateThread(
NULL, /* default security attributes. */
0, /* use default stack size. */
myFirstThread, /* thread function name. */
(void*)¶ms1, /* argument to thread function. */
0, /* use default creation flags. */
&threadDescriptor); /* returns the thread identifier. */
while(1){
printf("Main Program!\n");
fflush(stdout);
Sleep(2000);
}
return 0;
}
С уважением
MinGW не предоставляет полную модель POSIX. Если вам нужны потоки в стандартном пакете, вам придется использовать сорт Windows.
Он указывает на главной странице MinGW :
Компиляторы MinGW предоставляют доступ к функциональным возможностям среды выполнения Microsoft C и некоторым срокам выполнения, зависящим от языка. MinGW, будучи минималистом, не пытается и никогда не будет пытаться обеспечить среду выполнения POSIX для развертывания приложений POSIX в MS-Windows. Если вы хотите, чтобы развертывание приложений POSIX на этой платформе, пожалуйста, рассмотрите Cygwin.
blockquote>Cygwin поддерживает , потому что он предоставляет Cygwin DLL, слой эмуляции, в то время как MinGW больше gcc для использования с способом Windows.
В качестве альтернативы, если Cygwin не является вариантом, вы можете посмотреть в Pthreads / Win32 , который утверждает, что работает с MinGW.