{"id":242,"date":"2013-07-31T22:25:58","date_gmt":"2013-07-31T13:25:58","guid":{"rendered":"http:\/\/www.rocher.kyoto.jp\/araburu\/?p=242"},"modified":"2013-08-01T00:38:08","modified_gmt":"2013-07-31T15:38:08","slug":"javafx%e3%81%a8websocket%e3%82%92%e9%80%a3%e6%90%ba%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8bon-glassfish4-0-%e3%81%9d%e3%81%ae2","status":"publish","type":"post","link":"https:\/\/www.rocher.kyoto.jp\/arbr\/?p=242","title":{"rendered":"JavaFX\u3068Websocket\u3092\u9023\u643a\u3057\u3066\u307f\u308b(On Glassfish4.0) \u305d\u306e2"},"content":{"rendered":"<p><a href=\"https:\/\/www.rocher.kyoto.jp\/araburu\/?p=192\">\u524d\u56de<\/a>\u304b\u3089\u30b9\u30ec\u30c3\u30c9\u5468\u308a\u306e\u5236\u7d04\u4e8b\u9805\u306b\u304b\u304b\u3063\u3066\u3046\u307e\u304f\u3044\u3063\u3066\u3044\u306a\u3044\u3051\u3069\u72b6\u6cc1\u306e\u6574\u7406\u3002<\/p>\n<p>\u3084\u308d\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u306f\u3001\u524d\u56de\u306f\u8868\u306e\u4e2d\u306bWebsocke\u3067\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3092\u53cd\u6620\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u305f\u3082\u306e\u3092\u3001Label\u306b\u5909\u66f4\u3057\u3066\u8868\u793a\u3057\u3088\u3046\u3068\u3044\u3046\u3082\u306e\u3002<\/p>\n<p><a href=\"https:\/\/www.rocher.kyoto.jp\/araburu\/wp-content\/uploads\/2013\/07\/1.png\"><img loading=\"lazy\" decoding=\"async\" alt=\"1\" src=\"https:\/\/www.rocher.kyoto.jp\/araburu\/wp-content\/uploads\/2013\/07\/1-300x280.png\" width=\"300\" height=\"280\" \/><\/a><\/p>\n<p>\u8d77\u304d\u3066\u3044\u308b\u30a8\u30e9\u30fc\u306fJavaFX\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092JavaFX\u914d\u4e0b\u4ee5\u5916\u306e\u30b9\u30ec\u30c3\u30c9\u3067\u547c\u3093\u3067\u306f\u3044\u3051\u306a\u3044\u3068\u3044\u3046\u3082\u306e\u3002<\/p>\n<p>\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u306f\u4ee5\u4e0b\u3002<\/p>\n<pre><span style=\"color: #ff0000;\">java.lang.IllegalStateException: Not on FX application thread; currentThread = Grizzly-worker<span style=\"color: #000000;\">(1)<\/span><\/span>\r\n\u30a8\u30e9\u30fc\u3067\u3059\uff1ae9e8fea3-96b6-46be-ad8e-a393e1499784\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:237)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:397)\r\n\u00a0\u00a0 \u00a0at javafx.scene.Parent$1.onProposedChange(Parent.java:245)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.collections.VetoableObservableList.setAll(VetoableObservableList.java:90)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.collections.ObservableListWrapper.setAll(ObservableListWrapper.java:314)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:602)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.scene.control.skin.LabeledSkinBase.handleControlPropertyChanged(LabeledSkinBase.java:209)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.scene.control.skin.SkinBase$3.changed(SkinBase.java:282)\r\n\u00a0\u00a0 \u00a0at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:107)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:196)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.fireValueChangedEvent(StringPropertyBase.java:121)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:128)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.access$100(StringPropertyBase.java:67)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase$Listener.invalidated(StringPropertyBase.java:236)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:155)\r\n\u00a0\u00a0 \u00a0at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.fireValueChangedEvent(StringPropertyBase.java:121)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.markInvalid(StringPropertyBase.java:128)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:161)\r\n\u00a0\u00a0 \u00a0at javafx.beans.property.StringPropertyBase.set(StringPropertyBase.java:67)\r\n\u00a0\u00a0 \u00a0at jp.co.epea.firstfxclient.ObjData.setDataValue(ObjData.java:26)\r\n\u00a0\u00a0 \u00a0at jp.co.epea.firstfxclient.WSClient.onMessage(WSClient.java:30)\r\n\u00a0\u00a0 \u00a0at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\u00a0\u00a0 \u00a0at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)\r\n\u00a0\u00a0 \u00a0at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\u00a0\u00a0 \u00a0at java.lang.reflect.Method.invoke(Method.java:606)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:431)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.core.AnnotatedEndpoint.access$100(AnnotatedEndpoint.java:83)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.core.AnnotatedEndpoint$WholeHandler$1.onMessage(AnnotatedEndpoint.java:518)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.core.SessionImpl.notifyMessageHandlers(SessionImpl.java:391)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.core.EndpointWrapper.onMessage(EndpointWrapper.java:498)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.container.grizzly.GrizzlyClientSocket.onMessage(GrizzlyClientSocket.java:393)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.websockets.frametypes.TextFrameType.respond(TextFrameType.java:66)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.websockets.DataFrame.respond(DataFrame.java:102)\r\n\u00a0\u00a0 \u00a0at org.glassfish.tyrus.container.grizzly.WebSocketFilter.handleRead(WebSocketFilter.java:300)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:837)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)\r\n\u00a0\u00a0 \u00a0at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)\r\n\u00a0\u00a0 \u00a0at java.lang.Thread.run(Thread.java:724)<\/pre>\n<p>&nbsp;<\/p>\n<p>\u73fe\u5728\u306e\u66f8\u304d\u65b9\uff08<a href=\"https:\/\/www.rocher.kyoto.jp\/araburu\/wp-content\/uploads\/2013\/07\/0731.zip\">\u30bd\u30fc\u30b9<\/a>\uff09\u3067\u304b\u304b\u3063\u3066\u3044\u308b\u5834\u6240\u306f\u3001ClientManager#connectToServer\u3067Grizzly\u306e\u30b9\u30ec\u30c3\u30c9\u304c\u305f\u3063\u3066\u3044\u3066\u3001<\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 protected Task createTask() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Task&lt;Void&gt; task = new Task&lt;Void&gt;() {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @Override\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 protected Void call() throws Exception {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 URI clientURI = new URI(\"ws:\/\/localhost:8080\/first\/hello\/\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #ff0000;\">ClientManager cliContainer = org.glassfish.tyrus.client.ClientManager.createClient();<\/span>\r\n<span style=\"color: #ff0000;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cliContainer.connectToServer(new WSClient(data), clientURI);<\/span>\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (DeploymentException\u00a0 ex) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Logger.getLogger(SampleController.class.getName()).log(Level.SEVERE, null, ex);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return null;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return task;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/pre>\n<p>\u305d\u306e\u4e2d\u3067\u52d5\u3044\u3066\u3044\u308bOnmessege\u3067\u5024\u3092\u66f8\u304d\u63db\u3048\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068<\/p>\n<pre>    ObjData data;\r\n\r\n    @OnMessage\r\n\u00a0\u00a0\u00a0 public void onMessage(String message) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (message.length() == 0) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(data.getDataValue());\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #ff0000;\">data.setDataValue(message);\/\/<\/span><span style=\"color: #ff0000;\">\u4e0b\u306e\u81ea\u5206\u3067\u4f5c\u3063\u305f\u30e1\u30bd\u30c3\u30c9<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(data.getDataValue());\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\/\/ ObjData\u306e\u4e2d\r\n    private SimpleStringProperty dataValue;\r\n\u00a0\u00a0\u00a0 public void setDataValue(String dataValue) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dataValueProperty().set(dataValue);\r\n\u00a0\u00a0 \u00a0}<\/pre>\n<p>\u6539\u3081\u3066\u524d\u56de\u30b5\u30f3\u30d7\u30eb\u306b\u3057\u305f\u30bd\u30fc\u30b9\u3092\u898b\u76f4\u3059\u3068ObservableList\u306e\u5909\u66f4\u3092\u30c8\u30ea\u30ac\u30fc\u306b\u3057\u305f\u901a\u77e5\u6a5f\u80fd\u3092\u3046\u307e\u304f\u4f7f\u3063\u3066\u3044\u308b\u307f\u305f\u3044\u3002<\/p>\n<p>\u306a\u304a\u3001\u81ea\u524d\u3067\u30b9\u30ec\u30c3\u30c9\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u5834\u5408\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f<a href=\"http:\/\/fxexperience.com\/2011\/07\/worker-threading-in-javafx-2-0\/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+fxexperience+%28FX+Experience%29&amp;utm_content=Google+Reader\">\u3053\u3061\u3089<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u56de\u304b\u3089\u30b9\u30ec\u30c3\u30c9\u5468\u308a\u306e\u5236\u7d04\u4e8b\u9805\u306b\u304b\u304b\u3063\u3066\u3046\u307e\u304f\u3044\u3063\u3066\u3044\u306a\u3044\u3051\u3069\u72b6\u6cc1\u306e\u6574\u7406\u3002 \u3084\u308d\u3046\u3068\u3057\u3066\u3044\u308b\u3053\u3068\u306f\u3001\u524d\u56de\u306f\u8868\u306e\u4e2d\u306bWebsocke\u3067\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3092\u53cd\u6620\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u305f\u3082\u306e\u3092\u3001Label\u306b\u5909\u66f4\u3057\u3066\u8868\u793a\u3057\u3088\u3046\u3068\u3044\u3046\u3082\u306e\u3002  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[71,7,6],"class_list":["post-242","post","type-post","status-publish","format-standard","hentry","category-javafx","tag-javafx","tag-jsr-356","tag-websocket"],"_links":{"self":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=242"}],"version-history":[{"count":4,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/242\/revisions"}],"predecessor-version":[{"id":247,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=\/wp\/v2\/posts\/242\/revisions\/247"}],"wp:attachment":[{"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rocher.kyoto.jp\/arbr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}