﻿{"id":1314,"date":"2013-09-12T22:36:27","date_gmt":"2013-09-12T13:36:27","guid":{"rendered":"http:\/\/yucchi.jp\/blog\/?p=1314"},"modified":"2013-09-12T22:38:25","modified_gmt":"2013-09-12T13:38:25","slug":"%e9%9d%9e%e5%90%8c%e6%9c%9f%e5%87%a6%e7%90%86%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%80%82","status":"publish","type":"post","link":"http:\/\/yucchi.jp\/blog\/?p=1314","title":{"rendered":"\u975e\u540c\u671f\u51e6\u7406\u3092\u8a66\u3057\u3066\u307f\u305f\u3002"},"content":{"rendered":"<p>JavaFX \u3092\u306f\u3058\u3081\u3066\u304b\u3089\u3044\u308d\u3044\u308d\u89e3\u3089\u306a\u3044\u3053\u3068\u304c\u3042\u3063\u3066\u601d\u3046\u3088\u3046\u306b\u9032\u307e\u306a\u3044\u3002<\/p>\n<p>\uff19\u6708\u3001\uff11\uff10\u6708\u306f\u500b\u4eba\u7684\u306b\u3044\u308d\u3044\u308d\u9762\u5012\u306a\u5b63\u7bc0\u3067\u3042\u3063\u3066\u305d\u306e\u3046\u3061\u306b\u30af\u30ea\u30b9\u30de\u30b9\u3084\u304a\u6b63\u6708\u3068\u5fd9\u3057\u304f\u306a\u308b\u3002<\/p>\n<p>\u305d\u308c\u3067\u3082\u5c11\u3057\u3060\u3051\u3067\u3082\uff01 \u3068\u4eca\u56de\u306f\u300c<a href=\"http:\/\/itpro.nikkeibp.co.jp\/article\/COLUMN\/20130828\/500602\/?ST=develop\" target=\"_blank\">JavaFX 2\u3067\u306f\u3058\u3081\u308b\u3001GUI\u958b\u767a\u3000\u7b2c14\u56de \u975e\u540c\u671f\u51e6\u7406<\/a> \u300d\u3092\u8a66\u3057\u3066\u307f\u308b\u3002<\/p>\n<p>\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3067\u306f\u5fc5\u305a\u5fc5\u8981\u3068\u306a\u308b\u6280\u8853\u3060\u3051\u306b\u8a18\u4e8b\u306e\u89e3\u8aac\u3082\u4e01\u5be7\u306b\u66f8\u304b\u308c\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<p>\u611f\u8b1d\u611f\u6fc0\uff01\u3067\u3059\u3002<\/p>\n<p>\u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b\u306b\u3042\u305f\u3063\u3066 JavaFX \u306b\u306f Task \u30af\u30e9\u30b9\u304c\u3042\u308a\u305d\u308c\u304c\u4fbf\u5229\u306b\u4f7f\u3048\u307e\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001Platform.runLater(() \u2013&gt; { \/\/ \u2026 });<\/p>\n<p>\u3067\u30b9\u30ec\u30c3\u30c9\u3092\u8d77\u3053\u3059\u3053\u3068\u304c\u3067\u304d\u3066\u3060\u3044\u305f\u3044 Swing \u3067\u3067\u304d\u3066\u3044\u305f\u3053\u3068\u306f\u53ef\u80fd\u306a\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u8a73\u3057\u304f\u306f\u4e0a\u8a18\u306e\u8a18\u4e8b\u3092\u3054\u89a7\u306b\u306a\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n<p>\u307e\u3060\u3001\u8a18\u4e8b\u3092\u8aad\u3093\u3060\u3060\u3051\u3067\u3044\u308d\u3044\u308d\u8a66\u3057\u3066\u306f\u3044\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u300c\u30b9\u30ec\u30c3\u30c9\u9593\u306e\u30c7\u30fc\u30bf\u4ea4\u63db\u300d\u304c\u9762\u767d\u305d\u3046\u3060\u3063\u305f\u306e\u3067<\/p>\n<p>\u5b9f\u969b\u306b\u52d5\u304b\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>NetBeans \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u305f\u306e\u3067\u975e\u5e38\u306b\u52a9\u304b\u308a\u307e\u3059\u3002<\/p>\n<p>\u305f\u3060\u3001\u30ed\u30fc\u30ab\u30eb\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3068\u3042\u307e\u308a\u91cd\u3044\u51e6\u7406\u306b\u306f\u306a\u3089\u306a\u3044\u306e\u3067\u89e3\u308a\u306b\u304f\u304b\u3063\u305f\u3002<\/p>\n<p>\u305d\u3053\u3067 JavaFX \u3068 openJDK \u306e\u30b5\u30a4\u30c8\u306e HTML \u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u3057\u3066\u8868\u793a\u3055\u305b\u308b\u3088\u3046\u306b\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u7d50\u5c40\u3001\u3042\u30fc\u3067\u3082\u306a\u3044\u3001\u3053\u30fc\u3067\u3082\u306a\u3044\u3068\u4e0b\u306e\u52d5\u753b\u306e\u3088\u3046\u306a\u3082\u306e\u304c\u3067\u304d\u3042\u304c\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002(^_^;)<\/p>\n<p><video controls height=\"486\" width=\"864\"><source type=\"video\/mp4\" src=\"http:\/\/yucchi.jp\/movie\/TryAsync\/TryAsync.mp4\">\u3042\u306a\u305f\u304c\u3054\u5229\u7528\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u306f\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/video><\/p>\n<p>\u304a\u307e\u3051\u306b\u81ea\u4fe1\u306e\u7121\u3044\u4e0d\u5b89\u306a\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3082\u8f09\u305b\u3066\u304a\u304d\u307e\u3059\u306e\u3067\u9593\u9055\u3044\u7b49\u3042\u308a\u307e\u3057\u305f\u3089\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n<p><pre title=\"TryAsync.java\">\r\npackage jp.yucchi.tryasinc;\r\n\r\nimport javafx.application.Application;\r\nimport javafx.fxml.FXMLLoader;\r\nimport javafx.scene.Parent;\r\nimport javafx.scene.Scene;\r\nimport javafx.stage.Stage;\r\n\r\npublic class TryAsync extends Application {\r\n    \r\n    @Override\r\n    public void start(Stage stage) throws Exception {\r\n        Parent root = FXMLLoader.load(getClass().getResource(\"FXMLDocument.fxml\"));\r\n        \r\n        Scene scene = new Scene(root);\r\n        stage.setTitle(\"\u975e\u540c\u671f\u51e6\u7406\");\r\n        stage.setScene(scene);\r\n        stage.show();\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n        launch(args);\r\n    }\r\n    \r\n}\r\n<\/pre>\n<pre title=\"FXMLDocumentController.java\">\r\npackage jp.yucchi.tryasinc;\r\n\r\nimport java.awt.Toolkit;\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputStreamReader;\r\nimport java.lang.management.ManagementFactory;\r\nimport java.net.URL;\r\nimport java.util.ResourceBundle;\r\nimport java.util.concurrent.BlockingQueue;\r\nimport java.util.concurrent.CompletableFuture;\r\nimport java.util.concurrent.ExecutorService;\r\nimport java.util.concurrent.Executors;\r\nimport java.util.concurrent.LinkedBlockingQueue;\r\nimport java.util.logging.Level;\r\nimport java.util.logging.Logger;\r\nimport javafx.animation.KeyFrame;\r\nimport javafx.animation.Timeline;\r\nimport javafx.application.Platform;\r\nimport javafx.beans.value.ObservableValue;\r\nimport javafx.concurrent.Task;\r\nimport javafx.concurrent.Worker;\r\nimport javafx.concurrent.WorkerStateEvent;\r\nimport javafx.event.ActionEvent;\r\nimport javafx.fxml.FXML;\r\nimport javafx.fxml.Initializable;\r\nimport javafx.scene.control.Button;\r\nimport javafx.scene.control.Label;\r\nimport javafx.scene.control.ProgressIndicator;\r\nimport javafx.scene.control.TextArea;\r\nimport javafx.scene.control.TitledPane;\r\nimport javafx.stage.Stage;\r\nimport javafx.stage.WindowEvent;\r\nimport javafx.util.Duration;\r\n\r\npublic class FXMLDocumentController implements Initializable {\r\n\r\n    @FXML\r\n    private Label state;\r\n\r\n    @FXML\r\n    private Button startButton;\r\n\r\n    @FXML\r\n    private Button cancelButton;\r\n\r\n    @FXML\r\n    private TitledPane text_1;\r\n\r\n    @FXML\r\n    private TitledPane text_2;\r\n\r\n    @FXML\r\n    private TextArea textArea_1;\r\n\r\n    @FXML\r\n    private TextArea textArea_2;\r\n\r\n    @FXML\r\n    private ProgressIndicator progressIndicator;\r\n\r\n    private final Works works = new Works();\r\n\r\n    private ExecutorService executor;\r\n\r\n    private final BlockingQueue<String> queue_javafx = new LinkedBlockingQueue<>();\r\n    private final BlockingQueue<String> queue_openJDK = new LinkedBlockingQueue<>();\r\n\r\n    private Timeline timer;\r\n\r\n    private CompletableFuture<String> javaFX;\r\n    private CompletableFuture<String> openJDK;\r\n    private CompletableFuture<Void> doAllWorks;\r\n\r\n    Task<Void> task;\r\n    private StringBuilder builder_javafx;\r\n    private StringBuilder builder_openJDK;\r\n\r\n    @FXML\r\n    public void handleStart(ActionEvent event) {\r\n        \r\n        textArea_1.clear();\r\n        textArea_2.clear();\r\n        startButton.setDisable(true);\r\n        cancelButton.setDisable(false);\r\n        int procs = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors();\r\n\r\n        executor = Executors.newFixedThreadPool(procs);\r\n\r\n        progressIndicator.setOpacity(1.0);\r\n\r\n        javaFX = CompletableFuture.supplyAsync(() -> works.showJavaFX(), executor);\r\n        openJDK = CompletableFuture.supplyAsync(() -> works.showOpenJDK(), executor);\r\n        doAllWorks = CompletableFuture.allOf(javaFX, openJDK);\r\n\r\n        task = new Task<Void>() {\r\n\r\n            @Override\r\n            protected Void call() throws Exception {\r\n\r\n                doAllWorks.thenRunAsync(() -> {\r\n                });\r\n                doAllWorks.get();\r\n\r\n                return null;\r\n\r\n            }\r\n\r\n        };\r\n        new Thread(task).start();\r\n\r\n        task.stateProperty().addListener((ObservableValue<? extends Worker.State> value, Worker.State oldState, Worker.State newState) -> {\r\n            state.setText(oldState.toString() + \" --> \" + newState.toString());\r\n        });\r\n\r\n        Platform.runLater(() -> {\r\n\r\n            task.setOnSucceeded((WorkerStateEvent e) -> {\r\n                progressIndicator.setOpacity(0.0);\r\n                System.out.println(\"Succeeded\");\r\n            });\r\n\r\n            task.setOnFailed((WorkerStateEvent e) -> {\r\n                System.out.println(\"Failed\");\r\n            });\r\n\r\n            task.setOnRunning((WorkerStateEvent e) -> {\r\n                System.out.println(\"Running\");\r\n            });\r\n\r\n            task.setOnCancelled((WorkerStateEvent e) -> {\r\n                System.out.println(\"Cancelled\");\r\n            });\r\n\r\n            task.setOnScheduled((WorkerStateEvent e) -> {\r\n                System.out.println(\"Scheduled\");\r\n            });\r\n\r\n            timer = new Timeline(\r\n                    new KeyFrame(\r\n                            Duration.millis(100), (ActionEvent e) -> {\r\n                                try {\r\n                                    builder_javafx = new StringBuilder();\r\n                                    builder_openJDK = new StringBuilder();\r\n\r\n                                    while (!queue_javafx.isEmpty()) {\r\n                                        String line = queue_javafx.take();\r\n                                        builder_javafx.append(line);\r\n                                        builder_javafx.append(\"\\n\");\r\n                                    }\r\n\r\n                                    while (!queue_openJDK.isEmpty()) {\r\n                                        String line = queue_openJDK.take();\r\n                                        builder_openJDK.append(line);\r\n                                        builder_openJDK.append(\"\\n\");\r\n                                    }\r\n\r\n                                    if (!(task.isCancelled())) {\r\n                                        textArea_1.appendText(builder_javafx.toString());\r\n                                        textArea_2.appendText(builder_openJDK.toString());\r\n                                    }\r\n                                } catch (InterruptedException ex) {\r\n                                }\r\n\r\n                                if (task.isDone() || task.isCancelled()) {\r\n                                    if (!(doAllWorks.isDone())) {\r\n                                        executor.shutdownNow();\r\n                                    }\r\n                                    \r\n                                    timer.stop();\r\n                                    textArea_1.home();\r\n                                    textArea_2.home();\r\n                                    queue_javafx.clear();\r\n                                    queue_openJDK.clear();\r\n                                    builder_javafx = null;\r\n                                    builder_openJDK = null;\r\n                                    startButton.setDisable(false);\r\n                                    cancelButton.setDisable(true);\r\n                                    Toolkit.getDefaultToolkit().beep();\r\n                                }\r\n\r\n                                if (doAllWorks.isDone()) {\r\n                                    executor.shutdown();\r\n                                }\r\n                            })\r\n            );\r\n            timer.setCycleCount(Timeline.INDEFINITE);\r\n            timer.play();\r\n\r\n        });\r\n    }\r\n\r\n    @FXML\r\n    public void handleCancel(ActionEvent event) {\r\n        if (task.isRunning()) {\r\n            task.cancel();         \r\n            textArea_1.appendText(\"\\n\\n<-----  \u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3057\u305f\u3002  ----->\");\r\n            textArea_2.appendText(\"\\n\\n<-----  \u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3057\u305f\u3002  ----->\");\r\n            progressIndicator.setOpacity(0.0);\r\n            if (!(doAllWorks.isDone())) {\r\n                executor.shutdownNow();\r\n            }\r\n        }\r\n    }\r\n\r\n    private class Works {\r\n\r\n        private String showJavaFX() {\r\n\r\n            BufferedReader in = null;\r\n            try {\r\n                in = new BufferedReader(new InputStreamReader(new URL(\"https:\/\/www.java.net\/\/community\/javafx\").openStream()));\r\n            } catch (IOException ex) {\r\n                Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);\r\n            }\r\n\r\n            in.lines().forEach(e -> {\r\n                queue_javafx.offer(e);\r\n            });\r\n\r\n            return null;\r\n\r\n        }\r\n\r\n        private String showOpenJDK() {\r\n\r\n            BufferedReader in = null;\r\n            try {\r\n                in = new BufferedReader(new InputStreamReader(new URL(\"http:\/\/openjdk.java.net\/\").openStream()));\r\n            } catch (IOException ex) {\r\n                Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);\r\n            }\r\n\r\n            in.lines().forEach(e -> {\r\n                queue_openJDK.offer(e);\r\n            });\r\n\r\n            return null;\r\n\r\n        }\r\n\r\n    }\r\n\r\n    public void setStage(Stage stage) {\r\n        stage.setOnCloseRequest((WindowEvent event) -> {\r\n            executor.shutdown();\r\n        });\r\n    }\r\n\r\n    @Override\r\n    public void initialize(URL url, ResourceBundle rb) {\r\n        cancelButton.setDisable(true);\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<pre title=\"FXMLDocument.fxml\">\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n\r\n<?import java.lang.*?>\r\n<?import java.util.*?>\r\n<?import javafx.geometry.*?>\r\n<?import javafx.scene.*?>\r\n<?import javafx.scene.control.*?>\r\n<?import javafx.scene.layout.*?>\r\n\r\n<AnchorPane id=\"AnchorPane\" prefHeight=\"548.0\" prefWidth=\"753.0\" xmlns:fx=\"http:\/\/javafx.com\/fxml\/1\" xmlns=\"http:\/\/javafx.com\/javafx\/2.2\" fx:controller=\"jp.yucchi.tryasinc.FXMLDocumentController\">\r\n  <children>\r\n    <HBox alignment=\"CENTER_RIGHT\" prefHeight=\"61.0\" prefWidth=\"725.0\" AnchorPane.leftAnchor=\"14.0\" AnchorPane.rightAnchor=\"14.0\" AnchorPane.topAnchor=\"14.0\">\r\n      <children>\r\n        <ProgressIndicator fx:id=\"progressIndicator\" opacity=\"0.0\" prefHeight=\"64.0\" prefWidth=\"68.0\" progress=\"-1.0\" visible=\"true\" \/>\r\n        <Label id=\"status\" fx:id=\"state\" alignment=\"CENTER\" prefHeight=\"30.0\" prefWidth=\"220.0\" text=\"\">\r\n          <HBox.margin>\r\n            <Insets right=\"5.0\" fx:id=\"x2\" \/>\r\n          <\/HBox.margin>\r\n        <\/Label>\r\n        <Button fx:id=\"cancelButton\" alignment=\"CENTER\" contentDisplay=\"LEFT\" mnemonicParsing=\"false\" onAction=\"#handleCancel\" prefHeight=\"30.0\" prefWidth=\"200.0\" text=\"CANCEL\" HBox.margin=\"$x2\" \/>\r\n        <Button fx:id=\"startButton\" mnemonicParsing=\"false\" onAction=\"#handleStart\" prefHeight=\"30.0\" prefWidth=\"200.0\" text=\"START\">\r\n          <HBox.margin>\r\n            <Insets right=\"3.0\" fx:id=\"x1\" \/>\r\n          <\/HBox.margin>\r\n        <\/Button>\r\n      <\/children>\r\n    <\/HBox>\r\n    <Accordion prefHeight=\"448.0\" prefWidth=\"725.0\" AnchorPane.bottomAnchor=\"14.0\" AnchorPane.leftAnchor=\"14.0\" AnchorPane.rightAnchor=\"14.0\" AnchorPane.topAnchor=\"86.0\">\r\n      <expandedPane>\r\n        <TitledPane fx:id=\"text_2\" animated=\"true\" text=\"openJDK\">\r\n          <content>\r\n            <AnchorPane id=\"Content\" minHeight=\"0.0\" minWidth=\"0.0\" prefHeight=\"180.0\" prefWidth=\"200.0\">\r\n              <children>\r\n                <TextArea fx:id=\"textArea_2\" prefHeight=\"400.0\" prefWidth=\"721.0\" wrapText=\"true\" AnchorPane.bottomAnchor=\"0.0\" AnchorPane.leftAnchor=\"0.0\" AnchorPane.rightAnchor=\"0.0\" AnchorPane.topAnchor=\"0.0\" \/>\r\n              <\/children>\r\n            <\/AnchorPane>\r\n          <\/content>\r\n        <\/TitledPane>\r\n      <\/expandedPane>\r\n      <panes>\r\n        <TitledPane fx:id=\"text_1\" animated=\"true\" prefHeight=\"435.0\" prefWidth=\"725.0\" text=\"JavaFX  Java.net\">\r\n          <content>\r\n            <AnchorPane id=\"Content\" minHeight=\"0.0\" minWidth=\"0.0\" prefHeight=\"180.0\" prefWidth=\"200.0\">\r\n              <children>\r\n                <TextArea fx:id=\"textArea_1\" prefHeight=\"402.0\" prefWidth=\"721.0\" wrapText=\"true\" AnchorPane.bottomAnchor=\"-2.0\" AnchorPane.leftAnchor=\"0.0\" AnchorPane.rightAnchor=\"0.0\" AnchorPane.topAnchor=\"0.0\" \/>\r\n              <\/children>\r\n            <\/AnchorPane>\r\n          <\/content>\r\n        <\/TitledPane>\r\n        <fx:reference source=\"text_2\" \/>\r\n      <\/panes>\r\n    <\/Accordion>\r\n  <\/children>\r\n<\/AnchorPane>\r\n\r\n<\/pre>\n<\/p>\n<p>\u3082\u3063\u3068\u3044\u308d\u3044\u308d\u904a\u3093\u3067\u307f\u305f\u3044\u3051\u3069\u89e3\u3089\u306a\u3044\u3053\u3068\u304c\u591a\u3059\u304e\u3066\u8abf\u3079\u308b\u6642\u9593\u304c\u8db3\u3089\u306a\u3044\u3002(&gt;_&lt;\uff61)<\/p>\n<p>\u4e00\u65e5\u306e\u6642\u9593\u304c\u79c1\u3060\u3051\uff13\uff10\u6642\u9593\u306b\u306a\u3089\u306a\u3044\u304b\u3068\u601d\u3046\u4eca\u65e5\u3053\u306e\u9803\u3067\u3059\u3002<\/p>\n<p>\u3042\u3063\u3001\u3082\u3046\u4e00\u3064\u304a\u307e\u3051\u306b Java 8 \u3092\u4f7f\u3063\u3066\u3044\u308b\u65b0\u3057\u3044\u7269\u597d\u304d\u306a\u4eba\u306f\u6c17\u304c\u5411\u3044\u305f\u3089\u305f\u3081\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><font size=\"5\"><b>Webstart:<\/b> <\/font><a href=\"http:\/\/yucchi.jp\/java\/java_web_start\/TryAsync\/TryAsinc.jnlp\"><font size=\"5\">click to launch this app as webstart<\/font><\/a><font size=\"5\"> \uff08Java 8 \u5b9f\u884c\u74b0\u5883\u5fc5\u9808\uff09<\/font><\/p>\n<div id=\"scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a07b4787-dea9-4269-a7a9-e868df5e8649\" class=\"wlWriterEditableSmartContent\" style=\"float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px\">Hatena \u30bf\u30b0: <a href=\"http:\/\/b.hatena.ne.jp\/t\/JavaFX\" rel=\"tag\">JavaFX<\/a><\/div>\n<div class='wp_social_bookmarking_light'>\n            <div class=\"wsbl_hatena\"><a href='\/\/b.hatena.ne.jp\/add?mode=confirm&url=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D1314&title=%E9%9D%9E%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/hatena.gif' alt='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' width='16' height='12' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D1314&t=%E9%9D%9E%E5%90%8C%E6%9C%9F%E5%87%A6%E7%90%86%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_google_plus_one\"><g:plusone size=\"medium\" annotation=\"none\" href=\"http:\/\/yucchi.jp\/blog\/?p=1314\" ><\/g:plusone><\/div>\n            <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"http:\/\/yucchi.jp\/blog\/?p=1314\" data-text=\"\u975e\u540c\u671f\u51e6\u7406\u3092\u8a66\u3057\u3066\u307f\u305f\u3002\" data-lang=\"ja\">Tweet<\/a><\/div>\n    <\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>JavaFX \u3092\u306f\u3058\u3081\u3066\u304b\u3089\u3044\u308d\u3044\u308d\u89e3\u3089\u306a\u3044\u3053\u3068\u304c\u3042\u3063\u3066\u601d\u3046\u3088\u3046\u306b\u9032\u307e\u306a\u3044\u3002 \uff19\u6708\u3001\uff11\uff10\u6708\u306f\u500b\u4eba\u7684\u306b\u3044\u308d\u3044\u308d\u9762\u5012\u306a\u5b63\u7bc0\u3067\u3042\u3063\u3066\u305d\u306e\u3046\u3061\u306b\u30af\u30ea\u30b9\u30de\u30b9\u3084\u304a\u6b63\u6708\u3068\u5fd9\u3057\u304f\u306a\u308b\u3002 \u305d\u308c\u3067\u3082\u5c11\u3057\u3060\u3051\u3067\u3082\uff01 \u3068\u4eca\u56de\u306f\u300cJavaFX 2\u3067\u306f\u3058\u3081\u308b\u3001GUI\u958b\u767a\u3000\u7b2c14\u56de \u975e\u540c\u671f\u51e6\u7406 \u300d\u3092\u8a66\u3057\u3066\u307f\u308b\u3002 \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3067\u306f\u5fc5\u305a\u5fc5\u8981\u3068\u306a\u308b\u6280\u8853\u3060\u3051\u306b\u8a18\u4e8b\u306e\u89e3\u8aac\u3082\u4e01\u5be7\u306b\u66f8\u304b\u308c\u3066\u3044\u307e\u3057\u305f\u3002 \u611f\u8b1d\u611f\u6fc0\uff01\u3067\u3059\u3002 \u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b\u306b\u3042\u305f\u3063\u3066 JavaFX \u306b\u306f Task \u30af\u30e9\u30b9\u304c\u3042\u308a\u305d\u308c\u304c\u4fbf\u5229\u306b\u4f7f\u3048\u307e\u3059\u3002 \u307e\u305f\u3001Platform.runLater(() \u2013&gt; { \/\/ \u2026 }); \u3067\u30b9\u30ec\u30c3\u30c9\u3092\u8d77\u3053\u3059\u3053\u3068\u304c\u3067\u304d\u3066\u3060\u3044\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[21],"class_list":["post-1314","post","type-post","status-publish","format-standard","hentry","category-javafx","tag-javafx"],"_links":{"self":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1314"}],"version-history":[{"count":2,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1314\/revisions"}],"predecessor-version":[{"id":1316,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1314\/revisions\/1316"}],"wp:attachment":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1314"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}