Problem mit Threads

Status
Nicht offen für weitere Antworten.

ItzChris

Mitglied
Also, ich hoff mal das hier ist die richtige Stelle um das Problem zu posten.
Ich versuch grad nen MP3- Player zu programmieren, jetzt bin ich auf ein Problem gestoßen das ich nicht zu lösen weiß.
Wenn ich ein Lied eingelesen und gestartet habe startet ein Thread der es durchlaufen lässt. Wenn ich aber währen ein Lied am laufen ist, ein 2. Lied auswähle, kann ich den laten Thread nicht mehr beenden. Jetzt frag ich mich ob es vielleicht ne Möglichkeit gibt, alle Threads zu beenden, also wenn ich halt ein 2. Mal auf "Play" drück, das dann alle vorherigen Thread geschlossen werden, da sonst 2 Lieder gleichzeitig abgespielt werde.

Wäre nett wenn mir jemand helfen könnte.
 

hdi

Top Contributor
Kannst du mal zeigen wie so ein Thread bei dir aussieht, der ein Lied abspielt?
 

ItzChris

Mitglied
Alles klar:

Java:
  void Abspielen()
  {
//    ThreadStarten();
    try{
      System.out.println(dateipfad);
      p.close();
      demoThread = new startThread();
      running = true;
      demoThread.start();
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad));
      }
      catch(Exception e){}
    }
    catch(Exception e){}
  }

Java:
  void ThreadStarten()
  {
    try{
      System.out.println(dateipfad);
      p.close();
      demoThread = new startThread();
      running = true;
      demoThread.start();
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad));
      }
      catch(Exception e){}
    }
    catch(Exception e){}
  }

Java:
  class startThread extends Thread{
     public void run(){
       try{
         p.play();
       }
       catch(Exception e){}
     }
   }
 
Zuletzt bearbeitet:

hdi

Top Contributor
Wo liegt "p" und "running"? Bzw wo liegen die beiden Methoden, und wieso hast du 2 gleiche Methoden?
 

ItzChris

Mitglied
Hab da bisschen was falsch eingefügt, p und running liegen ganz oben in der public class oder wie meinst du das?

Also running ist ja ne boolean und p ist halt der AdvancedPlayer mit dem ich das abspiele, aber ich glaub ich versteh dich grad falsch..
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
...und wieso schreibst du methodennamen Groß
...und wieso schreibst du klassennamen kLEIN
(hab's eben 5 mal durchlesen müssen, bis ich gerafft hab wo hier oben und unten ist... :mad: diese verdammten groß-kleinschreibungs-weltraumtouristen :lol:)
...und wieso fängst du nicht spezifizierte Exceptions ab (nicht gut!)
...und wieso postest du nicht einfach die ganze Klasse?
(bei thread stecken die probleme oft nicht in einzelnen zeilen, sondern in der globalen struktur des programms)

UND überhaupt: wie soll hier irgendwas stoppen, wenn ich in keiner einzigen zeile irgendwo ein "stop()" sehe????:L
 

hdi

Top Contributor
Ach du scheiße. Um diese Uhrzeit habe ich wirklich nich die Kraft für sowas :D

Kurz und knapp:

1) Schmeiss diese ganzen überflüssigen Tabulatoren raus!!!
2) Klassennamen beginnen mit grossen Buchstaben, Methoden und Variablen mit kleinen
3) Member-Variablen gehören private
4) Man weist ihnen auch nicht direkt einen Wert zu, das sollte im Konstruktor passieren.

Ansonsten hab ich mir dieses Chaos nicht gedrückt, nur eine Sache is mir spontan aufgefallen: Das "p" ist eine globale Variable. Nachdem du den Thread startest weisst du der ein neues Objekt zu, und der gestartete Thread wird auf dem neuen Objekt weiterarbeiten. Ich glaube nicht dass du das so geplant hast?

...änder bitte erstmal den...dieses...Kunstwerk ;) So codet man nicht.
 

0x7F800000

Top Contributor
Hmk, sry für Groß- und Kleinschreibung habs mir so angewohnt..
Ist doch keine "Gewöhnungssache". Wenn du in Java schreibst, dann schreib eben in java... Woanders schreibst du eben irgendwie anders... In java ist es eben üblich Klassennamen Groß und methodennamen klein zu schreiben, da gibt's nichts anzugewöhnen oder abzugewöhnen: mach's einfach.

Okay, also, mit dem code ist es schon ein klein wenig verständlicher... aber nicht so wirklich, um ehrlich zu sein....
Java:
  class startThread extends Thread{
     public void run(){
       try{
         p.play();
       }
       catch(Exception e){}
     }
   }
Was soll diese Konstruktion für einen Sinn haben? Böse Dämonen abschrecken? ;)
Das ist doch irgendwie ein total untreadiges Verhalten, wenn ein thread erzeugt wird, nur um eine einzige methode aufzurufen und sofort wieder zu verrecken...

Ebenso unkalr ist, was du hier vorhattest:
Java:
  void Stop()
  {
    if(running){
      demoThread = null;
    }
    running = false;
    p.close();
  }
wozu setzst du den thread auf null? der ist bis dahin doch eh schon lange tot, wen interessiert diese referenz?

p.close() sollte dagegen schon das stoppen bewirken. Tut es das nicht? Dann ist es seltsam... :bahnhof:

Ich würde aber zunächst mal vorschlagen, diese merkwürdige "startThread"-Klasse herauszuschneiden [bzw eine erklärung zu liefern, wozu sie gut sein soll], und alles andere schnell zu refactorn... Und überhaupt, beschreibe das Problem etwas konkreter. Kompilieren kann ich den kram immer noch nicht, weil ich mir dieses paket grad nicht runterladen will...
 

ItzChris

Mitglied
K, bevor ich ds hier programmiert hatte, habe ich noch nie was mit Threads gemacht und ich hatte es so gefunden und hab das deswegen auch so gemacht.
Ist jetzt keine Entschuldigung aber naja.

Das Problem ist halt, das wenn ich ein Lied abspiele und dann ein neues Lied mit dem JFileChooser ausgewählt hab, dass wenn ich dann wieder auf play drücke, der alte Thread nicht beendet wird. Also das Lied was ich zuerst gestartet hab, läuft dann immer noch und das neue Lied das ich ausgesucht habe läuft dann auch.
Also laufen beide Lieder parallel...

Aber eigentlich sollte ja der alte Thread aufhören zu laufen, da ich ja das p.close eingebaut habe:
Java:
  void Abspielen()
  {
//    ThreadStarten();
    try{
      System.out.println(dateipfad);
      p.close();
      demoThread = new startThread();
      running = true;
      demoThread.start();
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad));
      }
      catch(Exception e){}
    }
    catch(Exception e){}
  }
 

0x7F800000

Top Contributor
Also, ich verstehe überhaupt nicht, was dieser ganzer kram überhaupt machen soll:
Java:
      p.close();   //player stoppen (warum nicht mit stop()?)
      demoThread = new startThread(); //überflüssiger kram
      running = true; //whatever....
      demoThread.start(); //genau dasselbe wie einfach nur p.play() direkt aufrufen?!
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad)); //das alte p spielt noch, das neue wird erstellt und... 
 //ähm... ja, keine Ahnung was passiert denn damit?
      }
ich verstehe auf jeden fall nicht, wieso du den eben gestoppten player sofort wieder neustartest und dann durch einen anderen ersetzst ???:L

Und nochmal: räum diesen "startThread"-krempel weg, das ist doch unmöglich zu lesen ;(
 

ItzChris

Mitglied
Wenn ich das aber nicht über den Thread- krempel mach, dann passiert gar nichts wenn ich auf den Play- Button drück.

Hab hier mal ne frühere Version, vielleicht könnt ihr/du damit mehr anfangen:

Java:
import java.io.*;
import javax.swing.*;
import javax.swing.JFileChooser;
import javax.swing.event.*;
import java.awt.*;
import java.util.ArrayList;
import java.awt.event.*;
import javazoom.jl.player.*;
import javazoom.jl.player.advanced.*;
import javazoom.jl.decoder.*;

 public class Projekt1 extends JFrame{
   JButton dir = new JButton("Durchsuchen");
   JButton play = new JButton("Play");
   JButton stop = new JButton("Stop");
   JTextArea statusbar = new JTextArea("Folgende Lieder sind ausgewählt:");
   String dateipfad;
   startThread demoThread;
   boolean running = true;
   AdvancedPlayer p;
   int i = 0;

   Projekt1(){
     super("Projekt");
     setSize(350,200);
     setDefaultCloseOperation(EXIT_ON_CLOSE);
     
     Lauscher l = new Lauscher();
     
     Container c = getContentPane();
     c.setLayout(new FlowLayout());

     dir.addActionListener(l);
     play.addActionListener(l);
     stop.addActionListener(l);

     c.add(dir);
     c.add(play);
     c.add(stop);
     c.add(statusbar);
   }
   
   class Lauscher implements ActionListener{
     public void actionPerformed(ActionEvent ae){
       String aktion = ae.getActionCommand();

       if(aktion.equals("Durchsuchen")){
         JFileChooser chooser = new JFileChooser();
         chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
         chooser.setMultiSelectionEnabled(true);
         int option = chooser.showOpenDialog(Projekt1.this);
         
         if(option == JFileChooser.APPROVE_OPTION){
           statusbar.setText(statusbar.getText()+"\n"+""+chooser.getSelectedFile().getName() +"");
           statusbar.setEditable(false);
           File[] pfad = chooser.getSelectedFiles();

           for(int i=0; i<pfad.length; i++){
             if(pfad[i].isFile()){
               try{
                 RandomAccessFile ranFile = new RandomAccessFile(pfad[i],"r");
                 byte[] bytearr = new byte[128];
                 ranFile.seek(ranFile.length()-128);
                 ranFile.read(bytearr,0,128);
                 String a = new String (bytearr,"US-ASCII");
                 if(!a.substring(0,3).equals("TAG")){
                   System.out.println("Keine Informationen vorhanden");
                   continue;
                 }
                 String title,artist,album,year,comment;
                 System.out.println("TITEL: "+a.substring(3,33).trim());
                 System.out.println("ARTIST: "+a.substring(33,63).trim());
                 System.out.println("ALBUM: "+a.substring(63,93).trim());
                 System.out.println("YEAR: "+a.substring(93,97).trim());
                 System.out.println("COMMENT: "+a.substring(97,126).trim());
                 System.out.println("GENRE: "+bytearr[127]);
               }
               catch(IOException e){
                 System.out.println(e);
               }
             }
             dateipfad = pfad[i].getAbsolutePath();
           }
           try{
             p = new AdvancedPlayer(new FileInputStream(dateipfad));
           }
           catch(Exception e){

           }
         }
         else{
           statusbar.setText("Sie haben abgebrochen");
         }
       }
       
       if(aktion.equals("Play")){
         try{
           p.close();
           demoThread = new startThread();
           running = true;
           demoThread.start();
           try{
             p = new AdvancedPlayer(new FileInputStream(dateipfad));
           }
           catch(Exception e){

           }
         }
         catch(Exception e){

         }
       }
       
       if(aktion.equals("Stop")){
         if(running){
           demoThread = null;
         }
         running = false;
         p.close();
         try{
           p = new AdvancedPlayer(new FileInputStream(dateipfad));
         }
         catch(Exception e){

         }
       }
     }
   }
   
   class startThread extends Thread{
     public void run(){
       try{
         p.play();
       }
       catch(Exception e){

       }
     }
   }
   
   public static void main(String[] args) throws FileNotFoundException, JavaLayerException{
     Projekt1 pn = new Projekt1();
     pn.setVisible(true);
     pn.setLocation(300,300);
   }
 }
 

0x7F800000

Top Contributor
Wenn ich das aber nicht über den Thread- krempel mach, dann passiert gar nichts wenn ich auf den Play- Button drück.
nun ja, wenn du die alten drei zeieln einfach gekillt hast, ohne eine irgendwo "p.play()" einzufügen, dann wär's ja kein Wunder... Aber Ferndiagnosen sind nach wie vor schwierig. :rolleyes:
Hab hier mal ne frühere Version, vielleicht könnt ihr/du damit mehr anfangen:
Ist daran irgendwas anders, außer dass die ganze funktionalität in eine einzige methode gequetscht wurde, und durch elendst viele if-verzweigungen angesprochen wird? :eek: Der "startThread"-Krempel ist da jedenfalls genauso present... :noe:
 

ItzChris

Mitglied
Der Play- Button:

Java:
       if(aktion.equals("Play")){
         try{
           p.stop();
//           demoThread = new StartThread();
           running = true;
           p.play();
           try{
             p = new AdvancedPlayer(new FileInputStream(dateipfad));
           }
           catch(Exception e){

           }
         }
         catch(Exception e){

         }
       }

Und die class StartThread komplett raus.
 

0x7F800000

Top Contributor
Java:
       if(aktion.equals("Play")){
         try{
           p.stop();
//           demoThread = new StartThread();
           running = true;
           p.play(); //<------------------- p IST TOT 
           try{
             p = new AdvancedPlayer(new FileInputStream(dateipfad));
             //p ist wieder da, ABER KEIN play()-AUFRUF!!!
           }
           
           catch(Exception e){

           }
         }
         catch(Exception e){

         }
       }
Es ist nichts zu hören, da ja nirgends p.play() aufgerufen wird *mit 'nem 3-Tonnen-Betonzaunpfahl wink*
 
Zuletzt bearbeitet:

ItzChris

Mitglied
Hatte grad flaschen Button gepostet, habs aber geändert.
Naja das abspielen geht jetzt aber da ich den StartThread rausgenommen habe, kann ich jetzt nichts mehr drücken solange wie der das Lied abspielt.
 

0x7F800000

Top Contributor
Hatte grad flaschen Button gepostet, habs aber geändert.
Naja das abspielen geht jetzt aber da ich den StartThread rausgenommen habe, kann ich jetzt nichts mehr drücken solange wie der das Lied abspielt.
ja, hab da oben auch irgendwas editiert...
play() blockiert also? :autsch:
oh, sorry, das hätte ich nicht erwartet, dann entschuldigung... :oops:
mach den "startThread" wieder rein, benenne ihn irgndwie sinnvoll (etwa in "PlayThread") aber rufe den jetzt erst danach auf, als das neue p erstellt wurde, nicht davor.
[top beispiel für irritierende namensgebung... "startThread" ohje... :noe:]
 

0x7F800000

Top Contributor
Java:
if(aktion.equals("Play")){
         try{
           if(running){
             p.stop();
           }
 
//           demoThread = new StartThread();
           running = true;
 
           try{
             p = new AdvancedPlayer(new FileInputStream(dateipfad));
             new Thread(){
               @Override
               public void run(){
                   p.play();
               }
              }.start();
           }
           catch(Exception e){
 
           }
         }
         catch(Exception e){
 
         }
       }
und so?...

Könntest du vielleicht einen Link zu diesem komischen jar posten, den du hier verwendest, und einfach deinen code grad bei rapidShare oder so hochladen? Dann könnte ich zumindest direkt sehen was da wo schiefläuft...
 

ItzChris

Mitglied
Also ich hatte das jetzt so gemacht:

Java:
       if(aktion.equals("Play")){
         try{
           if(running){
             p.stop();
           }
           running = true;
           try{
             p = new AdvancedPlayer(new FileInputStream(dateipfad));
             demoThread.start();
           }
           catch(Exception e){

           }
           demoThread = new PlayThread();
         }
         catch(Exception e){

         }
       }

Problem ist nur das wenn ich den Thread nach dem p = new AdvancedPlayer mach, dass der Play- Button dann nicht Funzt.

JLayer 1.0 ist das wobei 1.0.1 wohl auch gehen wird^^

Java MP3 Player
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Werd den Code mal bearbeiten, damit mans besser lesen kann..
jaa, passt schon, her d'mit, ich bin ja mit eclipse bewaffnet, ich werd's schon überleben (was ich für deinen code jedoch nicht garantieren kann) :D
Hab mir dieses Jar 1.0.1 runtergeladen alles eingerichtet, kann mir das jetzt endlich mal ordentlich anguggn :)
 

