Java fej nélküli mód
1. Áttekintés
Időnként meg kell grafikus alapú alkalmazásokkal dolgozhat Java-ban tényleges kijelző, billentyűzet vagy egér nélkülmondjuk szerveren vagy tárolón. Ebben a rövid bemutatóban megismerjük a Java fej nélküli módját, hogy kezeljük ezt a forgatókönyvet. Megvizsgáljuk azt is, hogy mit tehetünk fej nélküli módban és mit nem. Sokféleképpen állíthatjuk be kifejezetten a fej nélküli módot a Java-ban: Ha a környezet valóban fejetlen, a JVM implicit módon tudatában lenne annak. Néhány forgatókönyvben azonban vannak finom különbségek. Rövidesen meglátjuk őket. A fej nélküli környezetben futó felhasználói felület-összetevők tipikus használati esete lehet egy képátalakító alkalmazás. Bár a képfeldolgozáshoz grafikus adatokra van szüksége, a megjelenítésre valójában nincs szükség. Az alkalmazást futtathatja egy szerveren, és konvertálhatja a hálózaton keresztül mentett vagy elküldött fájlokat egy másik gépre megjelenítésre. Lássuk ezt működés közben. Először a fej nélküli módot kapcsoljuk be programozottan a JUnit osztály: A megfelelő beállítás érdekében használhatjuk java.awt.GraphicsEnvironment#is Fejetlen: Nem szabad megfeledkeznünk arról, hogy a fenti teszt fejetlen környezetben akkor is sikeres lesz, ha az üzemmód nincs kifejezetten bekapcsolva. Most nézzük meg az egyszerű képátalakítónkat: Ebben a következő mintában láthatjuk, hogy az összes betűtípusra vonatkozó információ, beleértve a betűmérőket is, rendelkezésünkre áll: Vannak olyan alkatrészek, amelyekhez perifériás eszközök szükségesek, és fejetlen üzemmódban nem működnek. Dobnak egy HeadlessException ha nem interaktív környezetben használják: Ez a teszt azt állítja, hogy a Keret fejetlen módban valóban dobni fog a HeadlessException: Alapszabályként ne feledje, hogy a legfelső szintű összetevők, mint pl Keret és Gomb mindig interaktív környezetre van szükségük, és ezt a kivételt el fogja vetni. Azonban, helyrehozhatatlannak fogják dobni Hiba ha a fej nélküli mód nincs kifejezetten beállítva. Ezen a ponton kérdéseket tehetünk fel magunknak - de mi van, ha van GUI-összetevõkkel ellátott kódunk mindkét típusú környezetben való futtatáshoz - egy fejlécû gép és egy fej nélküli forráskód-elemzõ szerver? A fenti példákban azt láttuk, hogy a nehézsúlyú alkatrészek nem fognak működni a szerveren, és kivételt fognak hozni. Tehát feltételes megközelítést alkalmazhatunk: Ezzel a mintával létrehozhatunk egy rugalmas alkalmazást, amely a környezethez igazítja viselkedését. Különböző kódmintákkal láttuk, hogy a fejetlen mód hogyan és miért java-ban. Ez a technikai cikk teljes listát tartalmaz arról, hogy mit lehet teljesíteni fej nélküli üzemmódban. Szokás szerint a fenti példák forráskódja elérhető a GitHubon.2. Fej nélküli mód beállítása
3. Példák a felhasználói felület összetevőire fej nélküli módban
@ Mielőtt nyilvános void setUpHeadlessMode () {System.setProperty ("java.awt.headless", "true"); }
@Test public void whenSetUpSuccessful_thenHeadlessIsTrue () {assertThat (GraphicsEnvironment.isHeadless ()). IsTrue (); }
@Test public void whenHeadlessMode_thenImagesWork () {logikai eredmény = hamis; próbáld meg (InputStream inStream = HeadlessModeUnitTest.class.getResourceAsStream (IN_FILE); FileOutputStream outStream = new FileOutputStream (OUT_FILE)) {BufferedImage inputImage = ImageIO.read (inStream); eredmény = ImageIO.write (inputImage, FORMAT, outStream); } assertThat (eredmény) .isTrue (); }
@Test public void whenHeadless_thenFontsWork () {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Karakterláncok [] = ge.getAvailableFontFamilyNames (); assertThat (betűtípusok) .isNotEmpty (); Font font = new Font (betűtípusok [0], Betűtípus.BOLD, 14); FontMetrics fm = (új Canvas ()). GetFontMetrics (font); assertThat (fm.getHeight ()) isGreaterThan (0); assertThat (fm.getAscent ()). Nagyobb (0); assertThat (fm.getDescent ()) isGreaterThan (0); }
4. HeadlessException
Kivétel a "main" szálban java.awt.HeadlessException a java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:204) címen a java.awt.Window. (Window.java:536) oldalon java.awt.Frame. (Frame. java: 420)
@Test public void whenHeadlessmode_thenFrameThrowsHeadlessException () {assertThatExceptionOfType (HeadlessException.class) .isThrownBy (() -> {Frame frame = new Frame (); frame.setVisible (true); frame.setSize (120, 120); }
5. A nehézsúlyú alkatrészek megkerülése fej nélküli módban
public void FlexibleApp () {if (GraphicsEnvironment.isHeadless ()) {System.out.println ("Hello World"); } else {JOptionPane.showMessageDialog (null, "Hello World"); }}
6. Következtetés