Bonjour,
Je souhaite démarrer une application (SigarSmoke.jar) à partir d'un plugin. SigarSmoke.jar est censé lire puis réécrire un fichier YAML créé par mon plugin.
Pour cela j'utilise BufferedReader et BufferedWriter. Executé manuellement (le plugin tourne encore en arrière-plan), tout se déroule comme prévu mais quand l'application est lancée par le plugin, les BufferedReader et BufferedWriter ne fonctionne pas. Une histoire de permission?
J'ai ajouté ceci dans le code du plugin pour être sûr.
Toujours le même problème...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 smoke.setReadable(true); smoke.setWritable(true);
Voici le code de mon application:
Et voici un bout de code de mon plugin:
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
87
88
89
90
91
92
93
94
95
96 package io.github.jeremgamer.sigarsmoke; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFrame; import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.Mem; import org.hyperic.sigar.Sigar; import org.hyperic.sigar.SigarException; @SuppressWarnings("serial") public class SigarSmoke extends JFrame { //J'ai étendu à JFrame pour ne pas avoir à passer par un .bat public static int getCpuUsage() throws SigarException { Sigar sigar = new Sigar(); CpuPerc cpu = sigar.getCpuPerc(); double cpuUsage = cpu.getUser() * 100 + cpu.getSys() * 100 ; int display = (int)cpuUsage; return display; } public static int getMemUsagePercent() throws SigarException { Sigar sigar = new Sigar(); Mem mem = null; try { mem = sigar.getMem(); } catch (SigarException se) { se.printStackTrace(); } double MEMUse = mem.getUsedPercent(); int displayPercent = (int) MEMUse; return displayPercent; } public static long getMemUsage() throws SigarException { Sigar sigar = new Sigar(); Mem mem = null; try { mem = sigar.getMem(); } catch (SigarException se) { se.printStackTrace(); } long MEMUse = mem.getUsed() / 1024 / 1024; return MEMUse; } public static void answer() throws IOException, SigarException { File smoke = new File("smoke.yml"); smoke.setReadable(true); smoke.setWritable(true); FileReader fr; FileWriter fw; fr = new FileReader(smoke.getAbsoluteFile()); BufferedReader br = new BufferedReader(fr); String request = br.readLine(); br.close(); String returnedValue = null; fw = new FileWriter(smoke.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); if ( request.contains("cpu") ) { returnedValue = Integer.toString(getCpuUsage()); bw.write(returnedValue); bw.flush(); bw.close(); } if ( request.contains("ram") ) { returnedValue = getMemUsagePercent() + "% || " + getMemUsage() + "MB"; bw.write(returnedValue); bw.flush(); bw.close(); } bw.close(); } public SigarSmoke() throws IOException, SigarException { this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setVisible(true); //Pour voir si le programme se lance bien. En effet une fenêtre s'ouvre mais les flux, quand à eux, ne semblent pas s'ouvrir... answer(); } public static void main ( String args[] ) throws IOException, SigarException { new SigarSmoke(); } }
Une idée?
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 public void sendRequest(String request) throws IOException { File smoke = new File(plugin.getDataFolder() + "/smoke.yml"); if (!smoke.exists()) { smoke.createNewFile(); } smoke.setReadable(true); smoke.setWritable(true); FileWriter fw; fw = new FileWriter(smoke.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(request); bw.close(); try { Runtime.getRuntime().exec("cmd /c start " + plugin.getDataFolder() + "/SigarSmoke.jar"); } catch (IOException e) { } } public String getInfo() throws IOException { File smokeAnswer = new File(plugin.getDataFolder() + "/smoke.yml"); FileReader fr; fr = new FileReader(smokeAnswer.getAbsoluteFile()); BufferedReader br = new BufferedReader(fr); String info = br.readLine(); br.close(); return info; } }
Partager