ItzChris

Mitglied
Na dann:

Java:
import java.io.*;
import javax.swing.*;
import javax.swing.JFileChooser;
import javax.swing.event.*;
import java.awt.*;
import java.util.ArrayList;
import java.awt.event.*;
import javazoom.jl.player.*;
import javazoom.jl.player.advanced.*;
import javazoom.jl.decoder.*;

public class MediaPlayerGrafik extends JFrame
{
  //Erstellen der Buttons*******************************************************
  JButton  jb_titelWaehlen = new JButton("Datei wählen...");  //Anlegen des Datei wählen Buttons
  JButton  jb_weiter       = new JButton(">>|");  //Anlegen des Lied-Weiter Buttons
  JButton  jb_zurueck      = new JButton("|<<");  //Anlegen des Lied-Zurueck Buttons
  JButton  jb_pausePlay    = new JButton(">|");  //Anlegen des Play/Pause-Buttons
  JButton  jb_stop         = new JButton("|X|");  //Anlegen des Stop-Buttons

  //Anlegen benötigter Variablen und Funktionen*********************************
  StartThread demoThread;
  boolean running = true;
  String dateipfad;
  String titel;
  String interpret;
  String album;
  private AdvancedPlayer p;
  int songZaehler = -1;
  int songsZurueck = 0;
  int songsVor = 0;
  int gesamtAnzahlSongs = 0;
  String[] titelListe = new String[100];

