{"id":294,"date":"2022-10-11T10:11:50","date_gmt":"2022-10-11T10:11:50","guid":{"rendered":"https:\/\/www.japplis.com\/news\/?p=294"},"modified":"2022-10-11T11:13:48","modified_gmt":"2022-10-11T11:13:48","slug":"paving-the-on-ramp-day-2-swingutilities-showinframe","status":"publish","type":"post","link":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/","title":{"rendered":"Paving the on-ramp &#8211; Day 2 &#8211; SwingUtilities.showInFrame"},"content":{"rendered":"\n<p>There is recently an increased interest to ease the learning curve of Java for students on Day 1 of class. <a href=\"https:\/\/twitter.com\/BrianGoetz\" target=\"_blank\" rel=\"noreferrer noopener\">Brian Goetz<\/a> (the architect of Java) <a href=\"https:\/\/openjdk.org\/projects\/amber\/design-notes\/on-ramp\" target=\"_blank\" rel=\"noreferrer noopener\">made a proposal<\/a> to eliminate some code. My proposition is a (independent) continuation to ease the learning of Java.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Day 1 (as proposed by Brian Goetz)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><code>class HelloWord {<br>    public static void main(String&#91;] args) {<br>        System.out.println(\"Hello World\");<br>    }<br>}<\/code><\/code><\/pre>\n\n\n\n<p>Simplifies to<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>void main() {<br>    println(\"Hello World\");<br>}<\/code><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Day 2 (as proposed by me &#8211; Anthony Goubard)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import javax.swing.*;\n\nvoid main() {\n    SwingUtilities.invokeAndWait(() -&gt; {\n     \tJFrame frame = new JFrame(\"Test\");\n       \tframe.add(new JLabel(\"Hello World\"));\n       \tframe.pack();\n       \tframe.setLocationRelativeTo(null);\n       \tframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n       \tframe.setVisible(true);\n    }\n}<\/code><\/pre>\n\n\n\n<p>Simplifies to<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import javax.swing.*;\n\nvoid main() {\n    SwingUtilities.showInFrame(\"Test\", () -&gt; new JLabel(\"Hello World\"));\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">The on-ramp<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>No need to understand the concept of the Event Dispatch Thread (EDT) where UI operations should be done<\/li><li>No need to understand yet the concept of laying out components (<code>pack()<\/code>)<\/li><li>No need to know the class <code>JFrame<\/code> and 5 of its methods<\/li><li>The focus is more on the intention of the program: Showing the text &#8220;Hello World&#8221; in a window with title &#8220;Test&#8221;<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Other benefits (than the on-ramp)<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Cleaner Stack overflow <a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/swing\">Swing examples<\/a>.<\/li><li>Ease of use with JShell.<\/li><li>Event Dispatch Thread detection. Let&#8217;s face, it when it&#8217;s a small program, a lot of people forget to do the UI in the EDT.<\/li><li>Single Java execution <code>java HelloWorld.java<\/code> would require less code.<\/li><li>No language or compiler change needed.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Proposed implementation<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/\/ public domain license - Should be in SwingUtilities\n    \/**\n     * Show a window containing the provided component.\n     * The window will exit the application on close.\n     *\n     * @param title the title of the window\n     * @param panel the supplier for the component to show in the window\n     * @return the created component\n     *\/\n    public static &lt;T extends JComponent&gt; T showInFrame(String title, Supplier&lt;T&gt; panel) {\n        Function&lt;T, JFrame&gt; frameSupplier = createdPanel -&gt; {\n            JFrame frame = new JFrame(title);\n            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n            frame.add(createdPanel);\n            frame.setLocationRelativeTo(null);\n            frame.pack();\n            frame.setVisible(true);\n            return frame;\n        };\n        boolean isInEDT = SwingUtilities.isEventDispatchThread();\n        if (isInEDT) {\n            T createdPanel = panel.get();\n            frameSupplier.apply(createdPanel);\n            return createdPanel;\n        } else {\n            List&lt;T&gt; result = new ArrayList&lt;&gt;();\n            List&lt;Exception&gt; exception = new ArrayList&lt;&gt;();\n            try {\n                SwingUtilities.invokeAndWait(() -&gt; {\n                    try {\n                        T createdPanel = panel.get();\n                        frameSupplier.apply(createdPanel);\n                        result.add(createdPanel);\n                    } catch (Exception ex) {\n                        exception.add(ex);\n                    }\n                });\n            } catch (InterruptedException | InvocationTargetException ex) {\n                throw new RuntimeException(ex);\n            }\n            if (!exception.isEmpty()) {\n                Exception ex = exception.get(0);\n                if (ex instanceof RuntimeException) throw (RuntimeException) ex;\n                else throw new RuntimeException(ex);\n            }\n            return result.get(0);\n        }\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Advanced<\/h3>\n\n\n\n<p>The created component is returned so you can use it further in your code. With the returned component, you also have access to the created <code>JFrame<\/code> by using <code>SwingUtilities.windowForComponent<\/code> method.<\/p>\n\n\n\n<p>I&#8217;ve decided to wrap the exception in a <code>RuntimeException<\/code> is there is an error during the creation of the component. So you get a similar behavior whether you call this method from the Event Dispatch Thread or not.<\/p>\n\n\n\n<p>Even though the example is with a <code>JLabel<\/code>, I would expect most of the usage will be passing a <code>Suppier&lt;JPanel&gt;<\/code> and probably like <code>MyPanel::new<\/code> as it&#8217;s quite common in Swing to have classes extending <code>JPanel<\/code>.<\/p>\n\n\n\n<p>Another possibility would be to return <code>void<\/code> and use <code>SwingUtilities.invokeLater()<\/code> method. This way no need to do all the exception code and no need to have <code>List&lt;T&gt; result<\/code>. Comment in the reddit discussion if it&#8217;s your preference (Link below).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">My history<\/h3>\n\n\n\n<p>Back when I was a student (1995), I remember it took me half a day to try to show a window on Windows 95 as I was using Borland C++. I copied the code word by word from a book as otherwise it wouldn&#8217;t work. A few days later while asking a  teacher if we could have an interesting project, he told us &#8220;Sun Microsystem has just released a new language, it&#8217;s in alpha version but let&#8217;s do a project with it.&#8221;. I took the language, typed <code>Frame frame = new Frame(\"Test\"); frame.show();<\/code> and voil\u00e0! It was a whoa moment where I realized I would spend a lot of time with this language \ud83d\ude03.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Quite often, you see in conferences presentations about &#8220;what&#8217;s new in Java xx&#8221;, that we may forget that for some people everything is new. Paving the on-ramp doesn&#8217;t have to be a compiler or language change, it could be methods, documentation, videos, &#8230;<\/p>\n\n\n\n<p>I think the next step would be to create a RFE ticket in the <a rel=\"noreferrer noopener\" href=\"https:\/\/bugs.openjdk.org\/projects\/JDK\/\" target=\"_blank\">JDK bug system<\/a>, but first I will wait for comments in the reddit discussion.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Follow the <a href=\"https:\/\/www.reddit.com\/r\/java\/comments\/y16c4p\/paving_the_onramp_day_2_swingutilitiesshowinframe\/\" target=\"_blank\" rel=\"noreferrer noopener\">discussion on reddit<\/a><\/li><li>My <a rel=\"noreferrer noopener\" href=\"https:\/\/twitter.com\/Japplis\" target=\"_blank\">twitter<\/a><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"518\" src=\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png\" alt=\"\" class=\"wp-image-304\" srcset=\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png 1024w, https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-300x152.png 300w, https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-768x389.png 768w, https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1.png 1197w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Hello World in Java, the difference between now and what it could be<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>There is recently an increased interest to ease the learning curve of Java for students on Day 1 of class. Brian Goetz (the architect of Java)&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[75,103],"class_list":["post-294","post","type-post","status-publish","format-standard","hentry","category-java","tag-java","tag-swing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Paving the on-ramp - Day 2 - SwingUtilities.showInFrame - Japplis news<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Paving the on-ramp - Day 2 - SwingUtilities.showInFrame - Japplis news\" \/>\n<meta property=\"og:description\" content=\"There is recently an increased interest to ease the learning curve of Java for students on Day 1 of class. Brian Goetz (the architect of Java)&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\" \/>\n<meta property=\"og:site_name\" content=\"Japplis news\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-11T10:11:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-11T11:13:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Japplis\" \/>\n<meta name=\"twitter:site\" content=\"@Japplis\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.japplis.com\/news\/#\/schema\/person\/e462a4d39ca527cbd65c2f065968cbdb\"},\"headline\":\"Paving the on-ramp &#8211; Day 2 &#8211; SwingUtilities.showInFrame\",\"datePublished\":\"2022-10-11T10:11:50+00:00\",\"dateModified\":\"2022-10-11T11:13:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\"},\"wordCount\":526,\"publisher\":{\"@id\":\"https:\/\/www.japplis.com\/news\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png\",\"keywords\":[\"java\",\"swing\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\",\"url\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\",\"name\":\"Paving the on-ramp - Day 2 - SwingUtilities.showInFrame - Japplis news\",\"isPartOf\":{\"@id\":\"https:\/\/www.japplis.com\/news\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png\",\"datePublished\":\"2022-10-11T10:11:50+00:00\",\"dateModified\":\"2022-10-11T11:13:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage\",\"url\":\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1.png\",\"contentUrl\":\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1.png\",\"width\":1197,\"height\":606},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.japplis.com\/news\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Paving the on-ramp &#8211; Day 2 &#8211; SwingUtilities.showInFrame\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.japplis.com\/news\/#website\",\"url\":\"https:\/\/www.japplis.com\/news\/\",\"name\":\"Japplis news\",\"description\":\"The latest news about the apps of Japplis\",\"publisher\":{\"@id\":\"https:\/\/www.japplis.com\/news\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.japplis.com\/news\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.japplis.com\/news\/#organization\",\"name\":\"Japplis\",\"url\":\"https:\/\/www.japplis.com\/news\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.japplis.com\/news\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/09\/cropped-japplis512.png\",\"contentUrl\":\"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/09\/cropped-japplis512.png\",\"width\":512,\"height\":512,\"caption\":\"Japplis\"},\"image\":{\"@id\":\"https:\/\/www.japplis.com\/news\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/Japplis\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.japplis.com\/news\/#\/schema\/person\/e462a4d39ca527cbd65c2f065968cbdb\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.japplis.com\/news\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/74b2d48dc136cf856e8f9b61ade1a5147326496c3377b91a9e155f2dade04947?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/74b2d48dc136cf856e8f9b61ade1a5147326496c3377b91a9e155f2dade04947?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\/\/www.japplis.com\/news\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Paving the on-ramp - Day 2 - SwingUtilities.showInFrame - Japplis news","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/","og_locale":"en_US","og_type":"article","og_title":"Paving the on-ramp - Day 2 - SwingUtilities.showInFrame - Japplis news","og_description":"There is recently an increased interest to ease the learning curve of Java for students on Day 1 of class. Brian Goetz (the architect of Java)&#46;&#46;&#46;","og_url":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/","og_site_name":"Japplis news","article_published_time":"2022-10-11T10:11:50+00:00","article_modified_time":"2022-10-11T11:13:48+00:00","og_image":[{"url":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png","type":"","width":"","height":""}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@Japplis","twitter_site":"@Japplis","twitter_misc":{"Written by":"admin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#article","isPartOf":{"@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/"},"author":{"name":"admin","@id":"https:\/\/www.japplis.com\/news\/#\/schema\/person\/e462a4d39ca527cbd65c2f065968cbdb"},"headline":"Paving the on-ramp &#8211; Day 2 &#8211; SwingUtilities.showInFrame","datePublished":"2022-10-11T10:11:50+00:00","dateModified":"2022-10-11T11:13:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/"},"wordCount":526,"publisher":{"@id":"https:\/\/www.japplis.com\/news\/#organization"},"image":{"@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage"},"thumbnailUrl":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png","keywords":["java","swing"],"articleSection":["Java"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/","url":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/","name":"Paving the on-ramp - Day 2 - SwingUtilities.showInFrame - Japplis news","isPartOf":{"@id":"https:\/\/www.japplis.com\/news\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage"},"image":{"@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage"},"thumbnailUrl":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1-1024x518.png","datePublished":"2022-10-11T10:11:50+00:00","dateModified":"2022-10-11T11:13:48+00:00","breadcrumb":{"@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#primaryimage","url":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1.png","contentUrl":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/10\/helloworld-ant-commander-1.png","width":1197,"height":606},{"@type":"BreadcrumbList","@id":"https:\/\/www.japplis.com\/news\/paving-the-on-ramp-day-2-swingutilities-showinframe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.japplis.com\/news\/"},{"@type":"ListItem","position":2,"name":"Paving the on-ramp &#8211; Day 2 &#8211; SwingUtilities.showInFrame"}]},{"@type":"WebSite","@id":"https:\/\/www.japplis.com\/news\/#website","url":"https:\/\/www.japplis.com\/news\/","name":"Japplis news","description":"The latest news about the apps of Japplis","publisher":{"@id":"https:\/\/www.japplis.com\/news\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.japplis.com\/news\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.japplis.com\/news\/#organization","name":"Japplis","url":"https:\/\/www.japplis.com\/news\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.japplis.com\/news\/#\/schema\/logo\/image\/","url":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/09\/cropped-japplis512.png","contentUrl":"https:\/\/www.japplis.com\/news\/wp-content\/uploads\/2022\/09\/cropped-japplis512.png","width":512,"height":512,"caption":"Japplis"},"image":{"@id":"https:\/\/www.japplis.com\/news\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/Japplis"]},{"@type":"Person","@id":"https:\/\/www.japplis.com\/news\/#\/schema\/person\/e462a4d39ca527cbd65c2f065968cbdb","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.japplis.com\/news\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/74b2d48dc136cf856e8f9b61ade1a5147326496c3377b91a9e155f2dade04947?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/74b2d48dc136cf856e8f9b61ade1a5147326496c3377b91a9e155f2dade04947?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/www.japplis.com\/news\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/posts\/294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/comments?post=294"}],"version-history":[{"count":12,"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/posts\/294\/revisions"}],"predecessor-version":[{"id":308,"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/posts\/294\/revisions\/308"}],"wp:attachment":[{"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/media?parent=294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/categories?post=294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.japplis.com\/news\/wp-json\/wp\/v2\/tags?post=294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}