как ограничить время для входа сканера JAVA [дубликат]

Добавление случая, когда имя класса для объекта, используемого в структуре сущности, такое же, как имя класса для файла с кодировкой веб-формы.

Предположим, у вас есть веб-форма Contact.aspx, чей класс codebehind Свяжитесь с вами, и у вас есть имя объекта Contact.

Затем следующий код вызовет исключение NullReferenceException при вызове context.SaveChanges ()

Contact contact = new Contact { Name = "Abhinav"};
var context = new DataContext();
context.Contacts.Add(contact);
context.SaveChanges(); // NullReferenceException at this line

Ради полноты класса DataContext

public class DataContext : DbContext 
{
    public DbSet Contacts {get; set;}
}

и класс сущности контакта. Иногда классы сущностей являются частичными классами, так что вы можете распространять их и в других файлах.

public partial class Contact 
{
    public string Name {get; set;}
}

Ошибка возникает, когда оба класса entity и codebehind находятся в одном и том же пространстве имен. Чтобы исправить это, переименуйте класс сущности или класс codebehind для Contact.aspx.

Причина. Я все еще не уверен в причине. Но всякий раз, когда какой-либо из классов сущностей расширяет System.Web.UI.Page, возникает эта ошибка.

Для обсуждения рассмотрим NullReferenceException в DbContext.saveChanges ()

6
задан Артём Царионов 8 April 2012 в 00:01
поделиться

2 ответа

Не из коробки, нет. Обычно Reader только выходит из вызова read (), когда другой поток закрывает базовый поток, или вы достигаете конца ввода.

Поскольку read () не все это прерывается, это становится немного проблема параллельного программирования. Поток, который знает о тайм-ауте, должен будет иметь возможность прервать поток, который пытается прочитать вход.

По сути, поток чтения должен будет опросить метод ready () Reader, а не заблокировать в read (), когда читать нечего. Если вы завершите операцию опроса и ожидания в файле java.util.concurrent.Future, вы вызываете метод get () в будущем с тайм-аутом.

В этой статье мы рассмотрим несколько деталей: http: //www.javaspecialists.eu/archive/Issue153.html

4
ответ дан Benjamin Cox 25 August 2018 в 21:02
поделиться

Немного более простой способ сделать это, чем ответ Бенджамина Кокса, состоял бы в том, чтобы сделать что-то вроде

int x = 2; // wait 2 seconds at most

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
long startTime = System.currentTimeMillis();
while ((System.currentTimeMillis() - startTime) < x * 1000
        && !in.ready()) {
}

if (in.ready()) {
    System.out.println("You entered: " + in.readLine());
} else {
    System.out.println("You did not enter data");
}

. Это, однако, потребляет больше ресурсов, чем его решение.

12
ответ дан Jeffrey 25 August 2018 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: