Решение для поддержки многопоточности sqlite4java - PullRequest
1 голос
/ 28 мая 2011

Я пытаюсь реализовать приложение Java Swing GUI с игрой.Игра заключается в подсчете количества нажатий кнопки за 5 секунд.

Я использую sqlite4java в одном из моих проектов с графическим интерфейсом Java.Это довольно минималистично, поэтому поддерживает только однопоточные приложения.

Я хочу выполнить SQL-запрос после истечения 5 секунд.У меня есть поток, запущенный в прослушивателе onclick моей кнопки, метод run () которого реализован следующим образом:

run() {
 timeLeft = 5;
 score = 0;
 while(timeLeft>0)
      Thread.sleep(100);
      timeLeft -= 0.1;
      update left time on GUI;
  }
  // time is up
  execute some SQLite INSERT query here;
}

И поскольку sqlite4java поддерживается в однопоточном режиме, он генерирует исключение:

SQLite error:com.almworks.sqlite4java.SQLiteException:
[-98] DB[1] confined(Thread[main,5,]) used (Thread[Thread-3,6,main]) 

Как я могу выполнить после завершения потока (вне потока)?Это вызывает исключение, потому что поток вызываемого и поток, в котором создается база данных (Основной поток), не совпадают.

Как я могу сделать основной поток сигнальным (и обработать этот сигнал в основном потоке) после этогопоток заканчивается?

Все, чего я хочу добиться, - это выполнить запрос, чтобы добавить оценку пользователя в список рекордов.Это не домашнее задание, я пытаюсь разработать приложение для моей концепции ORM.

Ответы [ 2 ]

9 голосов
/ 28 мая 2011

Как советует @corlettk, вам нужен отдельный поток для операций с базой данных.sqlite4java поставляется с SQLiteQueue, который делает это за вас.Есть учебник и javadoc с примером .

Убедитесь, что вы обернули ВСЕ операции с базой данных с помощью SQLiteJob (s) и передали их в очередь.

Надеюсь это поможет!Игорь

0 голосов
/ 28 мая 2011

Ахмет,

Полагаю, вам придется делать ВСЕ ваши "вещи базы данных" (включая dis / connect) в ОДНОМ потоке, который, вероятно, должен быть выделен для этой цели;может быть, даже «спрятан» за очередью запросов.

Удачи с этим.Можете ли вы вместо этого "просто" поменять RDBMS?

Cheers.Кит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...