2017-03-26 2 views
1

je fais un simulateur de marché boursier et je continue à obtenir une erreur de chacun de mes 3 classes la première classe MYOSM l'erreur est:Stock Market Simulator Java GUI

"Cannot find symbol- class stock"

La seconde sorties de classe MarketTable:

Cannot find MarketDataModel

Et la troisième MarketDataModel de classe génère l'erreur:

Cannot find symbol- class stock

Ai-je allé WRO Quelque part dans mon code, j'ai vérifié plusieurs fois et je n'arrive pas à le localiser.

Voici mon code:

MYOSM Classe:

import javax.swing.*; 
import java.awt.*; 
import java.util.*; 

public class MYOSM extends JFrame implements Runnable { 

    Stock[] market = { 
    new Stock("JTree", 14.57), 
    new Stock("JTable", 17.44), 
    new Stock("JList", 16.44), 
    new Stock("JButton", 7.21), 
    new Stock("JComponent", 27.40) 
    }; 
    boolean monitor; 
    Random rg = new Random(); 
    Thread runner; 

    public MYOSM() { 
    // Not meant to be shown as a real frame 
    super("Thread only version . . ."); 
    runner = new Thread(this); 
    runner.start(); 
    } 


    public MYOSM(boolean monitorOn) { 
    super("Stock Market Monitor"); 
    setSize(400, 100); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    monitor = monitorOn; 

    getContentPane().add(new JLabel("Trading is active. " + 
      "Close this window to close the market."), 
      BorderLayout.CENTER); 
    runner = new Thread(this); 
    runner.start(); 
    } 

    public void run() { 
    while(true) { 
     int whichStock = Math.abs(rg.nextInt()) % market.length; 
     double delta = rg.nextDouble() - 0.4; 
     market[whichStock].update(delta); 
     if (monitor) { 
     market[whichStock].print(); 
     } 
     try { 
     Thread.sleep(1000); 
     } 
     catch(InterruptedException ie) { 
     } 
    } 
    } 

    public Stock getQuote(int index) { 
    return market[index]; 
    } 

    // This method returns the list of all the symbols in the market table 
    public String[] getSymbols() { 
    String[] symbols = new String[market.length]; 
    for (int i = 0; i < market.length; i++) { 
     symbols[i] = market[i].symbol; 
    } 
    return symbols; 
    } 

    public static void main(String args[]) { 
    MYOSM myMarket = new MYOSM(args.length > 0); 
    myMarket.setVisible(true); 
    } 
} 

classe MarketTable:

import java.awt.*; 
import javax.swing.*; 

public class MarketTable extends JFrame { 

    public MarketTable() { 
    super("Dynamic Data Test"); 
    setSize(300, 200); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 

    MarketDataModel mdm = new MarketDataModel(5); 

    mdm.setStocks(new int[] { 0, 1, 2 }); 

    JTable jt = new JTable(mdm); 
    JScrollPane jsp = new JScrollPane(jt); 
    getContentPane().add(jsp, BorderLayout.CENTER); 
    } 

    public static void main(String args[]) { 
    MarketTable mt = new MarketTable(); 
    mt.setVisible(true); 
    } 
} 

classe MarketDataModel:

import javax.swing.table.*; 
import javax.swing.*; 

public class MarketDataModel extends AbstractTableModel 
implements Runnable { 

    Thread runner; 
    MYOSM market; 
    int delay; 

    public MarketDataModel(int initialDelay) { 
    market = new MYOSM(); 
    delay = initialDelay * 1000; 
    Thread runner = new Thread(this); 
    runner.start(); 
    } 

    Stock[] stocks = new Stock[0]; 
    int[] stockIndices = new int[0]; 
    String[] headers = {"Symbol", "Price", "Change", "Last updated"}; 

    public int getRowCount() { return stocks.length; } 
    public int getColumnCount() { return headers.length; } 

    public String getColumnName(int c) { return headers[c]; } 

    public Object getValueAt(int r, int c) { 
    switch(c) { 
    case 0: 
     return stocks[r].symbol; 
    case 1: 
     return new Double(stocks[r].price); 
    case 2: 
     return new Double(stocks[r].delta); 
    case 3: 
     return stocks[r].lastUpdate; 
    } 
    throw new IllegalArgumentException("Bad cell (" + r + ", " + c +")"); 
    } 

    public void setDelay(int seconds) { delay = seconds * 1000; } 
    public void setStocks(int[] indices) { 
    stockIndices = indices; 
    updateStocks(); 
    fireTableDataChanged(); 
    } 

    public void updateStocks() { 
    stocks = new Stock[stockIndices.length]; 
    for (int i = 0; i < stocks.length; i++) { 
     stocks[i] = market.getQuote(stockIndices[i]); 
    } 
    } 

    public void run() { 
    while(true) { 

     updateStocks(); 


     fireTableRowsUpdated(0, stocks.length - 1); 
     try { Thread.sleep(delay); } 
     catch(InterruptedException ie) {} 
    } 
    } 
} 
+0

Il est difficile de dire sans voir la classe de stock, donc je devine. return getValueAt() est une méthode étrange car elle renvoie un objet plutôt qu'un double. avez-vous une variable LastUpdate Object en stock? Peut-être qu'il existe une méthode lastUpdate et que vous venez d'oublier le()? Postez votre classe de stock aussi. –

+0

Copie possible de [Que signifie une erreur de compilation "Impossible de trouver le symbole"?] (Http://stackoverflow.com/questions/25706216/what-does-a-cannot-find-symbol-compilation-error-mean) –

Répondre

0

Vous manque une classe d'actions Là. Devrait être quelque chose comme cela, je suppose:

public class Stock { 

public Stock(String string, double d) { 
     this.symbol = string; 
     this.price = d; 
    } 

    public String symbol; 
    public double price; 
    public double delta; 
    public String lastUpdate; 

    public void print() { 
     System.out.println(this); 
    } 

    public void update(double delta2) { 
     this.delta = delta2; 
    } 

    @Override 
    public String toString() { 
     StringBuilder builder = new StringBuilder(); 
     builder.append("Stock [symbol=").append(symbol).append(", price=").append(price).append(", delta=").append(delta).append(", lastUpdate=") 
       .append(lastUpdate).append("]"); 
     return builder.toString(); 
    } 
} 

Ou est-ce juste un autre paquet que les classes?

Aussi c'est bizarre que votre message d'erreur a "stock" en minuscules.

Avec la classe Stock ajoutée comme ci-dessus, j'ai réussi à démarrer votre code, mais je ne suis pas sûr de ce qu'il était censé faire. Je dois noter qu'il est mal écrit en général, avec quelques erreurs de base comme l'utilisation du paquet par défaut.