كيفية استدعاء هذا الرمز من واجهة المستخدم الرسومية (jframe)
-
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();
}
لا تنتمي إلى StackOverflow