|
| Forskel på Java i Linux og NT? Fra : Kenneth Ahn Jensen |
Dato : 13-05-01 22:19 |
|
Så er jeg her igen...
Jeg har siddet og svedt med noget [slam]kode, som ikke fungerer. Jeg
arbejder i Linux, med nyeste version af Java fra Blackdown.org.( 1.3.02
?)
Det besynderlige er bare at mit program fungerer fint under Windows
NT...
Det er noget trådprogrammering som kikser, og så tænkte jeg på om det er
et kendt problem, eller er det bare mig der har gjort noget forkert?
Mit problem er at start() metoden ikke kalder run() og returnerer heller
ikke - dvs. programmet hænger når det har kaldt GameServer.start().
Hvis jeg undlader at kalde start() og bare kører videre, fungerer alting
fint...
Min teori går på at Linux/Java kombinationen ikke kan lide at jeg
starter en tråd fra en tråd. (!) Kan det passe?
Al hjælp modtages med kyshånd.
Mvh
Kenneth
Her er eksemplet:
class GameServer extends Thread{
private Socket[] socketArray = new Socket[4];
// anvendes til sende BallUpdate objekter
ObjectOutputStream[] objOutStreamArray = new ObjectOutputStream[4];
// anvendes til at modtage XXX objekter
ObjectInputStream[] objInStreamArray = new ObjectInputStream[4];
BufferedReader in;
// Div variabler
private boolean isRunning = false;
// Bolden, som kampen handler om
Ball ball = new Ball( 0, 0, 500, 245, 256, 128 );
// DETTE OBJEKT IMPLEMENTEERER Runnable interfacet - og bliver dermed
til en tråd.
// for debugging purposes
String simonsays = "GameServer says: ";
boolean debugging = true;
// konstruktor
public GameServer ( Socket[] socketArray ) throws IOException {
for ( int i = 0; i < socketArray.length; i++) {
objOutStreamArray[i] = new ObjectOutputStream(
socketArray[i].getOutputStream() );
objInStreamArray[i] = new ObjectInputStream(
socketArray[i].getInputStream() );
}
start(); // HER GAAR DET GALT ! ! ! Start metoden
kalder aldrig run() og returnerer ikke.
}
public void run () {
try {
while (true){
for ( int i = 0; i < objOutStreamArray.length ; i++)
objOutStreamArray[i].writeObject( new BallUpdate(
ball.getX(), ball.getY(),
ball.getdX(), ball.getdY()) );
for ( int i = 0; i < objOutStreamArray.length ; i++)
objOutStreamArray[i].flush();
try{
Thread.sleep( 5000 );
if(debugging)
System.out.println( simonsays + "venter 5 sek...");
}
catch( InterruptedException I ){ }
}
}
catch(IOException e) {
System.out.println ( simonsays + "IOException");
}
catch(Exception ec){
System.out.println ( simonsays + "ClassNotFoundException");
}
}
}
| |
Lars (13-05-2001)
| Kommentar Fra : Lars |
Dato : 13-05-01 21:56 |
|
Hej Kenneth
At implementere Runnable giver ikke i sig selv en tråd, men garanterer blot,
at dit objekt har en run()-metode. Hvis du vælger denne løsning, skal du
altså selv lave tråden som følgende:
Thread myThread = new Thread(myRunnable);
myThread.start();
eller alternativt (hvis du ikke har brug for identifieren)
new Thread(myRunnable).start();
Dette skal placeres istedet for dit kald til start i constructoren (som jeg
forøvrigt ikke kan forstå at du kan compile, da der ikke er nogen
start()-metode.)
/Lars
"Kenneth Ahn Jensen" <kaj@itu.dk> skrev i en meddelelse
news:3AFEFA36.98A3E36F@itu.dk...
> Så er jeg her igen...
>
> Jeg har siddet og svedt med noget [slam]kode, som ikke fungerer. Jeg
> arbejder i Linux, med nyeste version af Java fra Blackdown.org.( 1.3.02
> ?)
> Det besynderlige er bare at mit program fungerer fint under Windows
> NT...
> Det er noget trådprogrammering som kikser, og så tænkte jeg på om det er
> et kendt problem, eller er det bare mig der har gjort noget forkert?
>
> Mit problem er at start() metoden ikke kalder run() og returnerer heller
> ikke - dvs. programmet hænger når det har kaldt GameServer.start().
> Hvis jeg undlader at kalde start() og bare kører videre, fungerer alting
> fint...
> Min teori går på at Linux/Java kombinationen ikke kan lide at jeg
> starter en tråd fra en tråd. (!) Kan det passe?
>
> Al hjælp modtages med kyshånd.
> Mvh
> Kenneth
>
>
>
> Her er eksemplet:
>
> class GameServer extends Thread{
>
> private Socket[] socketArray = new Socket[4];
>
> // anvendes til sende BallUpdate objekter
> ObjectOutputStream[] objOutStreamArray = new ObjectOutputStream[4];
>
> // anvendes til at modtage XXX objekter
> ObjectInputStream[] objInStreamArray = new ObjectInputStream[4];
>
> BufferedReader in;
>
> // Div variabler
> private boolean isRunning = false;
>
> // Bolden, som kampen handler om
> Ball ball = new Ball( 0, 0, 500, 245, 256, 128 );
> // DETTE OBJEKT IMPLEMENTEERER Runnable interfacet - og bliver dermed
> til en tråd.
>
> // for debugging purposes
> String simonsays = "GameServer says: ";
> boolean debugging = true;
>
> // konstruktor
> public GameServer ( Socket[] socketArray ) throws IOException {
>
> for ( int i = 0; i < socketArray.length; i++) {
> objOutStreamArray[i] = new ObjectOutputStream(
> socketArray[i].getOutputStream() );
> objInStreamArray[i] = new ObjectInputStream(
> socketArray[i].getInputStream() );
> }
> start(); // HER GAAR DET GALT ! ! ! Start metoden
> kalder aldrig run() og returnerer ikke.
> }
>
> public void run () {
> try {
> while (true){
> for ( int i = 0; i < objOutStreamArray.length ; i++)
> objOutStreamArray[i].writeObject( new BallUpdate(
> ball.getX(), ball.getY(),
> ball.getdX(), ball.getdY()) );
>
> for ( int i = 0; i < objOutStreamArray.length ; i++)
> objOutStreamArray[i].flush();
>
> try{
> Thread.sleep( 5000 );
> if(debugging)
> System.out.println( simonsays + "venter 5 sek...");
> }
> catch( InterruptedException I ){ }
> }
> }
> catch(IOException e) {
> System.out.println ( simonsays + "IOException");
> }
> catch(Exception ec){
> System.out.println ( simonsays + "ClassNotFoundException");
> }
>
> }
>
> }
>
>
>
>
| |
Lars (13-05-2001)
| Kommentar Fra : Lars |
Dato : 13-05-01 22:08 |
|
OK - lad mig lige korrigere mig selv, inden nogen andre gør det for mig. Jeg
havde ikke lige set, at din klasse nedarvede fra Thread - dit kald til start
er derfor selvfølgeligt OK.
"Lars" <svend@bent.dk> skrev i en meddelelse
news:9dms58$30t1$1@news.cybercity.dk...
> Hej Kenneth
>
> At implementere Runnable giver ikke i sig selv en tråd, men garanterer
blot,
> at dit objekt har en run()-metode. Hvis du vælger denne løsning, skal du
> altså selv lave tråden som følgende:
>
> Thread myThread = new Thread(myRunnable);
> myThread.start();
>
> eller alternativt (hvis du ikke har brug for identifieren)
>
> new Thread(myRunnable).start();
>
> Dette skal placeres istedet for dit kald til start i constructoren (som
jeg
> forøvrigt ikke kan forstå at du kan compile, da der ikke er nogen
> start()-metode.)
>
> /Lars
>
>
> "Kenneth Ahn Jensen" <kaj@itu.dk> skrev i en meddelelse
> news:3AFEFA36.98A3E36F@itu.dk...
> > Så er jeg her igen...
> >
> > Jeg har siddet og svedt med noget [slam]kode, som ikke fungerer. Jeg
> > arbejder i Linux, med nyeste version af Java fra Blackdown.org.( 1.3.02
> > ?)
> > Det besynderlige er bare at mit program fungerer fint under Windows
> > NT...
> > Det er noget trådprogrammering som kikser, og så tænkte jeg på om det er
> > et kendt problem, eller er det bare mig der har gjort noget forkert?
> >
> > Mit problem er at start() metoden ikke kalder run() og returnerer heller
> > ikke - dvs. programmet hænger når det har kaldt GameServer.start().
> > Hvis jeg undlader at kalde start() og bare kører videre, fungerer alting
> > fint...
> > Min teori går på at Linux/Java kombinationen ikke kan lide at jeg
> > starter en tråd fra en tråd. (!) Kan det passe?
> >
> > Al hjælp modtages med kyshånd.
> > Mvh
> > Kenneth
> >
> >
> >
> > Her er eksemplet:
> >
> > class GameServer extends Thread{
> >
> > private Socket[] socketArray = new Socket[4];
> >
> > // anvendes til sende BallUpdate objekter
> > ObjectOutputStream[] objOutStreamArray = new ObjectOutputStream[4];
> >
> > // anvendes til at modtage XXX objekter
> > ObjectInputStream[] objInStreamArray = new ObjectInputStream[4];
> >
> > BufferedReader in;
> >
> > // Div variabler
> > private boolean isRunning = false;
> >
> > // Bolden, som kampen handler om
> > Ball ball = new Ball( 0, 0, 500, 245, 256, 128 );
> > // DETTE OBJEKT IMPLEMENTEERER Runnable interfacet - og bliver dermed
> > til en tråd.
> >
> > // for debugging purposes
> > String simonsays = "GameServer says: ";
> > boolean debugging = true;
> >
> > // konstruktor
> > public GameServer ( Socket[] socketArray ) throws IOException {
> >
> > for ( int i = 0; i < socketArray.length; i++) {
> > objOutStreamArray[i] = new ObjectOutputStream(
> > socketArray[i].getOutputStream() );
> > objInStreamArray[i] = new ObjectInputStream(
> > socketArray[i].getInputStream() );
> > }
> > start(); // HER GAAR DET GALT ! ! ! Start metoden
> > kalder aldrig run() og returnerer ikke.
> > }
> >
> > public void run () {
> > try {
> > while (true){
> > for ( int i = 0; i < objOutStreamArray.length ; i++)
> > objOutStreamArray[i].writeObject( new BallUpdate(
> > ball.getX(), ball.getY(),
> > ball.getdX(), ball.getdY()) );
> >
> > for ( int i = 0; i < objOutStreamArray.length ; i++)
> > objOutStreamArray[i].flush();
> >
> > try{
> > Thread.sleep( 5000 );
> > if(debugging)
> > System.out.println( simonsays + "venter 5 sek...");
> > }
> > catch( InterruptedException I ){ }
> > }
> > }
> > catch(IOException e) {
> > System.out.println ( simonsays + "IOException");
> > }
> > catch(Exception ec){
> > System.out.println ( simonsays + "ClassNotFoundException");
> > }
> >
> > }
> >
> > }
> >
> >
> >
> >
>
>
| |
Kenneth Ahn Jensen (14-05-2001)
| Kommentar Fra : Kenneth Ahn Jensen |
Dato : 14-05-01 06:52 |
|
On Sun, 13 May 2001 23:08:07 +0200, "Lars" <svend@bent.dk> wrote:
>OK - lad mig lige korrigere mig selv, inden nogen andre gør det for mig. Jeg
>havde ikke lige set, at din klasse nedarvede fra Thread - dit kald til start
>er derfor selvfølgeligt OK.
Ja, og det sære er jo at det virker 100% efter hensigten på [skod] Windows NT, men tråden starter
aldrig når programmet afvikles på Linux platformen...
Jeg havde ikke regnet med at skulle blive gråhåret som 26 årig...
Kenneth
~~~~~~~~~~~~~~~~~
~ --- Seti@Home --- ~
~ 541WU/3645hrs ~
~ -( Join Team YETI )- ~
~~~~~~~~~~~~~~~~~
| |
Kenneth Ahn Jensen (14-05-2001)
| Kommentar Fra : Kenneth Ahn Jensen |
Dato : 14-05-01 20:44 |
|
Hmmm, det er næsten pinligt at indrømme...
Grunden til at programnmet ikke virkede er sandsynligvis at de fire
maskiner jeg har prøvet at køre det på, alle kører en firewall, som
åbenbart lukker af for den port som mit program har valgt at bruge... Nu
kører jeg det på nogle andre linux-maskiner, og der virker det fint.
Så jeg havde altså ikke fundet en bug alligevel.
Mvh
Kenneth
Kenneth Ahn Jensen wrote:
> Så er jeg her igen...
>
> Jeg har siddet og svedt med noget [slam]kode, som ikke fungerer. Jeg
> arbejder i Linux, med nyeste version af Java fra Blackdown.org.( 1.3.02
> ?)
> Det besynderlige er bare at mit program fungerer fint under Windows
> NT...
> Det er noget trådprogrammering som kikser, og så tænkte jeg på om det er
> et kendt problem, eller er det bare mig der har gjort noget forkert?
>
> Mit problem er at start() metoden ikke kalder run() og returnerer heller
> ikke - dvs. programmet hænger når det har kaldt GameServer.start().
> Hvis jeg undlader at kalde start() og bare kører videre, fungerer alting
> fint...
> Min teori går på at Linux/Java kombinationen ikke kan lide at jeg
> starter en tråd fra en tråd. (!) Kan det passe?
>
> Al hjælp modtages med kyshånd.
> Mvh
> Kenneth
>
| |
Martin Schou (14-05-2001)
| Kommentar Fra : Martin Schou |
Dato : 14-05-01 20:13 |
|
> Så jeg havde altså ikke fundet en bug alligevel.
Jamen det havde du da .. fejlen sad ca 40 centimeter bag tastaturet ...
;-p
/Hektor
| |
Lars Hansen (15-05-2001)
| Kommentar Fra : Lars Hansen |
Dato : 15-05-01 17:48 |
|
Det er fint at du har fået det til at køre, men jeg har selv prøvet
at køre blackdown, og jeg synes ikke helt at den holder.
IBM har en stor commitment til linux og java, og deres version
af JDK1.3 performer rigtigt godt
/Lars Bo Hansen
"Kenneth Ahn Jensen" <kaj@itu.dk> wrote in message
news:3B00356C.36B0EBEA@itu.dk...
> Hmmm, det er næsten pinligt at indrømme...
>
> Grunden til at programnmet ikke virkede er sandsynligvis at de fire
> maskiner jeg har prøvet at køre det på, alle kører en firewall, som
> åbenbart lukker af for den port som mit program har valgt at bruge... Nu
> kører jeg det på nogle andre linux-maskiner, og der virker det fint.
>
> Så jeg havde altså ikke fundet en bug alligevel.
>
> Mvh
> Kenneth
>
>
> Kenneth Ahn Jensen wrote:
>
> > Så er jeg her igen...
> >
> > Jeg har siddet og svedt med noget [slam]kode, som ikke fungerer. Jeg
> > arbejder i Linux, med nyeste version af Java fra Blackdown.org.( 1.3.02
> > ?)
> > Det besynderlige er bare at mit program fungerer fint under Windows
> > NT...
> > Det er noget trådprogrammering som kikser, og så tænkte jeg på om det er
> > et kendt problem, eller er det bare mig der har gjort noget forkert?
> >
> > Mit problem er at start() metoden ikke kalder run() og returnerer heller
> > ikke - dvs. programmet hænger når det har kaldt GameServer.start().
> > Hvis jeg undlader at kalde start() og bare kører videre, fungerer alting
> > fint...
> > Min teori går på at Linux/Java kombinationen ikke kan lide at jeg
> > starter en tråd fra en tråd. (!) Kan det passe?
> >
> > Al hjælp modtages med kyshånd.
> > Mvh
> > Kenneth
> >
>
| |
Troels Arvin (16-05-2001)
| Kommentar Fra : Troels Arvin |
Dato : 16-05-01 00:53 |
|
On Tue, 15 May 2001 18:48:22 +0200, "Lars Hansen" <spam@el-lal.dk> wrote:
> Det er fint at du har fået det til at køre, men jeg har selv prøvet at
> køre blackdown, og jeg synes ikke helt at den holder.
>
> IBM har en stor commitment til linux og java, og deres version af
> JDK1.3 performer rigtigt godt
I følge http://www.volano.com/report.html kommer det lidt an på, hvordan
man definerer "performer": Hvis man er interesseret i masser af
netværksforbindelser, så ser Blackdown's JRE noget bedre ud end IBMs.
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
|
|