• 28 631 online
  • 1 123 348 medlemmar
  • 58 320 180 inlägg
2017-09-10, 22:04
  #6949
Moderator
Protons avatar
Citat:
Ursprungligen postat av ozyrecon
Har lite kod till ett tidtagarur som jag hittade i en övningsbok. Jag är ganska ny på Java så om någon har gjort en liknande kanske kan visa hur man verkligen får igång klockan när man trycker på start. Är inte alls med på hur den metoden skall skrivas. Här är klasser för själva klockan samt GUI och en main.
Här är stegen som ska uppfyllas. Har läst om trådar så är införstådd hur det fungerar.

-When the start button is pressed. Create a new thread that do the following in the
run method. Sleep for 100ms and call the appropriate method in a stopwatch object.
Run this as an infinite loop until stop has been pressed.

- After each clock tick update the time of the stopwatch.
- When stop is pressed, the timer thread should stop. Note that the proper way to
stop a running thread is to interrupt it and then let the thread exit in a controlled way.
Never use terminate operation if you can avoid it.
- When reset is pressed the time should be set to 0:0:0.0 again.


Kod:
import java.awt.EventQueue;
import javax.swing.JFrame;



public class StopWatch {
    private WatchGUI myGui;
    private int hours;
    private int min;
    private int sec;
    private int dsec; //1/10 second
    
    public StopWatch(){
        //initiate time
        hours=0;
        min=0;
        sec=0;
        dsec=0;
        //create GUI
        myGui = new WatchGUI(this);
        EventQueue.invokeLater(() -> {
            myGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            myGui.setVisible(true);
        });
    }
    
    public void start(){
        System.out.println("start");
    }
    
    public void stop(){
        System.out.println("stop");
    }
     
    public void reset(){
        System.out.println("reset");
    }
    
    public void tick(){
        System.out.println("tick");
    }
}

Kod:
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;

public class WatchGUI extends JFrame{
    private StopWatch myWatch; //need a reference to signal input
    private JTextArea textArea; //write status text
    private JLabel timeLabel; //the time
    
    public WatchGUI(StopWatch sWatch){
        myWatch=sWatch;
        
        setTitle("StopWatch");
        setSize(500,300);
        
        //ctreate buttons to control stopwatch
        JButton startButton=new JButton("Start");
        JButton stopButton=new JButton("Stop");
        JButton resetButton=new JButton("Reset");
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(startButton);
        buttonPanel.add(stopButton);
        buttonPanel.add(resetButton);
        add(buttonPanel,BorderLayout.NORTH);
        //add listener to each button
        GUIListener startAction= new GUIListener("Start");
        startButton.addActionListener(startAction);
        GUIListener stopAction= new GUIListener("Stop");
        stopButton.addActionListener(stopAction);
        GUIListener resetAction= new GUIListener("Reset");
        resetButton.addActionListener(resetAction);
        
        //add a textArea to print status
        JPanel tPanel= new JPanel();
        textArea = new JTextArea(10,44);
        tPanel.add(textArea);
        add(tPanel,BorderLayout.SOUTH);
        timeLabel=new JLabel("00:00:00.0");
        timeLabel.setFont(new Font("Serif", Font.PLAIN, 48));
        JPanel timePanel= new JPanel();
        timePanel.add(timeLabel);
        add(timePanel,BorderLayout.CENTER);
    }
    
    public void writeStatus(String text){
        textArea.append(text);
    }
    
    public void writeTime(String time){
        timeLabel.setText(time);
    }
    
    private class GUIListener implements ActionListener {
        private String text;
        
        public GUIListener(String message){
            text=message;
        }
        
        @Override
        public void actionPerformed(ActionEvent event){
            //notify in status that a button is clicked
            writeStatus(getCurrentTimeStamp());
            writeStatus(text);
            writeStatus(" button pressed\n");
            //notify my stopwatch that a button ha been clocked
            if(text=="Start")
                myWatch.start();
            if(text=="Stop")
                myWatch.stop();
            if(text=="Reset")
                myWatch.reset();
        }
        
        public String getCurrentTimeStamp() {
            SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");//dd/MM/yyyy
            Date now = new Date();
            String strDate = sdfDate.format(now);
            strDate+=": ";
            return strDate;
        }
    }
}

Kod:
 public static void main(String[] args) {
       //create stopwatch
       StopWatch swatch= new StopWatch();
    }
    
Ja så vad är problemet?

Du skriver att du vet hur trådar funkar, ändå finns det ingen kod för att lägga stoppuret i sin egen tråd.

Ditt GUI kommer troligen behöva implementera interfacet Runnable för att kunna starta en tråd, eftersom det redan ärver från en jframe, läs på om hur du skapar trådar så bör det framgå tydligare vad du behöver göra.
Citera
2017-09-16, 13:39
  #6950
