как вызвать этот код из gui(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 включает класс собственной библиотеки Swing api для DJ.
если я вызову непосредственно с помощью основной функции, это сработает. но если я вызову из 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