2017-03-26 12 views
1

私は株式市場シミュレータを作っていますし、私はエラーが私の3つのクラスのそれぞれからファーストクラスのMYOSMをエラーを取得しておく:株式市場シミュレータのJava GUI

"Cannot find symbol- class stock"

番目のクラスMarketTable出力:

Cannot find MarketDataModel

そして第三のクラスMarketDataModelがエラーを出力します

Cannot find symbol- class stock

私はWROを行っていますどこかで私のコードのどこかに何度もチェックしたところ、それを見つけられないようです。ここで

は私のコードです:

MYOSMクラス:

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); 
    } 
} 

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); 
    } 
} 

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

在庫クラスを見ることなく言うのは難しいので、私は推測しています。 getValueAt()はdouble型ではなくオブジェクトを返すので、奇妙なメソッドです。あなたは在庫にlastUpdateオブジェクト変数を持っていますか?たぶんlastUpdateメソッドがあり、あなたはちょうど()を忘れてしまったでしょうか? Stockクラスも投稿してください。 –

+0

[シンボルが見つかりません]というコンパイルエラーの意味は何ですか?](http://stackoverflow.com/questions/25706216/what-does-a-cannot-find-symbol-compilation-error-mean) –

答えて

0

あなたはストッククラスが欠落していますそこ。

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(); 
    } 
} 

それともそれだけでこれらのクラスとは異なるパッケージである:私は考え、このようなものでなければなりませんか?

また、エラーメッセージに小文字の「在庫」があります。

上記のようにStockクラスを追加すると、コードを開始することができましたが、そのコードが何をすべきか分かりません。私は、デフォルトパッケージの使用法のようないくつかの基本的な間違いで、一般的に記述されていないことに注意する必要があります。

関連する問題