java - 将 java 类方法添加到新线程中

标签 java multithreading

我有一个 java 类,它实际上从网络摄像头捕获帧。该类有两种方法,一种用于启动,一种用于停止。我想将此类添加到我创建的 gui 中。但是,当我按原样添加功能时,我的游戏就卡住了。看来我需要在这里做一些多线程。如何将我的类方法添加到新线程中?

编辑:我现在的代码如下:

Thread t2 = new Thread(new Runnable() {
public void run()
{
    VideoCapture videoCapture = VideoCapture.create(VideoFormat.WMV);

    List<VideoSource> availableVideoSources = VideoSource.getAvailable();
        //System.out.println("availableVideoSources = " + availableVideoSources);

    if (availableVideoSources.isEmpty()) {
           throw new IllegalStateException("No external video sources available");
    }
    VideoSource webCamera = availableVideoSources.get(0);
    //System.out.println("webCamera = " + webCamera);

    videoCapture.setVideoSource(webCamera);

    java.util.List<Codec> videoCodecs = videoCapture.getVideoCodecs();
    //System.out.println("videoCodecs = " + videoCodecs);
    if (videoCodecs.isEmpty()) {
          throw new IllegalStateException("No video codecs available");
    }

    Codec videoCodec = videoCodecs.get(2);
    //System.out.println("videoCodec = " + videoCodec);

    EncodingParameters encodingParameters = new EncodingParameters(new File("file.wmv"));
    encodingParameters.setBitrate(500000);
    encodingParameters.setFramerate(10);
    encodingParameters.setKeyFrameInterval(1);
    encodingParameters.setCodec(videoCodec);

    videoCapture.setEncodingParameters(encodingParameters);
    videoCapture.start();

    //System.in.read();
    //videoCapture.stop();

    }}); 

我正在通过调用 t2.start() 来运行该线程,如何在第二个函数中调用 videoCapture.stop()?

最佳答案

runner 。如果您使用的是 Eclipse,则有一个模板会自动为您编写运行程序。此外,如果您使用的是 Swing,则应该将所有内容都发送到 Swing 事件队列。

如果您还没有这样做,您可能需要重新设计 GUI,使其成为一个 Controller 而不是应用程序本身(好吧,大概是因为您在 GUI 中遇到了线程问题)。

相关文档

可运行 文档:https://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html

EventQueue.invokeLater(Runnable) 文档:http://docs.oracle.com/javase/8/docs/api/java/awt/EventQueue.html#invokeLater-java.lang.Runnable-

并发性和 SwingWorker:https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

关于java - 将 java 类方法添加到新线程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371582/

相关文章:

java - 当我按下后退导航按钮时 Activity 重新启动

java - 如何在 JBullet 中定义自定义网格?

c++ - 并行计算的 C++ 代码优化示例

c# - 如何等待 filesystemwatcher 事件完成

Python多线程基础混淆

java - 没有wait()和notify()的同步块(synchronized block)/方法notifyAll()方法

java - 在Java中将日期从字符串转换为int

java - 获取文件子路径的最佳方法

java - 打印数组中从第 N 个索引开始的元素

c++ - 异步使用线程池?