  //Implementieren der JTable***************************************************
  JTablePlaylist jt_playlist = new JTablePlaylist();

  public MediaPlayerGrafik()
  {
    super("MediaPlayer");
    Container cp  =  getContentPane();
    setLayout(new BorderLayout());
    
    //Erstellen der Listener****************************************************
    ButtonLauscher  blauscher = new ButtonLauscher();
    JMenuLauscher  jmlauscher = new JMenuLauscher();
    
    //Erstellen der Menüleiste samt Inhalt**************************************
    JMenuBar   jmb = new JMenuBar();  //Anlegen der MenuBar
    JMenu      jm_datei = new JMenu("Datei");  //Anlegen des Menüpunktes Datei
    JMenu      jm_wiedergabeliste = new JMenu("Wiedergabeliste");  //Anlegen des Menüpunktes Wiedergabeliste
    JMenuItem  jmi_dateiOeffnen = new JMenuItem("Datei öffnen...");  //Anlegen des Untermenüs Datei öffnen
    JMenuItem  jmi_beenden = new JMenuItem("Beenden");  //Anlegen des Untermenüs Beenden
    JMenuItem  jmi_wiedergabelisteSpeichern = new JMenuItem("Wiedergabeliste speichern...");  //Anlegen des Untermenüs Wiedergabeliste speichern
    JMenuItem  jmi_wiedergabelisteLaden = new JMenuItem("Wiedergabeliste laden...");  //Anlegen des Untermenüs Wiedergabeliste laden
               jm_datei.add(jmi_dateiOeffnen);
               jm_datei.add(jmi_beenden);
               jm_wiedergabeliste.add(jmi_wiedergabelisteSpeichern);
               jm_wiedergabeliste.add(jmi_wiedergabelisteLaden);
               jmb.add(jm_datei);
               jmb.add(jm_wiedergabeliste);
               setJMenuBar(jmb);
                                  
    //Zuweisung der Lauscher****************************************************
               jb_pausePlay.addActionListener(blauscher);
               jb_stop.addActionListener(blauscher);
               jb_zurueck.addActionListener(blauscher);
               jb_weiter.addActionListener(blauscher);
               jmi_dateiOeffnen.addActionListener(jmlauscher);
               jmi_beenden.addActionListener(jmlauscher);
               jmi_wiedergabelisteSpeichern.addActionListener(jmlauscher);
               jmi_wiedergabelisteLaden.addActionListener(jmlauscher);
                    
    //Erstellen der Panels******************************************************
    JPanel  jp_panelButtons = new JPanel();
            jp_panelButtons.setLayout(new GridLayout(1,4));
            jp_panelButtons.add(jb_zurueck);
            jp_panelButtons.add(jb_pausePlay);
            jp_panelButtons.add(jb_stop);
            jp_panelButtons.add(jb_weiter);

    //Einfügen der Elemente in das ContentPane**********************************
    cp.add(jt_playlist);
    cp.add(jp_panelButtons, "South");
  }
  
