Manujaya Premathilaka Ответов: 0

Окно Java SWT перестает отвечать на запросы


Я реализую программу сокетов на java. Сервер считывает файл журнала и отправляет его клиенту строка за строкой. Клиент отобразит полученные строки в полученном заказе в окне SWT. До сих пор программа работает нормально. Но если я нажимаю где-то на рабочем столе или в окне SWT, программа застревает. Любая идея, чтобы решить эту проблему. Заранее спасибо!

Исходный код окна SWT:

public class Client1Interface extends Composite {
	private static Text rowsPerSec;
	private static Text displayArea;
	private static Label lblRowsPerSecond;
	private static Button btnMainButton;
	private static Button btnExitButton;
	private static Client1Impl client1Impl;
	
	private static final String NUMBER_OF_ROWS_PER_SECOND = "Number of Rows/Second :";
	private static final String ENTER_AUTHENTICATION = "Enter Authentication :";
	private static final String AUTHENTICATE = "Authenticate";
	private static final String ENTER = "Enter";
	private static final String EXIT = "Exit";
	private static final String CLIENT_ADDRESS = "127.0.0.1";
	
	
	
	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setLayout(new GridLayout(1, false));
		
		Client1Interface client1Interface = new Client1Interface(shell, SWT.NONE);
		
		//Starting client service
		client1Impl = new Client1Impl(CLIENT_ADDRESS, 9090);

		//setting actions for main button
		btnMainButton.addListener(SWT.Selection, new Listener() {	
			@Override
			public void handleEvent(Event arg0) {
				// TODO Auto-generated method stub
				actionOnMainButton();
			}
		});
		
		btnExitButton.addListener(SWT.Selection, new Listener() {
			
			@Override
			public void handleEvent(Event event) {
				// TODO Auto-generated method stub
				client1Impl.getPrintWriter().println(EXIT);
				client1Impl.getPrintWriter().flush();
				
				display.dispose();
			}
		});
		
		
		shell.pack();
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	/**
	 * Create the composite.
	 * @param parent
	 * @param style
	 */
	public Client1Interface(Composite parent, int style) {
		super(parent, style);
//		setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
		setLayout(new GridLayout(6, false));
		
		lblRowsPerSecond = new Label(this, SWT.NONE);
		GridData gd_lblRowsPerSecond = new GridData(SWT.CENTER, SWT.CENTER, true, true, 4, 3);
		gd_lblRowsPerSecond.widthHint = 142;
		gd_lblRowsPerSecond.heightHint = 30;
		lblRowsPerSecond.setLayoutData(gd_lblRowsPerSecond);
		lblRowsPerSecond.setText(ENTER_AUTHENTICATION);
		
		rowsPerSec = new Text(this, SWT.BORDER);
		rowsPerSec.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 2, 3));
		
		btnMainButton = new Button(this, SWT.NONE);
		GridData gd_btnMainButton = new GridData(SWT.CENTER, SWT.CENTER, true, true, 5, 2);
		gd_btnMainButton.widthHint = 113;
		btnMainButton.setLayoutData(gd_btnMainButton);
		btnMainButton.setText(AUTHENTICATE);
		
		btnExitButton = new Button(this, SWT.NONE);
		GridData gd_btnExitButton = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 2);
		//gd_btnExitButton.heightHint = 31;
		gd_btnExitButton.widthHint = 76;
		btnExitButton.setLayoutData(gd_btnExitButton);
		btnExitButton.setText(EXIT);
		
		displayArea = new Text(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL );
//		GridData gd_displayArea = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
		GridData gd_displayArea = new GridData(SWT.CENTER, SWT.CENTER, false, true, 6, 3);
		gd_displayArea.widthHint = 768;
		gd_displayArea.heightHint = 300;
		displayArea.setLayoutData(gd_displayArea);
		
	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	public static void actionOnMainButton() {
		String line;
		
		if(btnMainButton.getText().trim().equalsIgnoreCase(AUTHENTICATE)) {
			
			if( client1Impl.authenticateUser(rowsPerSec.getText().trim())) {
				lblRowsPerSecond.setText(NUMBER_OF_ROWS_PER_SECOND);
				rowsPerSec.setText("");
				btnMainButton.setText(ENTER);
			}
		}
		else {
			
			client1Impl.getPrintWriter().println(rowsPerSec.getText().trim());
			client1Impl.getPrintWriter().flush();
			
			try {
				displayArea.setText(client1Impl.getBufferedReader().readLine() + "\n");
				
				while(! (line = client1Impl.getBufferedReader().readLine()).equalsIgnoreCase(EXIT)) {
					displayArea.append(line + "\n");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}
}


Что я уже пробовал:

Я попробовал использовать Java Swing, но он не будет печатать строку в окне

0 Ответов