Bonjour,

Je tente de faire un bot wikipedia sur msn, comme le bot encarta sur msn.

J'utilise cette librairie :

http://java-jml.sourceforge.net/


Mais l'exemple de base semble mal fonctionner :

les arguments semblent décalé. J'ai légèrement modifié l'exemple de base pour trouver d'ou venait le problème.


Je ne comprend pas très bien à quoi sert cette ligne :


BasicMessenger messenger = (BasicMessenger) Class.forName(args[0]).newInstance();

elle sert à récuperer le nom de la classe, non? Du coup j'ai tenté :

BasicMessenger messenger = new BasicMessenger();

et

BasicMessenger messenger = (BasicMessenger) Class.forName("BasicMessenger").newInstance();

Mais cela ne fonctionne pas.

voilà l'exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
/*
 * Copyright 2004-2005 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.sf.jml.example;
 
import net.sf.jml.MsnMessenger;
import net.sf.jml.impl.MsnMessengerFactory;
 
/**
 * @author Roger Chen
 */
public class BasicMessenger {
 
   private String email;
   private String password;
 
   public String getEmail() {
       return email;
   }
 
   public void setEmail(String email) {
       this.email = email;
   }
 
   public String getPassword() {
       return password;
   }
 
   public void setPassword(String password) {
       this.password = password;
   }
   protected void initMessenger(MsnMessenger messenger) {
   }
 
   public void start() {
       //create MsnMessenger instance
       MsnMessenger messenger = MsnMessengerFactory.createMsnMessenger(email,
               password);
 
       //MsnMessenger support all protocols by default
       //messenger.setSupportedProtocol(new MsnProtocol[] {
MsnProtocol.MSNP8 });
 
       //default init status is online,
       //messenger.getOwner().setInitStatus(MsnUserStatus.BUSY);
 
       //log incoming message
       messenger.setLogIncoming(true);
 
       //log outgoing message
       messenger.setLogOutgoing(true);
 
       initMessenger(messenger);
       messenger.login();
   }
 
   public static void main(String[] args) throws Exception {
       if (args.length != 3) {
           System.out.println("Usage: java messengerClassName email password");
           System.out.println("arg 0 "+args[0]);
           System.out.println("arg 1 "+args[1]);
           System.out.println("arg 2 "+args[2]);
           return;
       }
 
 
       BasicMessenger messenger = (BasicMessenger) Class.forName(args[0])
                 .newInstance();
       messenger.setEmail(args[1]);
       messenger.setPassword(args[2]);
       messenger.start();
   }
}


et j'obtient ce résultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
$java net.sf.jml.example.BasicMessenger  adresse@hotmail.com password
Usage: java messengerClassName email password
arg 0 adresse@hotmail.com
arg 1 password
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
       at net.sf.jml.example.BasicMessenger.main(BasicMessenger.java:74)
Après avoir tenté de mettre le nom de la classe directement dans le code, de mettre le login et pass également dans le code, cela ne marche pas... que pourrai-je faire pour régler ce problème?

Auriez vous une piste svp?


Merci pour votre attention.