  //Zuständiger ButtonLauscher für den Play-Button******************************
  public class ButtonLauscher implements ActionListener
  {
    public void actionPerformed( ActionEvent e )
    {
      String aktion = e.getActionCommand();
      if(aktion.equals("||")){
        jb_pausePlay.setText(">|");
      }
      if(aktion.equals(">|")){
        abspielen();
      }
      if(aktion.equals("|X|"))
      {
        stop();
      }
      if(aktion.equals("|<<")){
        zurueck();
      }
      if(aktion.equals(">>|")){
        vor();
      }
    }
  }
  
  public class JMenuLauscher implements ActionListener
  {
    public void actionPerformed( ActionEvent e )
    {
      String aktion = e.getActionCommand();

      if(aktion.equals("Beenden")){
         System.exit(0);
      }
      if(aktion.equals("Datei öffnen...")){
        titelWahl();
      }
    }
  }
  
  void abspielen()
  {
//    ThreadStarten();
    try{
      System.out.println(dateipfad);
      p.close();
      demoThread = new StartThread();
      running = true;
      demoThread.start();
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad));
      }
      catch(Exception e){}
    }
    catch(Exception e){}
  }
  
  void stop()
  {
    if(running){
      demoThread = null;
    }
    running = false;
    p.close();
  }
  
  void vor()
  {
    System.out.println("bb");
    if(songZaehler < gesamtAnzahlSongs){
      songZaehler++;
      System.out.println(songZaehler);
      songsVor++;
      dateipfad = titelListe[songZaehler];
      System.out.println(dateipfad);
      threadStarten();
    }
  }
  
  void zurueck()
  {
    if(songZaehler > 0){
      System.out.println("bb");
      songZaehler--;
      System.out.println(songZaehler);
      songsZurueck++;
      dateipfad = titelListe[songZaehler];
      threadStarten();
    }
  }
  
  void threadStarten()
  {
    try{
      System.out.println(dateipfad);
      p.close();
      demoThread = new StartThread();
      running = true;
      demoThread.start();
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad));
      }
      catch(Exception e){}
    }
    catch(Exception e){}
  }
  
  void titelWahl()
  {
    JFileChooser chooser = new JFileChooser();
                 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    int option = chooser.showOpenDialog(MediaPlayerGrafik.this);
    if(option == JFileChooser.APPROVE_OPTION){
      File pfad = chooser.getSelectedFile();
      if(pfad.isFile()){
        try{
          RandomAccessFile ranFile = new RandomAccessFile(pfad,"r");
          byte[] bytearr = new byte[128];
          ranFile.seek(ranFile.length()-128);
          ranFile.read(bytearr,0,128);
          String tag = new String (bytearr,"US-ASCII");
          if(!tag.substring(0,3).equals("TAG")){
            System.out.println("Keine Informationen vorhanden");
            return;
          }
          titel           = tag.substring(3,33).trim();
          interpret       = tag.substring(33,63).trim();
          album           = tag.substring(63,93).trim();

          System.out.println(titel);
        }
        catch(IOException ee){
          System.out.println(ee);
        }
      }
      dateipfad = pfad.getAbsolutePath();
      try{
        p = new AdvancedPlayer(new FileInputStream(dateipfad));
      }
      catch(Exception eee){}
    }
    songZaehler++;
    System.out.println(songZaehler);
    System.out.println(titelListe[0]);
    gesamtAnzahlSongs = songZaehler;
    titelListe[songZaehler] = dateipfad;
  }
  
  class StartThread extends Thread{
     public void run(){
       try{
         p.play();
       }
       catch(Exception e){}
     }
   }
  
  //****************************************************************************
  public static void main( String[] args )
  {
    try{
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    }catch(Exception e){}
    MediaPlayerGrafik mpg                                         =               new MediaPlayerGrafik();
    mpg.setSize( 500, 300 );
    mpg.setVisible( true );
    mpg.setDefaultCloseOperation( 3 );
  }
}

Und das ist der andere Teil, aber funzt eh noch nicht so richtig... :

Java:
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.awt.event.*;


public class JTablePlaylist extends JPanel
{
   String titel;
   String interpret;
   String album;

//   public String getTitel(){
//     return titel;
//   }
//
//   public String getInterpret(){
//     return interpret;
//   }
//
//   public String getAlbum(){
//     return album;
//   }
   
   public String getTitel(){
    return titel;
  }

  public String getInterpret(){
    return interpret;
  }

  public String getAlbum(){
    return album;
  }
   JPanel jp_tabelle;
   private TableModel model;
   private JTable table;
   JTablePlaylist()
   {
//     MultimediaFunktionen MFunktionen                            =               new MultimediaFunktionen();
     String bla = titel;


     String[][] rowData = {
       {"test", "bbbb", ""+bla}
     };

     String[] columnNames = {
       "Titel", "Interpret", "Album"
     };

     model                                  =               new DefaultTableModel(rowData, columnNames);
     table                                  =               new JTable(model){
       public boolean isCellEditable(int x, int y){
         return false;
       }
     };

//     JTable table                           =               new JTable(rowData, columnNames);
            table.setPreferredScrollableViewportSize(new Dimension(450,180));
     JPanel jp_panelTabelle                 =               new JPanel();
            jp_panelTabelle.setLayout(new BorderLayout());
     JScrollPane scrollPane                 =               new JScrollPane(table);
     add(scrollPane);

     table.addMouseListener(new MouseAdapter() {
       public void mouseClicked(MouseEvent e) {
         if (e.getClickCount()==2)
         {
           int row = table.getSelectedRow();
           String sFeatureString = (String) table.getValueAt(row, 1);
           System.out.println(sFeatureString);
         }
       }
     });
   }
   
}
 

0x7F800000

Top Contributor
@ItzChris:
Okay, ich geb auf... habe jetzt nochmal eine Stunde meines sinnlosen Lebens verwendet, um mir ein Urteil über dieses JLayer zu bilden.
Meiner meinung nach ist das völlig unbrauchbar. Dieses bescheuerte Ding schmeißt mir nur dauernd irgendwelche NullPointer- und ArrayIndexOutOfBounds- und StreamClosed- Exceptions an den Kopf, die mit keinem Wort in der äußerst dürftigen Dokumenation erwähnt sind, ich habe absolut keinen blassen schimmer Ahnung mehr, was ich mit diesem blöden Teil anstellen soll, damit der scheinbar grundlose exception regen endlich aufhört...

