帧只出现在java的某些时候

时间:2014-08-09 23:33:34

标签: java user-interface

由于某种原因(看似完全独立于代码),我程序的框架只会出现一些(可能是20%)的时间。如果我只是连续点击运行,我最终会成功显示帧,但它永远不会重复。这有没有发生在其他人身上?我非常怀疑这与代码有关,但以防万一

public class Trader{

public static Trader INSTANCE = new Trader();
JTextArea msgBox;
ApiController m_controller;

Connection connect;
Quotes quotes;

ArrayList<String> m_acctList = new ArrayList();


public static void main(String[] args) {
    INSTANCE.run();
}


public  void run(){
    connect = new Connection();
}



public ArrayList<String> accountList()  { return m_acctList; }
public ApiController controller()       { return m_controller; }
public JFrame frame()           { return connect.frame; }

}

下一堂课

 public class Connection implements IConnectionHandler{

static int port = 4001;
Quotes quotes;

JFrame frame;
CPanel panel;

boolean connected = false;

JTextArea logIn = new JTextArea();
JTextArea logOut = new JTextArea();
JTextArea msgBox = new JTextArea();

Logger loggerIn = new Logger(logIn);
Logger loggerOut = new Logger(logOut);

ApiController m_controller = new ApiController(this, loggerIn, loggerOut);

final ArrayList<String> m_acctList = new ArrayList<String>();

Connection(){
    frame = new JFrame("Trader");
    panel = new CPanel();
    frame.add(panel);
    frame.setSize(800,400);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

class CPanel extends JComponent{

    Point frameLoc = frame.getLocation();
    Dimension frameSize = frame.getSize();

    JLabel text = new JLabel("Messages");

    JScrollPane messages = new JScrollPane(msgBox);


    CPanel(){

        setLayout(null);

        add(text);
        text.setBounds(frameLoc.x+5, frameLoc.y+5, 
                text.getPreferredSize().width, text.getPreferredSize().height);

        add(messages);
        msgBox.setEditable(false);
        msgBox.setLineWrap(true);

        messages.setBounds(text.getLocation().x, text.getLocation().y+text.getSize().height+10, 
                720, 300);


        m_controller.connect(null, port, 0);

    }


}


 @Override public void connected() {
    show( "connected");

    m_controller.reqCurrentTime( new ApiController.ITimeHandler() {
        @Override public void currentTime(long time) {
            show( "Server date/time is " + Formats.fmtDate(time * 1000) );
        }
    });

    m_controller.reqBulletins( true, new ApiController.IBulletinHandler() {
        @Override public void bulletin(int msgId, Types.NewsType newsType, String message, String exchange) {
            String str = String.format( "Received bulletin:  type=%s  exchange=%s", newsType, exchange);
            show( str);
            show( message);
        }
    });    

      //  Quotes quotes = new Quotes();
}

@Override public void disconnected() {
    show( "disconnected");
}

@Override public void accountList(ArrayList<String> list) {
    show( "Received account list");
    m_acctList.clear();
    m_acctList.addAll( list);
}

@Override public void error(Exception e) {
    show( e.toString() );
}

@Override public void message(int id, int errorCode, String errorMsg) {
    show( id + " " + errorCode + " " + errorMsg);
}

@Override public void show( final String str) {
    SwingUtilities.invokeLater( new Runnable() {
        @Override public void run() {
            msgBox.append(str);
            msgBox.append( "\n\n");

            Dimension d = msgBox.getSize();
            msgBox.scrollRectToVisible( new Rectangle( 0, d.height, 1, 1) );
        }
    });
}



private static class Logger implements ILogger{
    final private JTextArea msgBox;

    Logger(JTextArea area){
        msgBox = area;
    }

    @Override public void log(final String str) {
        SwingUtilities.invokeLater( new Runnable() {
            @Override public void run() {
//                  m_area.append(str);
//                  
//                  Dimension d = m_area.getSize();
//                  m_area.scrollRectToVisible( new Rectangle( 0, d.height, 1, 1) );
            }
        });
    }

    }
 }

最后

public class Quotes {

int numberOfStocks = 0;
JTextArea msgBox = Trader.INSTANCE.connect.msgBox;
String symbol;

File file = new File("/Users/spencerclayman/Desktop/IB_API/API_Data/stockList.txt");

ArrayList<quote> stockList = new ArrayList();
Quotes(){

    msgBox.append("Getting stock quotes");
    try(Scanner input = new Scanner(file);){

       while(input.hasNextLine()){
            symbol = input.nextLine();
            newStock(newContract(symbol));
        }
    }
    catch(Exception ex){msgBox.append("Error getting quotes");}

    try{wait(10000);}catch(Exception ex){msgBox.append("error waiting - quote");}

    for(int i = 0; i < numberOfStocks() -1 ; i++){

        msgBox.append(stockList.get(i).m_description
        + " - " + stockList.get(i).m_last +"\n");
    }
}




void newStock( NewContract contract) {
    quote stock = new quote(contract.description());
    stockList.add(stock);
    Trader.INSTANCE.controller().reqTopMktData(contract, "", false, stock);
}

void newStock( quote stock) {
    stockList.add(stock);
}

public void desubscribe() {
    for (quote stock : stockList) {
        Trader.INSTANCE.controller().cancelTopMktData(stock);
    }
}




public int numberOfStocks(){

    try(Scanner input = new Scanner(file);){

        while(input.hasNextLine()){
            numberOfStocks++;
            input.nextLine();
        }
    }
    catch(Exception ex){msgBox.append("Error getting symbols");}

    return numberOfStocks;
}



static class quote extends TopMktDataAdapter{

            String m_description;
    double m_bid;
    double m_ask;
    double m_last;
    long m_lastTime;
    int m_bidSize;
    int m_askSize;
    double m_close;
    int m_volume;
    boolean m_frozen;

            quote(String description){ 
                m_description = description;

            }



            public String change() {
        return m_close == 0 ? null : fmtPct( (m_last - m_close) / m_close);
    }

        @Override public void tickPrice( NewTickType tickType, double price, int canAutoExecute) {
    switch( tickType) {
            case BID:
                m_bid = price;
                break;
            case ASK:
                m_ask = price;
                break;
            case LAST:
                m_last = price;
                break;
            case CLOSE:
                m_close = price;
                break;
        }
    }

        @Override public void tickSize( NewTickType tickType, int size) {
        switch( tickType) {
            case BID_SIZE:
                m_bidSize = size;
                break;
            case ASK_SIZE:
                m_askSize = size;
                break;
            case VOLUME:
                m_volume = size;
                break;
        }
    }

        @Override public void tickString(NewTickType tickType, String value) {
        switch( tickType) {
            case LAST_TIMESTAMP:
                m_lastTime = Long.parseLong( value) * 1000;
                break;
        }
    }

        @Override public void marketDataType(Types.MktDataType marketDataType) {
        m_frozen = marketDataType == Types.MktDataType.Frozen;
    } 

}




    public NewContract newContract(String symbol){
        NewContract c = new NewContract();

        c.symbol(symbol);
        c.secType(Types.SecType.STK);
        c.exchange("SMART");
        c.currency("USD");

        return c;
    }


 }

我非常怀疑代码与它有什么关系。我在IDE中遇到了一个问题。

0 个答案:

没有答案