phnx85 Skrevet 21. september 2004 Del Skrevet 21. september 2004 Som dere ser så skal dette programmet være et net send program. Ja jeg vet det finnes mange slike, men jeg lager det bare for å lære java koding Anyways.. Problemet ligger i at IOExeption må kastes for at Runtime skal fungere, men KnappeLytter klarer tydelivis å oppdage at jeg har kastet IOExeption i main. Det fungerer heller ikke å kaste det i KnappeLytter fordi det må kastes i main (slik jeg har forstått det værtfall) Hva kan jeg gjøre for å få Runtime til å fungere? import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; class vindu1 extends JFrame { private static final String standardtekst = ""; private JTextField mottakerFelt = new JTextField(15); private JTextField antallGangerFelt = new JTextField(15); private JTextArea tekstfelt = new JTextArea (10, 20); private JButton sendknapp = new JButton("Send"); private JButton omknapp = new JButton("Om"); public vindu1(String tittel) { setTitle(tittel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout(5,5)); getContentPane().add(new MottakerPanel(), BorderLayout.NORTH); getContentPane().add(new TekstomraadePanel(), BorderLayout.CENTER); getContentPane().add(new KnappePanel(), BorderLayout.SOUTH); pack(); } private class MottakerPanel extends JPanel { public MottakerPanel() { setLayout(new GridLayout(2, 2, 5, 5)); add(new JLabel("Mottaker:", JLabel.RIGHT)); add(mottakerFelt); add(new JLabel("Antall:", JLabel.RIGHT)); add(antallGangerFelt); } } private class TekstomraadePanel extends JPanel { public TekstomraadePanel() { tekstfelt.setLineWrap(true); tekstfelt.setWrapStyleWord(true); tekstfelt.setEditable(true); tekstfelt.setText(standardtekst); JScrollPane rullefelt = new JScrollPane(tekstfelt); add(rullefelt); } } private class KnappePanel extends JPanel { public KnappePanel() { KnappeLytter knappelytteren = new KnappeLytter(); sendknapp.addActionListener(knappelytteren); sendknapp.setEnabled(true); sendknapp.setMnemonic('S'); add(sendknapp); KnappeLytter1 omknapplytter = new KnappeLytter1(); omknapp.addActionListener(omknapplytter); omknapp.setEnabled(true); omknapp.setMnemonic('S'); add(omknapp); } } //Her ligger problemet. Når jeg skal kjøre cmd.exe så får jeg bare feilmelding i kompilator at IOExeption må kastes. private class KnappeLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { String mottaker = mottakerFelt.getText(); // String antallGang = antallGang.getText(); String tekst = tekstfelt.getText(); Process proc = Runtime.getRuntime().exec("cmd /c net send " + mottaker + " " + tekst); } } private class KnappeLytter1 implements ActionListener { public void actionPerformed(ActionEvent om) { JOptionPane.showMessageDialog(null, "Programmet er laget av:\n- phoen|x \n- ventreC "); } } } class vindu { public static void main(String[] args) throws IOException { vindu1 etVindu = new vindu1("Net send power"); etVindu.setVisible(true); } } Lenke til kommentar
anderlin Skrevet 21. september 2004 Del Skrevet 21. september 2004 Kan main kaste unntak? Det hørtes rart ut, spør du meg. Prøv heller: public static void main(String[] args) { try { vindu1 etVindu = new Vindu1("Net send power"); etVindu.setVisible(true); } catch (IOException e) { System..out.println(e); } } Nå leste jeg ikke hele programmet ditt, men jeg skjønner ikke hvordan main kan kaste unntak. Hvordan skulle det evt fanges? Lenke til kommentar
phnx85 Skrevet 21. september 2004 Forfatter Del Skrevet 21. september 2004 Som du ser her så kastes IOException i main import java.io.*; import javax.swing.JOptionPane; public class Example { public static void main (String[]args) throws IOException { String mottakLest = JOptionPane.showInputDialog ("Mottaker"); String tekstLest = JOptionPane.showInputDialog ("Tekst"); Process proc = Runtime.getRuntime().exec("cmd /c net send " + mottakLest + " " + tekstLest); System.exit(0); } } For at du skal slippe å lese hele programmet så kan jeg forklare hva det skal gjøre. Et vindu med 3 ruter i kommer opp. En hvor du skriver mottaker, en med hvor mange ganger meldingen skal sendes og en med selve teksten. Send knappen skal starte cmd.exe og skrive "net send + mottaker + tekst" Lenke til kommentar
Hårek Skrevet 21. september 2004 Del Skrevet 21. september 2004 Som anderlin sier så skal det ikke gjøres slik. Har du ikke forsøkt å gjøre som han foreslår? Lenke til kommentar
MailMan13 Skrevet 21. september 2004 Del Skrevet 21. september 2004 Hvis du ønsker at main() skal stoppe når noe skjer må du stoppe programmet manuelt: try{ Process proc = Runtime.getRuntime().exec("cmd /c net send " + mottaker + " " + tekst); } catch(IOException e) { System.out.println("Kunne ikke sende melding, avslutter..."); System.exit(-1); } Grunnen til det er at koden som kjøres når en 'event' trigges kalles ikke av main(), men av en eller annen tråd i JVM'et, følgelig ligger ikke main() på stacken under tråden og kan heller ikke fange opp Exception som den kaster. For at du skal kunne kaste et Exception til en metode må de ligge rett over/under hverandre. Lenke til kommentar
mar Skrevet 1. oktober 2004 Del Skrevet 1. oktober 2004 Er vell mulig å lage en klasse som arver fra ThreadGroup der man lager sin egen variant av uncaughtException. Da vill det være mulig å fange opp unntak i andre tråder. Er nok ikke en løsning trådstarter bør bruke i dette tilfellet. Tenkte bare jeg skulle informere om at det lar seg gjøre. Har ikke testet dette selv, men på papiret ser det ut som om det skal fungere ganske greit. 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å