Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Знайте, что, если Вы планируете в конечном счете развернуться на Windows Vista или Windows Server 2008, много способов, которыми это может быть сделано сегодня, не будут работать. Это из-за введения нового средства защиты, названного "Сессия 0 Изоляции".
сервисы окон Most были перемещены для выполнения на Сессии 0 теперь для надлежащей изоляции их от остальной части системы. Расширение этого состоит в том, что первый пользователь, который войдет в систему больше, не размещается в Сессию № 0, они размещаются в Сессию 1. И следовательно, изоляция взломает код, который делает определенные типы коммуникации между сервисами и настольными приложениями.
лучший способ написать код сегодня, который будет работать над Vista и продвижением Server 2008 года при выполнении коммуникации между сервисами и приложениями, состоит в том, чтобы использовать надлежащий межпроцессный API как RPC, Именованные каналы, и т.д. не используйте SendMessage/PostMessage, поскольку это приведет к сбою под Сессией 0 Изоляции.
http://www.microsoft.com/whdc/system/vista/services.mspx
Теперь, учитывая Ваши требования, Вы собираетесь быть в чем-то вроде рассола. Для межплатформенных проблем я не уверен, поддерживалась ли Дистанционная работа. Вы можете иметь к выпадающему и перейти полностью назад к сокетам: http://msdn.microsoft.com/en-us/library/system.net.sockets.aspx
Если это - приложение лотка и не истинный сервис, опасаются, как Вы настраиваете свою связь при использовании каналов или TCP/IP. Если многочисленные пользователи зарегистрированы в машину (Citrix, Удаленный рабочий стол), и каждый пользователь запускает приложение лотка "сервис", то можно столкнуться с ситуацией, где у Вас есть несколько процессов, пытающихся использовать тот же стандартный порт или канал. Конечно, это не проблема, если Вы не планируете поддержку нескольких каналов или если у Вас есть истинный сервис в противоположность приложению лотка, которое работает в каждой пользовательской оболочке.
Дистанционная работа является опцией, но это не является межплатформенным. Некоторые другие пути состоят в том, чтобы использовать именованные каналы, IPC или события ядра.
Сделайте, чтобы Ваш сервис слушал 127.0.0.1 на предопределенном порте с простым потоковым сокетом TCP. Соединитесь с тем портом от своего настольного приложения.
Это очень просто, и это является абсолютно кросс-платформенным.
Странно достаточно я собирался предложить Дистанционную работу! Моно 1.0 Информации о версии (с archive.org, потому что исходное местоположение отсутствует) упоминает System.Runtime.Remoting.dll как поддерживаемую библиотеку, и ничего не говорит об известных проблемах.
, Если дистанционная работа отсутствует затем, вероятно, необходимо реализовать собственное сообщение TCP, структурирующее протокол. Windows не имеет эквивалента доменных UNIX сокетов для коммуникации на той же машине.
Большинство сервисов, которые имеют компонент графического интерфейса пользователя, выполняется как именованный пользователь и разрешено доступ к рабочему столу. Это позволяет Вам получить доступ к нему через COM или.NET, но только локально (если Вы не хотите быть сложными)
Лично, я открываю обычный старый сокет на сервисе - его кросс-платформенное, позволяет нескольким клиентам, позволяет любому приложению получать доступ к нему, не полагается на безопасность Windows, которая будет открыта для него и позволяет Вашему GUI быть записанным на любом языке, который Вы любите (поскольку все поддерживает сокеты).
Для приложения лотка, Вы хотели бы, чтобы простой протокол связался - Вы могли бы также использовать систему стиля REST для отправки команд в него и потока XML (гогот) или пользовательский формат данных назад.
Кто-нибудь из вас действительно пробовал удаленное взаимодействие с Mono? Работает отлично. Вы можете столкнуться с некоторыми угловыми случаями, но это маловероятно. Просто время от времени тестируйте свое приложение на кроссплатформенное (MS.Net <-> Mono) удаленное взаимодействие, чтобы выявить возможные сбои. И начнем с недавнего Mono, сейчас 2.4.2.
Mono) время от времени удаленное взаимодействие, чтобы отловить возможные сбои. И начнем с недавнего Mono, сейчас 2.4.2. Mono) время от времени удаленное взаимодействие, чтобы отловить возможные сбои. И начнем с недавнего Mono, сейчас 2.4.2.