20.02.2014 / 19:29 | |
Virus-ON Пользователь Сейчас: Offline
Имя: Макс Откуда: Чернигов Регистрация: 13.10.2011
| Ze88s, ... Маразм крепчал. Смотри выше, человек молния. |
20.02.2014 / 19:53 | |
Ze88s Пользователь Сейчас: Offline
Имя: Владимир Регистрация: 20.02.2014
| Virus-ON, так там же не j2me ну по крайней мере сервак может подойдет на "большой" джаве |
20.02.2014 / 21:14 | |
Misha Пользователь Сейчас: Offline
Имя: Миша Регистрация: 02.03.2012
| занялся немного JavaME помогите с проблемой потоков задача - функции чтения и записи в файл... void save(String s) я сделал, и он работает) не раз мне попадалась ошибка блокировки потоков при создании FileConnection в главном потоке, если же перенести его в другой, то программа продолжает работать с файлом без инициализированного FileConnection, Thread.join() не помогает - все намертво зависает... задача тут не просто void read(), а каким-то фигом реализовать String read(), чтобы возвратить данные вот мой код: Открыть спойлер Закрыть спойлер import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
public class MFile {
public String name;
public MFile(){
}
public void init(String name){
this.name = name;
}
public void save(String s){
Saver sa = new Saver();
sa.s = s;
sa.name = name;
Thread th = new Thread(sa);
th.start();
}
public String read(){
Reader r = new Reader();
Thread th = new Thread(r);
th.start();
String ret = r.read(name);
try{
th.interrupt();
} catch (Exception e){}
th = null;
r = null;
return ret;
}
class Saver implements Runnable {
public String s;
public String name;
public void run(){
try{
FileConnection fco = (FileConnection) Connector.open(name);
if(!fco.exists()){
fco.create();
}
DataOutputStream dos = fco.openDataOutputStream();
dos.writeUTF(s);
dos.close();
dos = null;
fco.close();
fco = null;
} catch (Exception e){e.printStackTrace();}
}
}
class Reader implements Runnable {
public void run(){
}
public String read(String name){
try{
FileConnection fc = (FileConnection) Connector.open(name);
InputStreamReader isr = new InputStreamReader(fc.openInputStream());
char[] temp = new char[1];
isr.read(temp);
isr.close();
isr = null;
fc.close();
fc = null;
return new String(temp);
} catch (Exception e){}
return "";
}
}
}
я даже пытался заводить дофигасколько переменных например completed, но главный поток тупо зависает не смотря даже на то, что второй поток завершился никогда раньше не работал с файловой системой на JavaME... они намудрили много лишнего из-за своей защиты с вопросом на разрешение к доступу к файлам) Открыть спойлер Закрыть спойлер Warning: To avoid potential deadlock, operations that may block, such as networking, should be performed in a different thread than the commandAction() handler.
Изменено Misha (20.02 / 21:20) (всего 2 раза) |
20.02.2014 / 22:21 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Misha, 1. Уж не в стандартном эмуляторе ты тестируешь? Там специально стоит настройка на более сильную защиту. Нужно сменить на другую и тогда всё будет работать и в главном потоке. 2. Недавно решал точно такую же проблему, помогли wait() / notify().
__________________
let live |
21.02.2014 / 00:02 | |
Misha Пользователь Сейчас: Offline
Имя: Миша Регистрация: 02.03.2012
| спасибо) не мог бы подробнее написать? например: void read(){ ... th.join(); } ... public void run(){ ... } дальше я все пойму) плохо понимаю связь потоков, synchronized и volatile) до сих пор не пойму почему сделали interrupt вместо stop |
21.02.2014 / 00:42 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Misha, public String read() {
synchronized (this) {
try { wait(); } catch (InterruptedException ex) { }
}
return text
}
//
text = "Обновлено";
synchronized(this) { notify(); }
__________________
let live |
21.02.2014 / 07:34 | |
Misha Пользователь Сейчас: Offline
Имя: Миша Регистрация: 02.03.2012
| спасибо еще раз) вечером попробую, уже в школу опаздываю...
|
21.02.2014 / 09:02 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Misha, здоров ли ты сегодня? Вот оно, вот оно, развращающее действие "больших" языков. На чтение/запись по отдельному классу, да ещё и каждый со своим потоком. Красота |
21.02.2014 / 17:13 | |
Misha Пользователь Сейчас: Offline
Имя: Миша Регистрация: 02.03.2012
| DominaN, изначально у меня были это все в виде фукнкций, но пришлось эксперементировать с Threadam'и потому что одна из этих операций блокирует главный поток...
|
21.02.2014 / 17:59 | |
Misha Пользователь Сейчас: Offline
Имя: Миша Регистрация: 02.03.2012
| все ровно не понимаю как сделать у меня в главном потоке создается новый поток, потом я запрашиваю функцию того класса, и при этом действия происходят в 1 потоке получается надо как-то с помощью экземпляра Thread вызвать ту функцию или попытаться установить синхронизацию с методом run, который запускается не на прямую, а через Thread.start() |