joenohr Skrevet 19. juni 2005 Del Skrevet 19. juni 2005 Er det noen av dere her som har vært borti et Applet som kan hente f.eks. headlines fra en nyhetstabell vha. f.eks. PHP og deretter presentere dem en etter en... Tenker en effekt a`la det man får av <marquee> bare at hver headline rykke inn og blir stående f.eks. i 2 sek før neste vises. Helst noe opensource. Lenke til kommentar
bakrull Skrevet 21. juni 2005 Del Skrevet 21. juni 2005 Dette er ikke ved hjelp at php (skjønner ikke hvorfor du skal ha det), og heller ikke med en "marquee"-effekt. Det er kun en timer som bytter teksten i en JLabel hvert 2. sekund. Databasedriver, url til databasen, brukernavn og passord må selvsagt byttes ut. import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import java.sql.*; public class NewsViewer extends JApplet{ private Vector<String> news; private JLabel text; private int counter; public void start(){ setSize(300, 50); Container contPane = getContentPane(); contPane.setBackground(Color.black); contPane.setForeground(Color.white); setContentPane(contPane); try{ handleDB(); }catch(Exception e){} showGUI(); } public void handleDB() throws Exception{ String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/news"; Class.forName(driver).newInstance(); Connection forbindelse = DriverManager.getConnection(url, "brukernavn", "passord"); Statement setning = forbindelse.createStatement(); ResultSet rs = setning.executeQuery("select * from newstable"); news = new Vector<String>(); while (rs.next()){ news.addElement(rs.getString("newstext")); } } public void showGUI(){ text = new JLabel(); text.setForeground(Color.gray); add(text); javax.swing.Timer tmr = new javax.swing.Timer(2000, new TimerListener()); tmr.start(); } private class TimerListener implements ActionListener{ public void actionPerformed(ActionEvent a){ if (counter < news.size()){ text.setText("" + news.elementAt(counter)); counter++; }else{ counter = 0; text.setText("" + news.elementAt(counter)); counter++; } } } } Lenke til kommentar
joenohr Skrevet 22. juni 2005 Forfatter Del Skrevet 22. juni 2005 Hjertelig takk for kodeeksemplet, -men jeg får et problem når jeg benytter koden. Nemlig at det eneste jeg får opp er en svart boks. Har selvfølgelig byttet ut sqladressen, bruker og passord samt endret queryen slik at den passer meg. news.addElement(rs.getString("overskrift")); har jeg også endret... satte inn overskrift da jeg antar at det er en kolonne i tabellen min han leter etter her? Lenke til kommentar
bakrull Skrevet 22. juni 2005 Del Skrevet 22. juni 2005 stemmer det du sier ja..rart at du ikke får opp tekst. Sikker på at kommunikasjonen med databasen går helt knirkefritt ? Lenke til kommentar
w3edr5t Skrevet 22. juni 2005 Del Skrevet 22. juni 2005 Eksemplet er greit nok, men fjern handleDB metoden og alle referanser til mysql. Man lar ikke en applet gjøre oppslag direkte i databasen fytti rakkern. Istedet for handleDB() ha en metode omtrent som dette loadNews() { news.addElement(getParameter("newsitem1")); news.addElement(getParameter("newsitem2")); news.addElement(getParameter("newsitem3")); } Deretter i php siden hvor applet lastes: <applet .... ....> <param name="newsitem1" value="Nyhet 1 tekst"> <param name="newsitem2" value="Nyhet 2 tekst"> <param name="newsitem3" value="Nyhet 3 tekst"> </applet> I php siden les fra databasen og fyll i tekstene dynamisk. Lykke til, Terje Lenke til kommentar
bakrull Skrevet 22. juni 2005 Del Skrevet 22. juni 2005 Man lar ikke en applet gjøre oppslag direkte i databasen fytti rakkern. Er ganske ny i javasammenheng, så jeg kan ikke så mye om verken det ene eller det andre. Er det usikkert fordi det er lett å decompile class-filen slik at man ser passord og brukernavn ? Lenke til kommentar
joenohr Skrevet 22. juni 2005 Forfatter Del Skrevet 22. juni 2005 Man lar ikke en applet gjøre oppslag direkte i databasen fytti rakkern. Er ganske ny i javasammenheng, så jeg kan ikke så mye om verken det ene eller det andre. Er det usikkert fordi det er lett å decompile class-filen slik at man ser passord og brukernavn ? Her er et eksempel på hvordan det blir seende ut http://dev.kjerringoy.no/test benytter bare følgende kode i HTML fila... <applet code="NewsViewer.class"> <param name="newsitem1" value="Nyhet 1 tekst"> <param name="newsitem2" value="Nyhet 2 tekst"> <param name="newsitem3" value="Nyhet 3 tekst"> </applet> public void loadNews() { news.addElement(getParameter("newsitem1")); news.addElement(getParameter("newsitem2")); news.addElement(getParameter("newsitem3")); } pluss resten av koden selvfølgelig... Lenke til kommentar
bakrull Skrevet 22. juni 2005 Del Skrevet 22. juni 2005 (endret) Hvis du skal gjøre som w3edr5t foreslo, må du slette hele metoden "handleDB()" og bytte ut try { handleDB(); } catch(Exception exception) { } med loadNews(); i start()-metoden. Ser nå at det kan være skummelt å koble seg direkte til en database i en applet, siden man (som jeg i dette tilfellet) lett kan finne ut username/password til databasen som brukes. (legg merke til at du da må hente inn data fra databasen inn til ei php-side, noe som jeg ikke kan noe om, men kanskje w3edr5t kan bistå deg med den kunnskapen) Endret 22. juni 2005 av bakrull Lenke til kommentar
joenohr Skrevet 22. juni 2005 Forfatter Del Skrevet 22. juni 2005 Hvis du skal gjøre som w3edr5t foreslo, må du slette hele metoden "handleDB()" og bytte ut try { handleDB(); } catch(Exception exception) { } med loadNews(); i start()-metoden. Ser nå at det kan være skummelt å koble seg direkte til en database i en applet, siden man (som jeg i dette tilfellet) lett kan finne ut username/password til databasen som brukes. (legg merke til at du da må hente inn data fra databasen inn til ei php-side, noe som jeg ikke kan noe om, men kanskje w3edr5t kan bistå deg med den kunnskapen) Det har jeg gjort - akkurat slik du forklarer.. likevel får jeg kun den sorte boksen. Jeg bruker JCreator for å lage programmet, men jeg undrer... når jeg lager en Java Applet via file->new-> create applet så lager den en init metode også. Mener å huske fra programmeringen på skolen at det var påkrevd... Imidlertid så limer jeg kun inn koden du skrev, rett frem, når jeg forsøker å kompilere nå. Kan det være noe gærnt jeg gjør her? ALL KODEN NÅ ER SLIK -> import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; import java.sql.*; public class NewsViewer extends JApplet{ private Vector<String> news; private JLabel text; private int counter; public void init(){ } public void start(){ setSize(300, 50); Container contPane = getContentPane(); contPane.setBackground(Color.black); contPane.setForeground(Color.white); setContentPane(contPane); try{ loadNews(); }catch(Exception e){} showGUI(); } public void loadNews() { news.addElement(getParameter("newsitem1")); news.addElement(getParameter("newsitem2")); news.addElement(getParameter("newsitem3")); } public void showGUI(){ text = new JLabel(); text.setForeground(Color.green); add(text); javax.swing.Timer tmr = new javax.swing.Timer(2000, new TimerListener()); tmr.start(); } private class TimerListener implements ActionListener{ public void actionPerformed(ActionEvent a){ if (counter < news.size()){ text.setText("" + news.elementAt(counter)); counter++; }else{ counter = 0; text.setText("" + news.elementAt(counter)); counter++; } } } } Lenke til kommentar
bakrull Skrevet 22. juni 2005 Del Skrevet 22. juni 2005 (endret) Etter en del prøving og feiling fant jeg feilkilden. Når du fjerna metoden handleDB() så fjerna du også deklarasjonen av vectoren news. Legg til news = new Vector<String>(); Øverst i loadNews()-metoden, så skal det fungere. (Den logoen din på 2,4 mb er forøverig unødvendig stor. En filstørrelse på en tiendel hadde vært godt nok) Endret 22. juni 2005 av bakrull Lenke til kommentar
joenohr Skrevet 22. juni 2005 Forfatter Del Skrevet 22. juni 2005 Etter en del prøving og feiling fant jeg feilkilden. Når du fjerna metoden handleDB() så fjerna du også deklarasjonen av vectoren news. Legg til news = new Vector<String>(); Øverst i loadNews()-metoden, så skal det fungere. (Den logoen din på 2,4 mb er forøverig unødvendig stor. En filstørrelse på en tiendel hadde vært godt nok) hehe, i know men det er bare for testing og feiling foreløpig og i utgangspunktet på lokal webserver så jeg har ikke orket å krympe den enda.. annet enn med width og height param. nå må jeg hive meg rundt å prøve løsningen din Lenke til kommentar
w3edr5t Skrevet 23. juni 2005 Del Skrevet 23. juni 2005 Hei igjen, Jeg testet linken overfor og applet'en laster ikke med feilen. java.lang.ClassFormatError: NewsViewer (Bad magic number) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at sun.applet.AppletClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.applet.AppletClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.applet.AppletClassLoader.loadCode(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.plugin.AppletViewer.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Mulig at dette forårsakes av at du har kompilert applet'en med java 1.5. Det betyr at alle som benytter 1.4 eller eldre (eller Microsoft sin vm som er versjon 1.1.x) ikke kan se appleten. Prøv å kompilere med target=1.1 F.eks "javac -target 1.1 Foo.java" Hvordan er badetemperaturen på Kjerringøy for tiden? Lenke til kommentar
bakrull Skrevet 23. juni 2005 Del Skrevet 23. juni 2005 Virker helt fint til meg, men jeg har da selv lagt inn 1.5. Hvorfor er microsoft så seine med å tilby nye java-versjoner ? Lenke til kommentar
w3edr5t Skrevet 23. juni 2005 Del Skrevet 23. juni 2005 Det har pågått endel rettssaker mellom Sun og Microsoft angående java opp gjennom årene. Jeg vet ikke detaljene men det ser ut til at Microsoft ikke lengre fikk videreutvikle sin VM og sluttet å distribuere den for et par år siden eller så. Søk på google for detaljer. Allikevel er den fortsatt i bruk blant mange brukere, særlig blant større bedrifter. Som en konsekvens av dette er det vanlig at man skriver applets som kjører på både den gamle MS java og nyere versjoner fra andre leverandører. Derfor kompilerer man med target 1.1. mvh Terje Lenke til kommentar
willbend Skrevet 26. juni 2005 Del Skrevet 26. juni 2005 (endret) Man kan jo bare decompile class filen så har man passordet til databasen? Java applets og database kan ikke være bra. Endret 26. juni 2005 av willbend Lenke til kommentar
bakrull Skrevet 26. juni 2005 Del Skrevet 26. juni 2005 Vi kom fram til det samme litt tidligere i denne posten Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå