HDMI Ausgänge mit Java programmieren?

Diskutiere HDMI Ausgänge mit Java programmieren? im Spiele- und Multimedia-Programmierung Forum; Howdy, Ich habe mal ein bischen rumgespielt: package info.junius.test; import java.awt.Desktop; import java.awt.GraphicsConfiguration; import...

  1. AndyJ
    AndyJ Mitglied
    Howdy,
    Ich habe mal ein bischen rumgespielt:

    Code (Java):

    package info.junius.test;

    import java.awt.Desktop;
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.Rectangle;
    import java.io.File;
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;

    import javax.swing.JFrame;
    import javax.swing.JLabel;

    public class DesktopScreens {

     public static void main(String[] args) {
      GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
      if (!env.isHeadless()) {
       GraphicsDevice[] devices = env.getScreenDevices();
       int p = 0;
       for (GraphicsDevice gd : devices) {
        System.out.println(gd);
        System.out.println(gd.getIDstring());
        System.out.println(gd.getDisplayMode().getWidth() + "/" + gd.getDisplayMode().getHeight());
       
        placeFramesOn(gd, p);
        ++p;
       }
      }
     }
     
     private static void placeFramesOn(GraphicsDevice device, int p) {
      GraphicsConfiguration[] gc = device.getConfigurations();
      for (int i = 0; i < gc.length; ++i) {
       System.out.println(gc[i]);
       JFrame frame = new JFrame(device.getDefaultConfiguration());
       JLabel label = new JLabel(device.toString());
       Rectangle gcBounds = gc[i].getBounds();
       int xoffs = gcBounds.x;
       int yoffs = gcBounds.y;
       frame.getContentPane().add(label);
       frame.setLocation(i * 100 + xoffs, i*150 + yoffs);
       frame.setSize(200, 80);
       frame.setVisible(true);
       // die Idee: das Programmfenster geht da auf, wo der Frame den Focus hat
       // Problem: es funktioniert nicht
       // Anderer Ansatz: nutze die Process API to run shell script that does the job
       frame.requestFocusInWindow();
       if (p == 0) {
        try {
         Desktop.getDesktop().browse(new URI("http://example.com"));
         Thread.sleep(5000);
        } catch (IOException | URISyntaxException | InterruptedException  e) {
         e.printStackTrace();
        }
       }
       if (p == 1) {
        try {
         Desktop.getDesktop().edit(new File("test.txt"));
         Thread.sleep(5000);
        } catch (IOException | InterruptedException e) {
         e.printStackTrace();
        }
       }
       
      }

     }
     

    }
     
    Ich hatte gedacht, die Fenster die man da oeffned waeren an den JFrame gebunden. Ist aber leider nicht der Fall. Nun koennte man stattdessen Batchfiles oder Shell-scripte schreiben, die die noetigen Parameter uebernehmen und dann die Programme oeffnen oder schon geoeffnete and den richtigen Platz verschieben. Es gibt scheinbar Tools, die das koennen aber da musst du selber suchen. Have fun!

    Cheers,
    Andreas
     
  2. Tobse
    Tobse Bekanntes Mitglied
    @AndyJ Wieso in aller Welt sollten die Fenster von Skype oder einem Video-Player was mit den JFrames in einem anderen Prozess zu tun haben??
     
  3. jacknjonny
    jacknjonny Neues Mitglied
  4. jacknjonny
    jacknjonny Neues Mitglied
    Danke andreas !
    Obwohl ich nicht viel davon verstanden hab..
    Abgesehn von den software Problemen hab ich ja auch nicht 4 hdmi Eingänge und würde das meine Grafikkarte überhaupt aushalten?
     
  5. mrBrown
    mrBrown Bekanntes Mitglied
    Kommt auf die Grafikkarte an, gibts durchaus welche, die das können.

    Gibts unter Unixoiden mit virtuellen Desktops überhaupt eine Zuordnung von Programm zu realem Bildschirm?
     
  6. jacknjonny
    jacknjonny Neues Mitglied
    Wäre es schlauer vll 2 Grafikkarten zu verwenden um die eine nicht auszulasten?
    Dann würde man vll auch keine Zuordnung zu realen Bildschirmen brauchen weil es dann "nur" 2 Bilder nebeneinander die auf 2 Bildschirme gezogen sind sein, oder wäre es schwierig einem unixoiden beizubringen viertuelle und reale Bildschirme zu verstehen und wahrzunehmen?
     
  7. AndyJ
    AndyJ Mitglied
    Haben die nicht. Ich hab's einfach probiert - manchmal endeckt man dabei was Neues, manchmal nicht.
     
  8. AndyJ
    AndyJ Mitglied
    Es kann auch sein, dass dir das Betriebssystem nur einen grossen Bildschirm mit Riesenaufloesung vorgaukelt.
     
  9. Neumi5694
    Neumi5694 Mitglied
    Also HDMI direkt ansteuern wirst du a) nicht hinkriegen und b) ist das der falsche Weg.
    Je nach System kriegt die Anwendung gar nicht mit, welche Hardware im Hintergrund tuckert.
    mrBrown liegt völlig richtig, im Normalfall kriegst du nur abstrahierte, virtuelle Desktops. Wohin die dann gehen ... das ist nicht dein Bier (kannst du natürlich abfragen).
    Stell dir mal vor, du greifst mit Remotedesktop auf den PC zu. In dem Fall geht das Signal über gar keinen Display-Port, sondern wird über ein virtuelles Gerät über das Netzwerk geschickt.
    Was die Grafikkarten angeht, da wirst du auch keinen direkten Zugriff kriegen.
    Du kannst natürlich abfragen, was dir alles zur Verfügung steht und entsprechend anfordern, sofern möglich.
    https://docs.oracle.com/javase/7/docs/api/java/awt/GraphicsEnvironment.html
    https://docs.oracle.com/javase/7/docs/api/java/awt/GraphicsConfiguration.html

    Bei allem gilt: Jeder der Einträge kann virtuell sein oder echte Hardware im Hintergrund haben, es gibt da für dich als Frontend-Programmierer keinen Unterschied.
     
Thema: HDMI Ausgänge mit Java programmieren?