Varför kan jag inte skriva till en textfil i voidfunktioner som är "thread"-körda? - Java

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008

Varför kan jag inte skriva till en textfil i voidfunktioner som är "thread"-körda? - Java

Hej!

Jag kör Jnativehook. Det är ett bibliotek för att lyssna av tangentbordet och musen. Biblioteket fungerar både på Linux och Windows. Biblioteket använder sig av älskade C för att kommunicera med hårdvaran direkt.

Men problemet är att jag får ett error när jag kör den.

"
Exception in thread "JNativeHook Dispatch Thread" java.lang.NullPointerException
at java.io.FileOutputStream.<init>(FileOutputStream.java:203)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at java.io.FileWriter.<init>(FileWriter.java:78)
at excelkungen.Listener.writeState(Listener.java:94)
at excelkungen.Listener.nativeKeyPressed(Listener.java:31)
at org.jnativehook.GlobalScreen$EventDispatchTask.processKeyEvent(Unknown Source)
at org.jnativehook.GlobalScreen$EventDispatchTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
"

Det jag vill göra är att skriva till funktionen writeState("KP:" + NativeKeyEvent.getKeyText(e.getKeyCode())); bara för att logga vad jag trycker på. Inget annat!

Biblioteket hittar ni här:
https://github.com/kwhat/jnativehook
Min kod hittar ni här: http://pastebin.com/FYDAken6 - Kolla på rad 25. Varför fungerar det inte? Vadå "NullPointer"? Jag skickar visst något.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2008

@heretic16: När tilldelas variabeln macroPathFile?

writeState använder en FileWriter, och om macroPathFile är null får du förmodligen din NullPointerException där.

Rad 88. FileWriter file = new FileWriter(macroPathFile, true);

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jan 2007

public void writeState(String text) throws IOException
{
File file = new File(text);
// creates the file
if(!file.exists()){
file.createNewFile();
}

FileWriter fileW = new FileWriter(file);
fileW.write("\n");
fileW.append(text + "\n\r");
fileW.close();
}

Kör med en File i konstruktorn till FileWriter istället, så slipper du konstigheter. Happy coding!

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008
Skrivet av Razki:

@heretic16: När tilldelas variabeln macroPathFile?

writeState använder en FileWriter, och om macroPathFile är null får du förmodligen din NullPointerException där.

Rad 88. FileWriter file = new FileWriter(macroPathFile, true);

Citat:

package excelkungen;

import java.awt.AWTException;
import java.io.IOException;
import org.jnativehook.NativeHookException;

public class Main
{
public static void main(String[] args) throws AWTException, IOException, NativeHookException
{
Listener L = new Listener();
L.setMacroAttribut("/home/lubuntu/macro.txt", "P");
L.start();
}
}

Tydligen så fungerar det om jag sätter "/home/lubuntu/macro.txt" direkt till Listener.java klassen.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |