Eclipse: Projekt mit src ordner exportieren.

Es Funktioniert jetzt, blos das Projekt, dass ich angefügt hatte, war nur ein Projekt extra hierfür erstellt, und jetzt muss ich in ein paar anderen Projekten insgesamt an 43 Stellen den Code um schreiben. Scheu mich davor😀
 
Es Funktioniert jetzt, blos das Projekt, dass ich angefügt hatte, war nur ein Projekt extra hierfür erstellt, und jetzt muss ich in ein paar anderen Projekten insgesamt an 43 Stellen den Code um schreiben. Scheu mich davor😀

Das ist evtl. ein Zeichen für doppelten Code. Don't Repeat Yourself - DRY: Hier könnte es evtl. Sinn machen, zu schauen, was da doppelt ist um dann den Code nur noch an einer Stelle zu haben und dann halt an den 43 Stellen nur noch einen Methodenaufruf zu haben.

Das aber nur als kleiner Hinweis am Rande. Viel Erfolg (und Spaß) bei den Anpassungen.
 
BTW, statt sowas:
Java:
InputStream resourceAsStream = Test.class.getResourceAsStream("textures/Button_Start.png");
Image image = ImageIO.read(resourceAsStream);
JLabel label1 = new JLabel(new ImageIcon(image));

sollte auch einfach das möglich sein:
Java:
JLabel label1 = new JLabel(new ImageIcon(Test.class.getResource("textures/Button_Start.png")));

Das Lesen des Images kann ImageIcon selbst übernehmen, je nach Verwendung hat das auch Vorteile.
 
Zuletzt bearbeitet:
Hallo,
Um hierauf zurückzukommen(ja ich weiss es ist etwas spät🙂), mir ist gerade aufgefallen, wenn ich ein Video mit dem VLC Player abspielen will, hab ich das bisher so gemacht:
Java:
                    try {
                                    Desktop.getDesktop().open(new File("src\\Test.mp4"));
                                } catch (IOException e1) {
                                
                                    e1.printStackTrace();
                                }
Da ich nun weiss wie falsch das ist, und dass das nach dem Exportieren nicht funktioniert, versuche ich das anders zu lösen:
Java:
                    try {
                                    Desktop.getDesktop().open(new File("/Test.mp4"));
                                } catch (IOException e1) {
                                
                                    e1.printStackTrace();
                                }
Klappt nicht. Auch nach ein paar anderen versuchen wurde ich auch nicht schlauer.
Wäre sehr hilfreich wenn hier jemand den richtigen Code reinkopieren könnte.

Danke im vorraus

VPChief (kann man eigentlich seinen Namen ändern?)
 
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: The file: \Test.mp4 doesn't exist.
at java.awt.Desktop.checkFileValidation(Unknown Source)
at java.awt.Desktop.open(Unknown Source)
at eeeeeeeeeeeeeeee.d.Tets$8$4$1.actionPerformed(Test.java:317)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)


Ich hatte die Fehlermeldung vergessen, das ist sie
 
Zuletzt bearbeitet:
weiterer Versuch: wenn die Datei auf dem Betriebsystem liegt funktioniert es, meine liegt aber im jar
 
Zuletzt bearbeitet:
Also deine Erwartungshaltung ist seltsam - als ob hier lauter Leute ständig rumhängen um sofort zu antworten....

Und wenn das Viseo im jar enthalten ist kannst du es so nicht wiedergeben. Bei der beschriebenen Lösung wird die Datei im Dateisystem benötigt.

Datei in jar: Datei mit Java Mitteln lesen, also z.B. über Classloader und getResourceAsStream oder so.
Datei nicht im jar: datei kann mit Betriebssystem-Mitteln geöffnet werden.
 
über classloader habe ich auch schon versucht, aber wie du sicher schon weisst, stell ich mich immer relativ dumm an. D.h. dass ich zu dumm war das hinzubekommen
 
Naja, entweder aus dem Jar entpacken in eine Datei und dann VLC damit füttern oder einen Server starten und VLC darüber streamen lassen. Direkt den Stream aus dem Jar, wird vermutlich nicht gehen.
 
schade. auch zu einem Player gibt es laut Google keine möglichkeit. Dann muss ich wohl noch gucken, aber jetzt weiss ich zumindest, dass es nicht geht, Danke trotzdem
 
Du kannst z. B. mplayer oder vlc direkt aufrufen und mit einem "-" angeben, dass von der Standardeingabe gelesen werden soll. Hier ein Beispiel für mplayer:

