为了账号安全,请及时绑定邮箱和手机立即绑定

如何让 for 循环在每次迭代中等待?

如何让 for 循环在每次迭代中等待?

摇曳的蔷薇 2023-09-20 19:05:10
我试图在应用程序中使用线程的每个 for 循环之后等待,但我遇到了问题。当 URL 中的电影正在播放时,必须执行这个 for 循环,但是......不幸的是,循环是在暂停的情况下执行的,我将其放入代码中,后来影片以更新的文本开始。这应该同时开始。for 循环和电影。电影放映过程中,文字应该不断更新。注意:我缩短了 ArrayList 字典以使代码更容易理解。注意2:应用程序尝试从 URL 打开视频文件,但它给我一条消息:W/MediaPlayer:无法打开(视频 URL):java.io.FileNotFoundException:没有内容提供程序:(视频 URL)。编辑:我正在为您放置整个班级代码。带有构造函数的 Translations.java 类。public class Translations {    private String polishWord;    private String englishWord;    public Translations(){    }    public Translations(String mPolishWord,String mEnglishWord){        polishWord = mPolishWord;        englishWord = mEnglishWord;    }    public String getPolishWord() {        return polishWord;    }    public void setPolishWord(String polishWord) {        this.polishWord = polishWord;    }    public String getEnglishWord() {        return englishWord;    }    public void setEnglishWord(String englishWord) {        this.englishWord = englishWord;    }}
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

我找到了解决办法。问题是我试图让处理程序中的线程休眠。JVM 认为应该暂停主线程,而不是“t”线程。我将 Thread.sleep() 方法移至 run() 以及 for 循环。我只在处理程序中留下 switch() 来更改 UI。现在就可以了。


        final Handler h = new Handler() {


            @Override

            public void handleMessage(@NonNull Message msg) {


               Translations x = dict.get(i-1);

                        switch (j) {

                            case 1: {

                                Log.d(TAG, "First word translated");

                                englishTrans1.setText(x.getEnglishWord());

                                polishTrans1.setText(x.getPolishWord());

                                break;

                            }

                            case 2: {

                                Log.d(TAG, "Second word translated");

                                englishTrans2.setText(x.getEnglishWord());

                                polishTrans2.setText(x.getPolishWord());

                                break;

                            }

                            case 3: {

                                Log.d(TAG, "Third word translated");

                                englishTrans3.setText(x.getEnglishWord());

                                polishTrans3.setText(x.getPolishWord());

                                break;

                            }


                        }


                }



            };



        Runnable r = new Runnable() {

            @Override

            public void run() {


                for(i = 0;i<dict.size();i++) {


                    try {

                        Thread.sleep(2000);


                    }catch (InterruptedException e){

                    }


                    if (j < 3) {

                        j++;

                    } else {

                        j = 1;

                    }

                    h.sendEmptyMessage(0);

                }



            }

        };


        Thread t = new Thread(r);

        t.start();




    }

}


查看完整回答
反对 回复 2023-09-20
?
心有法竹

TA贡献1866条经验 获得超5个赞

为什么要循环,代码片段正在执行的“字幕”链接到视频。如果用户擦洗影片并快进或快退会怎样?大多数字幕设置都会在屏幕上显示与影片时间码相关联的句子,因此您可以在播放视频上的时间码发生变化时触发字幕,并传入时间码,这样它将获取视频该部分的句子并将其显示在屏幕上。



查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信