September 2, 2002
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Jag har grymma problem med trådning. Jag tänkte ha en basklass (Applet) som allt ska köras ifrån och två subklasser med olika trådar. Den ena trådklassen ska ärva fr Thread och den andra ska implementera fr Runnable-gränssnittet.
Respektive tråd ska i en loop i run-metoden kunna skriva ut meddelandet Utskrift från tråd 1 och Utskrift från tråd 2 i programmets text-area. Utskriften ska göras en gång per sekund. Vid tryck på den ena knappen ska tråd 1 aktiveras och texten på knappen ska ändras till "Deaktivera utskrift från tråd 1". Ett tryck till på samma knapp ska deaktivera tråd 1 (det vill säga stoppa tråd 1 helt) och texten på knappen ska återställas till "Aktivera utskrift från tråd 1". Motsvarande gäller för den andra knappen men för tråd 2.
Ingenting funkar... jag är heeeeeeeeelt lost. Snälla någon hjälp
Så här ser min kod ut hittills:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
public class Uppgift4A extends Applet implements ActionListener {
private Label l = new Label("Tryck på valfri knapp för start ", Label.CENTER);
private Button ThreadOne = new Button ("Thread One");
private Button ThreadTwo = new Button ("Thread Two");
public void init() {
setLayout (new GridLayout(2,1)); //2 rader, 1 kolumn
Panel p = new Panel();
add(l); add(p);
p.add(ThreadOne); p.add(ThreadTwo);
setBackground(Color.white); //arbetsytan vit
l.setFont (new Font ("SansSerif", Font.ITALIC, 20));
ThreadOne.addActionListener (this);
ThreadTwo.addActionListener (this);
//ThreadOne.setEnabled (false);
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() == ThreadOne) {
l.setText("Thread One Pushed");
//ThreadOne.setText ("I'm pushed");
ThreadOne.setEnabled (false);
ThreadTwo.setEnabled (true);
}
else if (e.getSource() == ThreadTwo) {
l.setText("Thread TwoPushed");
ThreadTwo.setEnabled (false);
ThreadOne.setEnabled (true);
}
}
}
Så ena trådklassen (där jag lekt lite bara för att kolla om något fungerar... men inte då :
class ThreadOne implements Runnable {
JTextField t;
public ThreadOne (JTextField text) {
t = text;
}
public void run() {
int i = 0;
while (i<1000) {
t.setText (""+i);
i++;
}
}
}
GRYYYYYYYMT tacksam för hjälp av er programmeringsproffs
January 7, 2003
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
sofia wrote: Jag har grymma problem med trådning. Jag tänkte ha en basklass (Applet) som allt ska köras ifrån och två subklasser med olika trådar. Den ena trådklassen ska ärva fr Thread och den andra ska implementera fr Runnable-gränssnittet.
Respektive tråd ska i en loop i run-metoden kunna skriva ut meddelandet Utskrift från tråd 1 och Utskrift från tråd 2 i programmets text-area. Utskriften ska göras en gång per sekund. Vid tryck på den ena knappen ska tråd 1 aktiveras och texten på knappen ska ändras till "Deaktivera utskrift från tråd 1". Ett tryck till på samma knapp ska deaktivera tråd 1 (det vill säga stoppa tråd 1 helt) och texten på knappen ska återställas till "Aktivera utskrift från tråd 1". Motsvarande gäller för den andra knappen men för tråd 2.
Ingenting funkar... jag är heeeeeeeeelt lost. Snälla någon hjälp
Så här ser min kod ut hittills:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;public class Uppgift4A extends Applet implements ActionListener {
private Label l = new Label("Tryck på valfri knapp för start ", Label.CENTER);
private Button ThreadOne = new Button ("Thread One");
private Button ThreadTwo = new Button ("Thread Two");public void init() {
setLayout (new GridLayout(2,1)); //2 rader, 1 kolumn
Panel p = new Panel();
add(l); add(p);
p.add(ThreadOne); p.add(ThreadTwo);
setBackground(Color.white); //arbetsytan vit
l.setFont (new Font ("SansSerif", Font.ITALIC, 20));ThreadOne.addActionListener (this);
ThreadTwo.addActionListener (this);
//ThreadOne.setEnabled (false);
}public void actionPerformed (ActionEvent e) {
if (e.getSource() == ThreadOne) {
l.setText("Thread One Pushed");
//ThreadOne.setText ("I'm pushed");
ThreadOne.setEnabled (false);
ThreadTwo.setEnabled (true);
}else if (e.getSource() == ThreadTwo) {
l.setText("Thread TwoPushed");
ThreadTwo.setEnabled (false);
ThreadOne.setEnabled (true);
}}
}Så ena trådklassen (där jag lekt lite bara för att kolla om något fungerar... men inte då :
class ThreadOne implements Runnable {
JTextField t;public ThreadOne (JTextField text) {
t = text;
}public void run() {
int i = 0;
while (i<1000) {
t.setText (""+i);
i++;
}
}
}GRYYYYYYYMT tacksam för hjälp av er programmeringsproffs
du startar aldrig threaden ju (ThreadOne.start() ) sedan så kanske du måste uppdatrera textfälttet med .shw
January 7, 2003
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
sofia wrote: Jag har grymma problem med trådning. Jag tänkte ha en basklass (Applet) som allt ska köras ifrån och två subklasser med olika trådar. Den ena trådklassen ska ärva fr Thread och den andra ska implementera fr Runnable-gränssnittet.
Respektive tråd ska i en loop i run-metoden kunna skriva ut meddelandet Utskrift från tråd 1 och Utskrift från tråd 2 i programmets text-area. Utskriften ska göras en gång per sekund. Vid tryck på den ena knappen ska tråd 1 aktiveras och texten på knappen ska ändras till "Deaktivera utskrift från tråd 1". Ett tryck till på samma knapp ska deaktivera tråd 1 (det vill säga stoppa tråd 1 helt) och texten på knappen ska återställas till "Aktivera utskrift från tråd 1". Motsvarande gäller för den andra knappen men för tråd 2.
Ingenting funkar... jag är heeeeeeeeelt lost. Snälla någon hjälp
Så här ser min kod ut hittills:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;public class Uppgift4A extends Applet implements ActionListener {
private Label l = new Label("Tryck på valfri knapp för start ", Label.CENTER);
private Button ThreadOne = new Button ("Thread One");
private Button ThreadTwo = new Button ("Thread Two");public void init() {
setLayout (new GridLayout(2,1)); //2 rader, 1 kolumn
Panel p = new Panel();
add(l); add(p);
p.add(ThreadOne); p.add(ThreadTwo);
setBackground(Color.white); //arbetsytan vit
l.setFont (new Font ("SansSerif", Font.ITALIC, 20));ThreadOne.addActionListener (this);
ThreadTwo.addActionListener (this);
//ThreadOne.setEnabled (false);
}public void actionPerformed (ActionEvent e) {
if (e.getSource() == ThreadOne) {
l.setText("Thread One Pushed");
//ThreadOne.setText ("I'm pushed");
ThreadOne.setEnabled (false);
ThreadTwo.setEnabled (true);
}else if (e.getSource() == ThreadTwo) {
l.setText("Thread TwoPushed");
ThreadTwo.setEnabled (false);
ThreadOne.setEnabled (true);
}}
}Så ena trådklassen (där jag lekt lite bara för att kolla om något fungerar... men inte då :
class ThreadOne implements Runnable {
JTextField t;public ThreadOne (JTextField text) {
t = text;
}public void run() {
int i = 0;
while (i<1000) {
t.setText (""+i);
i++;
}
}
}GRYYYYYYYMT tacksam för hjälp av er programmeringsproffs
du skapar aldrig tråden!
klassen ThreadOne används aldrig eller skapas aldrig.
September 2, 2002
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Okej Nu har jag ändrat lite i koden. Kan någon hjälpa mig nu???
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.util.*;
public class HelpMe extends Applet implements Runnable, ActionListener {
private Label l = new Label("Tryck på valfri knapp för start ", Label.CENTER);
private Button b1 = new Button ("Thread One");
private Button b2 = new Button ("Thread Two");
public Thread ThreadOne = new Thread();
Thread ThreadTwo = new Thread();
public void init() {
setLayout (new GridLayout(2,1)); //2 rader, 1 kolumn
Panel p = new Panel();
add(l); add(p);
p.add(b1); p.add(b2);
setBackground(Color.white); //arbetsytan vit
l.setFont (new Font ("SansSerif", Font.ITALIC, 20));
b1.addActionListener (this);
b2.addActionListener (this);
//b1.setEnabled (false);
}
public void run() {
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() == b1) {
ThreadOne.start();
l.setText("Thread One Pushed");
//b1.setText ("I'm pushed");
b1.setEnabled (false);
b2.setEnabled (true);
System.out.println("Ettan tryckt");
}
else if (e.getSource() == b2) {
l.setText("Thread TwoPushed");
b2.setEnabled (false);
b1.setEnabled (true);
//b2.setText ("Jag är tryckt");
System.out.println("Tvåan tryckt");
}
}
}
May 8, 2001
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Nu funkar den men det händer inte så mkt förutom att det skrivs ut "Do something" iaf om man startar det som ett program (se main-metod) tills programmet stannas. Vet inte vad målet med uppgiften är men detta kanske hjälper på vägen!?
Snälla! Sariabler med liten begynnelsebokstav! T.ex. "ThreadOne" ska vara "threadOne".
Dessutom är det bra om man använder "Code" knappen när man postar kod så att den blir indenterad!
Ser ut som en uppgift jag gjorde på DSV i Kista för några år sen?
Lycka till!
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.util.*;
public class HelpMe extends Applet implements Runnable, ActionListener {
private Label l = new Label("Tryck på valfri knapp för start ", Label.CENTER);
private Button b1 = new Button ("Thread One");
private Button b2 = new Button ("Thread Two");
private Thread ThreadOne, ThreadTwo;
public void init() {
setLayout (new GridLayout(2,1)); //2 rader, 1 kolumn
Panel p = new Panel();
add(l); add(p);
p.add(b1); p.add(b2);
setBackground(Color.white); //arbetsytan vit
l.setFont (new Font ("SansSerif", Font.ITALIC, 20));
b1.addActionListener (this);
b2.addActionListener (this);
//b1.setEnabled (false);
// Skapa trådarna här så att du kan skicka med "this" till konstruktorn
// annars funkar det inte.
ThreadOne = new Thread( this );
ThreadTwo = new Thread( this );
}
public void run() {
while( true ) {
// Gör något (slutar aldrig)
System.out.println( "Do something" );
}
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() == b1) {
ThreadOne.start();
l.setText("Thread One Pushed");
//b1.setText ("I'm pushed");
b1.setEnabled (false);
b2.setEnabled (true);
System.out.println("Ettan tryckt");
}
else if (e.getSource() == b2) {
l.setText("Thread TwoPushed");
b2.setEnabled (false);
b1.setEnabled (true);
//b2.setText ("Jag är tryckt");
System.out.println("Tvåan tryckt");
}
}
/**
* Denna metod ska bort, bara för test
* Klassen måste ärva Frame om detta ska funka:
* public class HelpMe extends Frame implements Runnable, ActionListener {
*/
public static void main( String args[] ) {
HelpMe test = new HelpMe();
test.init();
test.setVisible( true );
}
}
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
May 8, 2001
![sp_UserOfflineSmall](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_UserOfflineSmall.png)
Jaha ja, nu läste jag frågan... Kommer mera!
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
1 Guest(s)
![sp_Information](https://nordichardware.se/wp-content/sp-resources/forum-themes/reboot/images/darkpack/sp_Information.png)