Medlem
Tjena! Håller på med java i skolan och har koden:

import se.itu.systemet.storage.ProductLine;
import se.itu.systemet.storage.ProductLineFactory;
import se.itu.systemet.domain.Product;

import java.util.List;
import java.util.Iterator; // If you want to try looping with an Iterator


public class TestingObjects {
public static void main(String[] args) {

Product aProduct = new Product("Lillan", 79.00, 122.00, 99);
Product anotherProduct = new Product("Lillen", 67.00, 112.00, 98);

}
}

Men när jag ska compila får jag följande:

$ javac TestingObjects.java
TestingObjects.java:1: error: package se.itu.systemet.storage does not exist
import se.itu.systemet.storage.ProductLine;
^
TestingObjects.java:2: error: package se.itu.systemet.storage does not exist
import se.itu.systemet.storage.ProductLineFactory;
^
TestingObjects.java:3: error: package se.itu.systemet.domain does not exist
import se.itu.systemet.domain.Product;
^
TestingObjects.java:12: error: cannot find symbol
Product aProduct = new Product("Lillan", 79.00, 122.00, 99);
^
symbol: class Product
location: class TestingObjects
TestingObjects.java:12: error: cannot find symbol
Product aProduct = new Product("Lillan", 79.00, 122.00, 99);
^
symbol: class Product
location: class TestingObjects
TestingObjects.java:13: error: cannot find symbol
Product anotherProduct = new Product("Lillen", 67.00, 112.00, 98);
^
symbol: class Product
location: class TestingObjects
TestingObjects.java:13: error: cannot find symbol
Product anotherProduct = new Product("Lillen", 67.00, 112.00, 98);
^
symbol: class Product
location: class TestingObjects
7 errors

Vad gör jag för fel?
Citera
2017-09-16, 14:36
  #6951
Moderator
Protons avatar
Citat:
Ursprungligen postat av wmathyy
Tjena! Håller på med java i skolan och har koden:

import se.itu.systemet.storage.ProductLine;
import se.itu.systemet.storage.ProductLineFactory;
import se.itu.systemet.domain.Product;

import java.util.List;
import java.util.Iterator; // If you want to try looping with an Iterator


public class TestingObjects {
public static void main(String[] args) {

Product aProduct = new Product("Lillan", 79.00, 122.00, 99);
Product anotherProduct = new Product("Lillen", 67.00, 112.00, 98);

}
}

Men när jag ska compila får jag följande:

$ javac TestingObjects.java
TestingObjects.java:1: error: package se.itu.systemet.storage does not exist
import se.itu.systemet.storage.ProductLine;
^
TestingObjects.java:2: error: package se.itu.systemet.storage does not exist
import se.itu.systemet.storage.ProductLineFactory;
^
TestingObjects.java:3: error: package se.itu.systemet.domain does not exist
import se.itu.systemet.domain.Product;
^
TestingObjects.java:12: error: cannot find symbol
Product aProduct = new Product("Lillan", 79.00, 122.00, 99);
^
symbol: class Product
location: class TestingObjects
TestingObjects.java:12: error: cannot find symbol
Product aProduct = new Product("Lillan", 79.00, 122.00, 99);
^
symbol: class Product
location: class TestingObjects
TestingObjects.java:13: error: cannot find symbol
Product anotherProduct = new Product("Lillen", 67.00, 112.00, 98);
^
symbol: class Product
location: class TestingObjects
TestingObjects.java:13: error: cannot find symbol
Product anotherProduct = new Product("Lillen", 67.00, 112.00, 98);
^
symbol: class Product
location: class TestingObjects
7 errors

Vad gör jag för fel?
Första felet är att du uppenbarligen inte läst https://www.flashback.org/announcement.php?f=210, gör det innan nästa postning tack.

Andra felet beror på att de JARfiler med dessa komponenter inte ligger i din CLASSPATH eller nånstans där kompilatorn kan hitta dem, har du laddat hem dessa JAR-filer? Det är nämligen nån slags tredjepartsgrej och ingår inte som standard i java.
Citera
2017-09-16, 14:37
  #6952
Medlem
Citat:
Ursprungligen postat av wmathyy
Tjena! Håller på med java i skolan och har koden:

Vad gör jag för fel?


Problemet är att programmet inte kan hitta klassen Product, som ska ligga i paketet se.itu.systemet.domain, som den inte hittar. Se till så att du har tillgång till alla javafiler och att de ligger på rätt ställe.

ps. se till att använda CODE eller PHP taggar runt din kod så att den förblir indenterad. Sen kan du även ha den inom SPOILER taggar så att det går att minimera och inte ta upp så stor plats.
Citera