Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Я делаю что-то подобное Вам.
Мое решение состояло в том, чтобы направить все вызовы через очередь потока STA. Я использовал ориентированный на многопотоковое исполнение набор от новой параллельной платформы для стояния в очереди Действий, я хотел работать на потоке STA. У меня затем было X количества потоков STA, которые постоянно проверяли очередь на новые действия для выполнения.
Я исследовал бы использование [STAThread] атрибут для переключения модели потоков. например.
[STAThread]
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new Host() };
ServiceBase.Run(ServicesToRun);
}
Но я смущен, почему Вы используете компоненты UI в веб-сервисе вообще. Можно ли объяснить немного больше о том, почему Вы пытаетесь сделать это?