كيفية استدعاء هذا الرمز من واجهة المستخدم الرسومية (jframe)

StackOverflow https://stackoverflow.com//questions/24014375

  •  21-12-2019
  •  | 
  •  

سؤال

أريد الاتصال بـ youtubeviewer من النافذة بواسطة actionlistener

public class YouTubeViewer {

public YouTubeViewer(){
    NativeInterface.open();
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame = new JFrame("YouTube Viewer");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.getContentPane().add(getBrowserPanel(), BorderLayout.CENTER);
            frame.setSize(800, 600);
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    });
    NativeInterface.runEventPump();
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        @Override
        public void run() {
            NativeInterface.close();
        }
    }));
}

public JPanel getBrowserPanel() {
    JPanel webBrowserPanel = new JPanel(new BorderLayout());
    JWebBrowser webBrowser = new JWebBrowser();
    webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
    webBrowser.setBarsVisible(false);
    webBrowser.navigate("www.youtube.com/embed/sKeCX98U29M");
    return webBrowserPanel;
}
}

مثال jframe (للاختبار)

public class trailerPlayer extends JPanel implements ActionListener
{
private JButton press;
public trailerPlayer ()
{
    setLayout(new BorderLayout());
            press = new JButton("press");
            press.addActionListener(this);
            add(press);
}
public void actionPerformed(ActionEvent actionEvent)
{
           YouTubeViewer a = new YouTubeViewer();
    }
    public static void main(String args[ ])
{  
    trailerPlayer p = new trailerPlayer(); 
    JFrame test = new JFrame();

    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    test.add(p);
    test.setSize(500,500);
    test.setVisible(true);
}
}

يشتمل YouTubeViewer على فئة مكتبة DJ Native Swing api.

إذا اتصلت مباشرة عن طريق الوظيفة الرئيسية، فسوف يعمل ذلك. ولكن إذا اتصلت من Actionlistener فسوف يتوقف عن الاستجابة في الوقت الذي أضغط عليه ~ أعتقد أنها مشكلة تشغيل المشكلة ~ كيف الحل؟اي فكرة؟شكرا أي فكرة ؟؟

هل كانت مفيدة؟

المحلول

يحظر الكود الخاص بك EDT (NativeInterface.runEventPump();).لذا عليك أن تفعل ذلك في موضوع مختلف.

public void actionPerformed(ActionEvent actionEvent)
{
       Thread t = new Thread(new Runnable() {
         public void run() {
           YouTubeViewer a = new YouTubeViewer();
         }
       });
       t.start();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top