Skip to content

Instantly share code, notes, and snippets.

@ts-3156
Created August 2, 2011 05:40
Show Gist options
  • Save ts-3156/1119646 to your computer and use it in GitHub Desktop.
Save ts-3156/1119646 to your computer and use it in GitHub Desktop.
JavaFXのコンポーネントをSwingに配置するサンプル。現時点ではExceptionでまくり…。たぶん、ウインドウサイズをある値より大きくするとブラウザビューの範囲外が表示されてしまって、そこでExceptionがでているんだと思う。ソースはここ→http://d.hatena.ne.jp/nowokay/20110526#1306438744
// JavaFXのコンポーネントを専用のスレッド以外から変更(ウインドウサイズを大きくしたときとか)に
// このExceptionがでる。JavaFXのコンポーネントに変更を加えるようなコードを
// Platform.runLater()でラップしていけばたぶんでなくなる
java.lang.NullPointerException
at com.sun.javafx.tk.quantum.EmbeddedScene$PaintRunnable.paintImpl(EmbeddedScene.java:154)
at com.sun.javafx.tk.quantum.EmbeddedScene$PaintRunnable.run(EmbeddedScene.java:230)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at com.sun.prism.render.RenderJob.run(RenderJob.java:29)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at com.sun.javafx.tk.quantum.QuantumRenderer$ObservedRunnable.run(QuantumRenderer.java:70)
at java.lang.Thread.run(Thread.java:662)
package fx;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class WebFrame extends JFrame {
private javax.swing.JButton urlButton;
private javax.swing.JPanel urlButtonPanel;
private javax.swing.JPanel fxPanel;
private javax.swing.JTextField urlField;
WebEngine engine;
public WebFrame() {
initComponents();
final JFXPanel panel = new JFXPanel();
fxPanel.add(panel, BorderLayout.CENTER);
// TmpFxLauncher.launch();
Platform.runLater(new Runnable() {
public void run() {
// This code must run on FX application thread.
engine = new WebEngine("http://d.hatena.ne.jp/nowokay/");
WebView webView = new WebView(engine);
// Media media = new Media("http://www.hmix.net/music/n/n43.mp3");
// MediaPlayer mp = new MediaPlayer(media);
// MediaView mediaView = new MediaView(mp);
// mp.play();
Group root = new Group();
root.getChildren().add(webView);
Scene scene = new Scene(root);
panel.setScene(scene);
}
});
}
// public static class TmpFxLauncher extends Application {
// @Override
// public void start(Stage primaryStage) {
// }
//
// private static void launch() {
// Application.launch(null);
// }
// }
private void initComponents() {
urlButtonPanel = new javax.swing.JPanel();
urlField = new javax.swing.JTextField();
urlButton = new javax.swing.JButton();
fxPanel = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("WebView Browser");
urlField.setColumns(30);
urlField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
urlButtonPanel.add(urlField);
urlButton.setText("jButton1");
urlButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
urlButtonPanel.add(urlButton);
getContentPane().add(urlButtonPanel, java.awt.BorderLayout.NORTH);
fxPanel.setLayout(new java.awt.BorderLayout());
getContentPane().add(fxPanel, java.awt.BorderLayout.CENTER);
setPreferredSize(new Dimension(300, 300));
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Platform.runLater(new Runnable() {
public void run() {
engine.load(urlField.getText());
}
});
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
public static void main(String args[]) {
WebFrame frame = new WebFrame();
frame.pack();
frame.setVisible(true);
// SwingUtilities.invokeLater(new Runnable() {
//
// public void run() {
// WebFrame frame = new WebFrame();
// frame.pack();
// frame.setVisible(true);
// }
// });
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment