Also, ich hab irgendwann mal ein Quellcode von einem Programm in einem Forum gefunden, mit dem man Film Daten aus imdb.de auslesen kann. Dieses Forum gibt es nun nicht mehr, deswegen kann ich dort nicht nach fragen. Ich poste hier mal den Quelltext des Programmes die meiner Meinung nach relevant sind. Wenn euch dort was fehlt, einfach sagen.
IMDBSearch.java
MainFrame.java
MoviePanel.java
Eine weitere Klasse Movie.java gibt es noch, dort sind einfach die Getter- und Setter Methoden für den Title, Genre etc.
Nun wollte ich dieses Programm in meinem mit einbinden.
Dies hab ich aus Test zwecken, um zu sehen ob das Programm überhaupt läuft in den Konstrukter gepackt. Das hat dann auch geklappt. Nun wollt ich es machen das sich die Methoden aufrufen, wenn ich einen bestimmten Button klicke, also raus aus dem Konstrukter und sie in die ActionPerfomed Methode für den Button reingepackt. So, nun kommt da aber eine Fehlermeldung:
Die Methode printMovies(); läuft allerdings, die Film Namen werden ausgegeben, es muss also an die Methode showPictures(); liegen
Es muss irgendiwe damit zusammen hängen:
Ich find es halt komisch, dass es im Konstrukter aber läuft....wäre super wenn hier jemand eine Lösung für mich hat. :applaus:
Mfg
(Ich hoffe ich hab es im richtigen Bereich gepostet. Und sorry für den schlechten Thread Namen, wusste nicht anders wie ich das Problem beschreiben sollte)
IMDBSearch.java
Java:
List<Movie> movieList1 = new LinkedList<Movie>();
public void showPictures() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new MainFrame(movieList1);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public void fetchMovies() {
BufferedReader in = null;
try {
URL url = new URL("http://www.imdb.de/find?s=tt&q=vampir");
URLConnection urlc = url.openConnection();
urlc.addRequestProperty("user-agent", "iexplorer");
in = new BufferedReader(
new InputStreamReader(urlc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.contains("Meistgesuchte Titel")) {
movieList1.addAll(getMovies(inputLine));
}
}
getFurtherInformation();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
MainFrame.java
Java:
private static final long serialVersionUID = 1L;
public MainFrame(List<Movie> movieList1) {
initGUI(movieList1);
}
private void initGUI(List<Movie> movieList1) {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
setTitle("IMDBSearch");
setSize(800, 600);
setLocationRelativeTo(null);
setLayout(new GridLayout(3, movieList1.size() / 3));
for (Movie m : movieList1) {
add(new MoviePanel(m));
}
}
MoviePanel.java
Java:
private static final long serialVersionUID = 1L;
public MoviePanel(Movie m) {
Image cover = m.getCover();
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(new JLabel("Titel: " + m.getTitle()));
add(new JLabel("Jahr: " + m.getYear()));
add(new JLabel("Genre: " + m.getGenreListString()));
if (cover != null) {
int h = cover.getHeight(null);
int w = cover.getWidth(null);
Image img = cover.getScaledInstance(w / 2, h / 2,
Image.SCALE_DEFAULT);
ImageIcon icon = new ImageIcon(img);
add(new JLabel(icon));
}
}
Eine weitere Klasse Movie.java gibt es noch, dort sind einfach die Getter- und Setter Methoden für den Title, Genre etc.
Nun wollte ich dieses Programm in meinem mit einbinden.
Java:
IMDBSearch search = new IMDBSearch();
search.fetchMovies();
search.printMovies(); //Diese Methode gibt einfach die Filme per System.out.println aus
search.showPictures();
Dies hab ich aus Test zwecken, um zu sehen ob das Programm überhaupt läuft in den Konstrukter gepackt. Das hat dann auch geklappt. Nun wollt ich es machen das sich die Methoden aufrufen, wenn ich einen bestimmten Button klicke, also raus aus dem Konstrukter und sie in die ActionPerfomed Methode für den Button reingepackt. So, nun kommt da aber eine Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
Die Methode printMovies(); läuft allerdings, die Film Namen werden ausgegeben, es muss also an die Methode showPictures(); liegen
Es muss irgendiwe damit zusammen hängen:
Java:
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new MainFrame(movieList1);
Ich find es halt komisch, dass es im Konstrukter aber läuft....wäre super wenn hier jemand eine Lösung für mich hat. :applaus:
Mfg
(Ich hoffe ich hab es im richtigen Bereich gepostet. Und sorry für den schlechten Thread Namen, wusste nicht anders wie ich das Problem beschreiben sollte)