Forse ti conviene mettere il main in una classe separata, così ti accorgi subito dell'erroreOriginariamente inviato da sirluca
ciao a tutti sto facendo un esercizio sulla programmazione multithread e non capisco un errore del compilatore
ecco il codice
l' errore è alla rigacodice:package esercizio2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* * 2. Esercizio (Somma) Scrivere un programma multithread in Java che esegue una funzione di somma tra due numeri interi inseriti dall’utente. Creare un thread separato per effettuare la somma e restituire il risultato in una variabile intera (globale) condivisa con il thread principale. Il thread principale deve sincronizzarsi sulla terminazione (join) del thread figlio Somma e stampare poi il risultato a video. [Suggerimento: Per la variabile condivisa, creare una classe involucro HoldInteger con dei metodi get/set.] */ public class MyThread implements Runnable { private int valore1; private int valore2; private HoldInteger somma; public MyThread(int valore1, int valore2, HoldInteger somma) { super(); this.valore1 = valore1; this.valore2 = valore2; this.somma = somma; } @Override public void run() { somma.setI(valore1 + valore2); } public class HoldInteger { private int i; public int getI() { return i; } public void setI(int i) { this.i = i; } } public static void main(String[] args) { BufferedReader input = new BufferedReader(new InputStreamReader( System.in)); HoldInteger somma = new HoldInteger(); try { int valore1 = Integer.parseInt(input.readLine()); int valore2 = Integer.parseInt(input.readLine()); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Thread t = new Thread(new MyThread(valore1, valore2, somma)); t.start(); try { t.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(somma.getI()); } }
e dicecodice:Thread t = new Thread(new MyThread(valore1, valore2, somma));
e altri errori... di java conosco la programmazione basa e non capisco perchè dovrebbe essere static ..
Ad ogni modo, stai cercando di accedere ad un attributo, valore1, da un metodo statico e questo non è permesso (se ragioni sul significato di static capisci subito il perché).
Comunque il tuo problema specifico è un altro: chiedi all'utente valore1 e valore2... Ma queste variabili nascono e muoiono all'interno del blocco try! Quando poi usi valore1 e valore2 per istanziare MyThread, quelle variabili non esistono più! E quindi trova valore1 e valore2 dichiarate a livello di classe, che però non sono utilizzabili perché non statiche...