2017-02-08 8 views
-1

Поднять ошибку, когда я касаюсь кнопки и отладки вызова form.show.Показать вторую форму при нажатии кнопки в delphi android

Проект AVA.apk поднял класс исключения EJNIException с сообщением "android.view.ViewRootImpl $ CalledFromWrongThreadException:. Только оригинальный поток, который создал иерархию вида может коснуться его мнение.

Unit2:

var 
    frmSettings: TfrmSettings; 

Unit1 Кнопка OnClick событие:

procedure TfrmMain.btnSettingsClick(Sender: TObject); 
begin 
    frmSettings:=TfrmSettings.Create(Application); 
    frmSettings.Show; 
end; 
+5

Там не хватает здесь, чтобы обновить вашу проблему. Можете ли вы предоставить нам MCVE? –

+0

@JerryDodge Пожалуйста, внимательно прочитайте мой код ^^^. –

+4

Я очень внимательно прочитал ваш код, и я вижу две строки кода, которые я использую все время, которое должно работать. Что в этой форме? Означает ли эта другая форма что-то еще? Используете ли вы представления устройств? Можете ли вы начать новый проект без ничего и воспроизвести проблему? –

ответ

2

код вы предоставили само по себе не вызывает ошибки. Однако код, который выполняется во время создания и/или отображения вашей формы, может быть.

Возможно, вы используете/называете собственные Android API, которые нужно запускать в контексте потока пользовательского интерфейса Android. Поскольку основной поток Delphi и поток пользовательского интерфейса Android - это разные потоки, вы вызываете ошибку.

Чтобы избежать этого, используйте:

procedure TfrmMain.btnSettingsClick(Sender: TObject); 
begin 
    CallInUiThread(procedure 
    begin 
     frmSettings:=TfrmSettings.Create(Application); 
     frmSettings.Show; 
    end); 
end;