Anfängerfrage

Afixl

Mitglied
Hallo zusammen,


ich bin noch totaler Anfänger und ich hätte ein paar Fragen. Ich möchte ein Programm programmieren, welches die Zeit, die man pro Tag am Computer verbringt, misst und in "Tageseinträgen" speichert und bestenfalls visualisiert. Das Programm soll außerdem eine Autostart Funktion haben.


Nun zu meiner Frage:

Welche Bereiche in Java muss man beherrschen, um solch ein Programm zu programmieren oder kommt solch ein Programm für einen Anfänger erstmals gar nicht erst in Frage? Bisher kenn ich nämlich nur die ersten Grundlagen (Datentypen, Variablen, Operatoren). Oder eigenet sich mögicherweise Java nicht für solch ein Programm?

Vielen Dank im Vorraus,

Afixl
 
Hey 🙂
Ich bin grundsätzlich immer der Meinung, dass man sich so früh wie möglich beim Programmieren an eine relativ große Herausforderung trauen sollte, denn dabei lernt man häufig äußerst viel, besonders am Anfang!
Versuch es auf jeden Fall mal!

Um das ganze umzusetzen, musst du dich etwas mit der Erfassung der Zeit beschäftigen (Timestamp, long, etc.).
Da du die Tageseinträge ja speichern willst, musst du dich also entscheiden, ob du sie als Datei speicherst (Dann musst du dich ein bisschen mit java.io (FileReader, FileWriter, die Buffered Versionen der beiden, File, etc.) auseinandersetzen) oder in einer Datenbank (In dem Fall müsstest du dich mit Datenbanken(ich würde MySQL oder MongoDB empfehlen) beschäftigen).
Wenn du das alles also noch grafisch darstellen willst, musst du noch Swing, bzw. besser(weil es neuer ist und es so aussieht, als ob Oracle Swing sich selbst überlässt): JavaFX beherrschen.
Viel Glück 🙂
MfG MagicZerda
 
Autostart hat nichts mit dem Programm selbst zu tun, das Betriebssystem kümmert sich darum.
Du musst also dem Betriebssystem mitteilen, dein Programm in die Autostart-Liste mit aufzunehmen oder es daraus zu entfernen.
Als DB hab ich mittlerweile auch Firebird zu schätzen gelernt, aber das ist natürlich Geschmackssache.
 
welches die Zeit, die man pro Tag am Computer verbringt, misst
Oh, Du musst die Logdateien lesen (winlogon + winlogout) das ist nicht trivial.
Dann musst Du die Differenz bilden und den Startpunkt das ist trivial.
Dann musst Du alles in einer "Struktur" festhalten das ist semi-trivial.

Alternativ dazu wenn dein Progarmm eh automatisch starten soll
dann nicht per Logdateien sondern per den Startpunkt.... das ist trivial.

Ich überlege gerade das kann ich eigentlich nachher mal tun wenn noch bissel Zeit ist....

In der Summe: Ja das ist machbar
 
Falls gewünscht, kannst du damit weiter machen (zum Beispiel die Uhrzeit formatieren):
Java:
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JTextArea;

/**
 *
 */
public class OnlTime {
    
    public static void main(String[] args) {
        OnlTime ot = new OnlTime();
    }
    
    long[] now = null;
    ArrayList<long[]> times = new ArrayList<>();
    JFrame frame = new JFrame();
    JTextArea area = new JTextArea();
    
    public OnlTime() {
        frame.addWindowListener(new WindowListener() {
            @Override
            public void windowActivated(WindowEvent e) {
                now = new long[]{System.currentTimeMillis(), 0};
            }
            
            @Override
            public void windowClosed(WindowEvent e) {
                
            }
            
            @Override
            public void windowClosing(WindowEvent e) {
            }
            
            @Override
            public void windowDeactivated(WindowEvent e) {
            }
            
            @Override
            public void windowDeiconified(WindowEvent e) {
            }
            
            @Override
            public void windowIconified(WindowEvent e) {
            }
            
            @Override
            public void windowOpened(WindowEvent e) {
            }
        });
        frame.addWindowFocusListener(new WindowFocusListener() {
            @Override
            public void windowGainedFocus(WindowEvent e) {
                now[1] = System.currentTimeMillis();
                times.add(now);
                now = new long[]{System.currentTimeMillis(), 0};
                
                setTextToSth();
            }
            
            @Override
            public void windowLostFocus(WindowEvent e) {
            }
        });
        
        frame.add(area);
        frame.setSize(444, 444);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
    
    private void setTextToSth() {
        long l = 0;
        for (int i = 0; i < times.size(); i++) {
            long[] time = times.get(i);
            area.append(time[0] + " " + time[1]);
            area.append("\n");
            if (i < times.size() - 1) {
                l += times.get(i + 1)[0] - times.get(i)[0];
            }
        }
        area.append("Zeit insg. " + (l / 1000) + " Sekunden\n");
        area.append("\n");
    }
}[

jf-1.PNG
 
Vielen Dank für großartigen Hilfe und Mühe!🙂 Tut mir leid, dass ich mich jetzt erst melde, hätte nicht mit mehr Antworten gerchnet! Werde den Code auf jeden Fall mit meinem vergleichen, sobald er fertig ist (Muss mich noch in die Basics rein arbeiten).
 
Ok mache das, dafür ist ein Beispiel ja da, damit man davon etwas absehen/vergleichen kann! 🙂
Es dauert etwas bis du zum Profi wirst. 🙄
 

Zurück
Oben