私はアプリで奇妙な問題があります。起動時にビデオクリップが再生されますが、これはスレッドの使用によって行われます。私がしたいのは、メインスレッドがワーカースレッドが終了するまで待つようにすることです。 しかし、私がスレッド内のビデオインスタンスで行うことは、間違っているような値しか得られません。たとえば、video.GetHeightは負の整数値を返します。 IsPlayingは、ビデオが実際に再生されていても常にfalseを返します。 ビデオは完全に起動して動作しますが、スレッド内のビデオインスタンスを呼び出そうとする他のメソッドの値はすべて奇妙な値を返します。 誰が問題がどこにあるか知っていますか?アプリは奇妙な値を返します
private class ThreadClass extends Thread {
public VideoView video;
public int ID = -1;
@Override public void run() {
if(this.ID == 1)
{
video = (VideoView)findViewById(R.id.introvideo);
video.setVideoPath("android.resource://" + getPackageName() + "/" + R.raw.intro);
video.start();
System.out.println("Input ID: " + this.ID);
}
else
System.out.println("Unexpected ID (" + this.ID + ")");
}
}
私はこれが動作しても驚いています。なぜあなたは別のスレッドからこれをやろうとしていますか?ビューはUI(メイン)スレッドでのみ実行する必要があります。 – kabuko
ビデオ再生が完了したらフォームを切り替える予定です。そうする方法が見つかりませんでしたか?私が演奏方法の後にフォームを変更するためにそれを適用すると、すぐにフォームが変更されます。だから、私はビデオを再生する責任があるスレッドを作成します。そして、メインスレッドはこのスレッドが完了するのを待ってからフォームを変更します。 – Araw