Java:
import java.io.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Process p = new ProcessBuilder("mplayer", "-cache", "1024", "-")
            .redirectOutput(ProcessBuilder.Redirect.INHERIT)
            .redirectError(ProcessBuilder.Redirect.INHERIT)
            .start();

        try(InputStream is = Test.class.getResourceAsStream("/test.mpg");
                OutputStream os = p.getOutputStream()) {
            is.transferTo(os);
        }

        p.waitFor();
    }
}
 
transferTo gibt es ab Java 9. Falls Du noch Java 8 verwendest, musst Du das umkopieren natürlich selbst schreiben. Das wäre dann z.B. code in der Art:
Code:
    // copy data from input stream to output stream
    while ((length = is.read(bytes)) != -1) {
        os.write(bytes, 0, length);
    }

Die Variablen length und bytes müssen natürlich definiert werden (und bytes initialisiert).
 
Das Projekt ist schon ein bisschen älter. Ich hab mir jetzt aber ein projekt mit java 9 erstellt, allerdings macht mir eclipse immer so ein dummes rotes ausrufezeichen an das Projekt hin.
1596544345557.png
Ausserdem gibt es bei mir immer Fehlermeldungen an der Klasse:
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor

wenn ich in die klasse jetzt das Beispiel von @mihe7 einfüge, und dann trotz den Fehlermeldungen starte kommt ausserdem das hier:
1596544987892.png
auch alle alten Projekte lassen sich jetzt nicht mehr starten, ich fange langsam an auszurasten.
 
Zuletzt bearbeitet:
Da scheinst Du das JDK / JRE nicht richtig konfiguriert zu haben. Die erste Meldung kenne ich etwas, wenn das JDK nicht richtig konfiguriert ist. Dann kennt er das JDK halt nicht und somit auch kein java.lang.Object und so ...
Das Weitere dürften dann mehr oder weniger Folgefehler sein.
 
Sollte eigentlich nicht so wild sein.

Du hast also ein Java JDK 9 installiert? Dann schau erst einmal, ob dies korrekt eingetragen ist:
Window -> Preference
Da dann im Fenster unter Java -> Installed JREs nachschauen, ob dies da korrekt gelistet ist.
Ggf. Hinzufügen. Und ggf. bei mehreren Java 9 noch unter Execution Environments (Unterpunkt von Installed JREs) noch auswählen, was benutzt werden soll ...
Das wäre das Erste.

Um das dann ggf. im Projekt noch anzupassen: Properties des Projektes und da den Java Build Path.
Im Reiter Libraries das JRE System Library markieren und Remove klicken.
Dann Add Library -> JRE System Library
Da kannst Du dann entweder die JRE direkt wählen (Mitte) oder oben eben ein Environment auswählen (z.B. java-9 - dann nimmt Eclipse das installierte bzw. bei mehreren zur Auswahl das, was konfiguriert wurde...

Aber ich bin kein Eclipse Experte. Daher nur diese grobe Wegbeschreibung.
 
The selected JRE does not support the current compiler compliance level of 1.8
1596547042917.png
Ich glaube das reicht, um festzustellen, dass da was nicht stimmt.
 
Frage 1: Hast Du ein Java 9 installiert? (Oder neuer? Z.B. von https://adoptopenjdk.net/ wäre Java 11 das, was ich Dir empfehlen würde!)

Frage 2: So Du 1 mit Ja beantworten kannst: Hast Du einfach einmal probiert, das installierte JDK einzutragen? (Da steht zwar JREs, aber das JDK kannst Du da eintragen ....)
 
Ich habe eclipse nochmal neu installiert. Das ausführen kalappt wieder, und ich hab jetzt auch die neuste version. ausserdem zeigt es mir keine Fehlermeldungen an, ich habe jetzt auch java 14. Jetzt habe ich meine Projekte wieder in die alte Workspace verschoben, und es funktioniert, bis auf dass das System den (richtig) angegebenen Pfad nicht finden kann
 
Das Thema mit dem richtig angegebenen Path hatten wir doch bereits behandelt:
- Wenn die Datei im JAR enthalten ist, dann kannst Du es in der Regel auf Betriebssystem-Ebene nicht direkt angeben. Daher ist die Datei nicht als Parameter angebbar.
- Du kannst also die Datei extrahieren an einen anderen Ort oder die Daten in Java Lesen und dem externen Programm übergeben oder gar gleich ganz in Java anzeigen (https://github.com/caprica/vlcj sollte da z.B. funktionieren)
 
Ja, so habe ich es verstanden. Aber ich habe damit auch noch nichts gemacht und es gibt bestimmt auch noch mehr Möglichkeiten, Videos mit Java anzuzeigen. Google wird einem da bestimmt einiges an Möglichkeiten liefern.
 

Neue Themen


Zurück
Oben