Как называется главное окно апплета и как вы к нему обращаетесь? - PullRequest
0 голосов
/ 21 сентября 2011

Я пытаюсь использовать Xoverlay и вызвать setWindowHandle, но мне нужно дать компонент.Когда я выполняю «запускать как апплет» в eclipse, eclipse создает небольшое окно с appletviewer.Я хочу знать, как получить ссылку на это окно.Я вижу, что они добавляют к нему элементы здесь:

http://download.oracle.com/javase/tutorial/deployment/applet/getStarted.html

Они просто используют add, чтобы добавить его в главное окно.Прямо сейчас в моем приложении создается другое окно, которое отображает видео, и я хочу, чтобы это видео отображалось в главном окне апплета, чтобы я мог встроить апплет в HTML-страницу и иметь полный контроль над окном.

Я пытался использовать «корневую панель», но затем я получаю эту ошибку:

java.lang.IllegalArgumentException: Component must be a native window

РЕДАКТИРОВАТЬ: По запросу, здесь мой кодвопрос):

import java.applet.Applet;
import java.awt.*;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.swing.*;

import org.gstreamer.*;
import org.gstreamer.elements.PlayBin2;
import org.gstreamer.interfaces.XOverlay;
import org.gstreamer.lowlevel.GstXOverlayAPI;

public class VideoPlayer extends JApplet {
    public void init() {
        Gst.init();
        final PlayBin2 playbin = new PlayBin2("VideoPlayer");
        URI uri = null;
        try 
        {
            uri = new URI("udp://239.1.1.1:51002");
        } 
        catch (URISyntaxException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        playbin.setURI(uri);
        //System.setProperty("apple.awt.graphics.UseQuartz", "false"); 
        try {
            SwingUtilities.invokeAndWait(new Runnable() {

                public void run() {
                    Element videosink = ElementFactory.make("xvimagesink", "imagesink");
                    videosink.set("qos", "false");
                    videosink.set("sync", "false");
                    playbin.setVideoSink(videosink);
                    playbin.setState(State.PLAYING);
                    XOverlay.wrap(videosink).setWindowHandle(rootPane); // I need the handle to the main window here
                }
            });
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Gst.main();
        playbin.setState(State.NULL);
    }
}

1 Ответ

1 голос
/ 22 сентября 2011

попробуйте использовать getRootPane() или переключитесь с JApplet на Applet и используйте getParent()

XOverlay.wrap(videosink).setWindowHandle(getRootPane()|getParent());
...