Jetzt habe ich sogar noch folgendes hier entdeckt:
http://www.informit.com/guides/content.aspx?g=java&seqNum=290
If you want to add pause and resume functionality to the Player, you will need to override the play() method, but this requires that you recompile the JLayer source code because some of the objects that are referenced in the play() method are private (instead of protected.)
...aber ich habe sicherlich nicht vor, mich auch noch mit dem source code von dem Teil rumzuschlagen, nur weil die Leute die das geschrieben haben an nichts gedacht haben, und das Projekt anscheinend nach Version 1.0.1 vergessen haben. Dieses Zitat bezieht sich zwar auf 1.0, aber mit 1.0.1 habe ich ebenfalls keine pause hinbekommen, und mir fehlt langsam die Phantasie, um noch irgendwelche Hacks auszudenken. keine Ahnung.
Vielleicht krieg ich morgen irgendeinen genialen einfall.
Vielleicht meldet sich hier jemand, der sich mit diesem JLayer auskennt.
Vielleicht gefällt dir ja das ältere (aber irgendwie funktionsfähige) JMF oder das neue JMC besser...

kA, bis morgen, ich schlaf jetzt ne runde^^ :autsch:
goddamnit...
 

ItzChris

Mitglied
Danke das du versucht hast mir zu helfen, aber dann gehts dir ja wie mir... Hab noch gehofft gehabt das es irgenteinen Befehl halt gibt um alle Threads zu schließen die im gesamten Programm verwendet worden wurden, aber anscheinend liegt das Problem eher beim JLayer..
 

0x7F800000

Top Contributor
Bist du zufrieden, wenn du dein Beispielprogramm soweit bringst, dass es laden, vom anfang abspielen und stoppen kann? Dann funktioniert's ja schon "fast", nur eben ohne pause... :autsch:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
0 Problem mit zeitsynchroner Hauptschleife/Threads Spiele- und Multimedia-Programmierung 28
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
ruerob Problem bei Fade-Out von Sounds Spiele- und Multimedia-Programmierung 3
L [Slick2D] Problem bei Speicherfreigabe Spiele- und Multimedia-Programmierung 2
M Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 22
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
J Problem bei pixelgenauer Kollisionsabfrage Spiele- und Multimedia-Programmierung 10
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
R StringIndexOutOfBoundsException - Problem Spiele- und Multimedia-Programmierung 2
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
A TileMap KeyListener - Problem Spiele- und Multimedia-Programmierung 2
N Problem mit Kollisionsabfrage beim Fallen Jump & Run Spiele- und Multimedia-Programmierung 5
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Fu3L Problem mit 3D Noise Spiele- und Multimedia-Programmierung 4
L Problem beim Rätsellöser Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
T Problem mit ClassLoader und LWJGL Spiele- und Multimedia-Programmierung 5
M Scrolling Repaint Problem Spiele- und Multimedia-Programmierung 2
Samake03 [Problem] layeredPane bzw. Viewport Spiele- und Multimedia-Programmierung 3
Helgon glTexParameter / glTexImage2D Problem Spiele- und Multimedia-Programmierung 11
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
M Problem mit Gameserver / Datensynchronisation Spiele- und Multimedia-Programmierung 10
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
X Geometry Wars Clone Problem Spiele- und Multimedia-Programmierung 4
H Problem mit JMonkeyEngine3 und OgreXML Spiele- und Multimedia-Programmierung 3
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
T Problem mit Speicherverbrauch Spiele- und Multimedia-Programmierung 5
S Programmstruktur Problem! Spiele- und Multimedia-Programmierung 8
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
C MP3 Handler-Problem Spiele- und Multimedia-Programmierung 13
C [gelöst] MP3-Codec-Problem Spiele- und Multimedia-Programmierung 2
K Schiebepuzzle Array Zufallszahlen Problem Spiele- und Multimedia-Programmierung 8
J Java 3D Problem Spiele- und Multimedia-Programmierung 2
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
H Repaint-Problem mit Quaxlis Tutorial Spiele- und Multimedia-Programmierung 2
C Java Sound API Clip.Close() Problem Spiele- und Multimedia-Programmierung 1
K Problem beim Anzeigen von Bildern Spiele- und Multimedia-Programmierung 5
D Problem mit Überprüfung beim Lottospiel Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben