Created
August 2, 2011 05:40
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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