[Tease Program] Tease-AI Java (1.4)

Webteases are great, but what if you're in the mood for a slightly more immersive experience? Chat about Tease AI and other offline tease software.

Moderator: 1885

LoRemen

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by LoRemen »

<HELP> (Maybe tagging certain kinds of responses in this thread helps newcomers like me to better search for help)
Hello, nice try to program a personal teaser.
It is full of problems however (deprecated Nashorn, no HiDPI (or proper scaling regardless of screen resolution), too many dependencies, etc.), but with trial and error one actually CAN get it to at least show up; so i started Mischevious, and no pictures came up:
06:29:18 PM SEVERE: Matching url file for path ../../Images/System/URL files/*.txt does not exist.
The directory hierarchy from /Images DOES exist, but i don't know where the searcher is located, so ../.. might be wrong.
I already found posts lamenting individual files could not be found, but without a solution anyway.
Can somebody lend meaning to this error?
LoRemen

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by LoRemen »

Vaugemind727 wrote: Sat Mar 14, 2020 11:52 pm
GodDragon wrote: Sat Mar 14, 2020 10:50 pm
Vaugemind727 wrote: Sat Mar 14, 2020 10:05 pm

Thanks

You need an account, what exactly am I downloading here?
Okay you can download java13 without an account: https://www.oracle.com/java/technologie ... loads.html
Java 11 is end of life which is why it requires an account.
You are downloading this: https://en.wikipedia.org/wiki/Java_Development_Kit
"You will also need Java 11. " in the main post needs changings.
You may be able to instead install the OpenJDK: https://jdk.java.net/13/
( Without any fuss and way fewer clicks ;-) )
GodDragon
Explorer At Heart
Explorer At Heart
Posts: 795
Joined: Sun Jun 11, 2017 4:30 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by GodDragon »

Vaugemind727 wrote: Sun Mar 15, 2020 6:05 pm Is there a "iam a retard" installation guide. I have Java downloaded but I have no idea how to get anything working.

I'm guessing a lot of people come to the thread and dissapear because there arn't insanly clear instructions.

Do we need to follow this guide: https://www.youtube.com/watch?v=zTW-sBTUlT0
Usually you should be able to just double click the jar file of TAJ after you've downloaded and installed java.

If that doesn't work here is an extract from the main post:

- Check the system messages in cmd/Terminal. Try to do this on Windows: open cmd (windowskey + r) type cmd and press enter. Navigate to your TAJ director (where the java file is located). Type "driveletter:" (example: "D:") and press enter if you need to change your drive for that and then do "cd folder/folder2/folder3/..." and press enter again. Then use

Code: Select all

 java -jar TeaseAI.jar
inside the folder where your installation is placed and post if any error shows up in cmd.

For this to work you need Java to be in your system path:
https://www.javatpoint.com/how-to-set-path-in-java
Or you can replace "java" with the path to your java installation bin folder: Like:

Code: Select all

"C:\Program Files\Java\jdk1.6.0_23\bin" -jar TeaseAI.jar
Important are the quotes around the path. Keep them.
LoRemen wrote: Sun Mar 15, 2020 6:00 pm <HELP> (Maybe tagging certain kinds of responses in this thread helps newcomers like me to better search for help)
Hello, nice try to program a personal teaser.
It is full of problems however (deprecated Nashorn, no HiDPI (or proper scaling regardless of screen resolution), too many dependencies, etc.), but with trial and error one actually CAN get it to at least show up; so i started Mischevious, and no pictures came up:
06:29:18 PM SEVERE: Matching url file for path ../../Images/System/URL files/*.txt does not exist.
The directory hierarchy from /Images DOES exist, but i don't know where the searcher is located, so ../.. might be wrong.
I already found posts lamenting individual files could not be found, but without a solution anyway.
Can somebody lend meaning to this error?
You can't do anything about Nashorn being deprecated. It was build before Java announced they aren't gonna continue with Nashorn and now every personality is written in JavaScript which means this will always be a part of TAJ.
I am no GUI designer and I hate it. It works for me, GUI isn't too important as long as all the button work for me. TAI isn't pretty either.
The dependencies are needed and auto-download so where is the problem?

I don't know about the mischevious folder. This is a piece of code from Mischevious so it's not related to TAJ. But when creating a url file inside the personality the root folder is the personality. So ../../ is fine to get to the TAJ installation folder. However question is: Is there at least one txt file inside the Images/System/URL files/ folder? And your file system might be case sensitive. The folder is called URL Files for me and inside Mischevious it is looking for "URL files". You should not rename the folder but instead replace all occurrencies in Mischevious with URL Files instead of URL files
LoRemen

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by LoRemen »

GodDragon wrote: Sun Mar 15, 2020 7:59 pm
  • You can't do anything about Nashorn being deprecated. It was build before Java announced they aren't gonna continue with Nashorn and now every personality is written in JavaScript which means this will always be a part of TAJ.
  • I am no GUI designer and I hate it. It works for me, GUI isn't too important as long as all the button work for me. TAI isn't pretty either.
  • The dependencies are needed and auto-download so where is the problem?
  • Fair
  • :lol: I don't like GUIs either; maybe i'll look into a scaling solution (at least for text)…
  • Programs should be minimal, and the abundand downloads at first startup are excessive ;-)
    But at least they auto-install. …per java version? None the matter, just bothers me :unsure:
GodDragon wrote: Sun Mar 15, 2020 7:59 pm […] your file system might be case sensitive. […] You should not rename the folder but instead replace all occurrencies in Mischevious with URL Files instead of URL files
YESSS :-O Unbelievable
Sed to the rescue:

Code: Select all

find Mischevious -type f -print0|xargs -0 sed -i 's/URL files/URL Files/g'
GodDragon
Explorer At Heart
Explorer At Heart
Posts: 795
Joined: Sun Jun 11, 2017 4:30 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by GodDragon »

LoRemen wrote: Mon Mar 16, 2020 7:02 pm
GodDragon wrote: Sun Mar 15, 2020 7:59 pm
  • You can't do anything about Nashorn being deprecated. It was build before Java announced they aren't gonna continue with Nashorn and now every personality is written in JavaScript which means this will always be a part of TAJ.
  • I am no GUI designer and I hate it. It works for me, GUI isn't too important as long as all the button work for me. TAI isn't pretty either.
  • The dependencies are needed and auto-download so where is the problem?
  • Fair
  • :lol: I don't like GUIs either; maybe i'll look into a scaling solution (at least for text)…
  • Programs should be minimal, and the abundand downloads at first startup are excessive ;-)
    But at least they auto-install. …per java version? None the matter, just bothers me :unsure:
GodDragon wrote: Sun Mar 15, 2020 7:59 pm […] your file system might be case sensitive. […] You should not rename the folder but instead replace all occurrencies in Mischevious with URL Files instead of URL files
YESSS :-O Unbelievable
Sed to the rescue:

Code: Select all

find Mischevious -type f -print0|xargs -0 sed -i 's/URL files/URL Files/g'

I can deal with the GUI when I have Spicy in a good state. Right now that is my main focus.
TAJ is minimal. We have thought about making a plugin like system for stuff like E-Stim, Text to speech etc. in the future so those dependencies aren't forced upon you anymore but right now since these are features that are supported out of the box they are obviously required.
User avatar
bakak17
Explorer
Explorer
Posts: 8
Joined: Thu Mar 26, 2020 5:44 pm
Gender: Male
Sexual Orientation: Bisexual/Bi-Curious
I am a: Switch
Location: Netherlands

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by bakak17 »

Sooooo I'm too lazy to scroll through 42 pages of replies, etc.. is the link in the original edited post correct and working?
-bakak17
Spielers
Explorer At Heart
Explorer At Heart
Posts: 309
Joined: Mon Jan 09, 2017 8:26 pm
Gender: Male
Sexual Orientation: Straight
I am a: Submissive

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by Spielers »

bakak17 wrote: Tue Apr 07, 2020 4:44 am Sooooo I'm too lazy to scroll through 42 pages of replies, etc.. is the link in the original edited post correct and working?
Yes the first post on page one include all important informations
Triple Alfa
Explorer At Heart
Explorer At Heart
Posts: 175
Joined: Wed Dec 05, 2007 12:35 pm

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by Triple Alfa »

I have a problem, the Java 13 downloads are not working. Both the "Windows x64 Installer" and "Windows x64 Compressed Archive" lead to an error 404(page not found). I tried downloading Java 14 and that worked, but I don't know whether or not Tease AI Java is compatible with Java 14.
smack
Explorer At Heart
Explorer At Heart
Posts: 111
Joined: Mon Sep 16, 2013 8:57 am

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by smack »

Seems that the newer Java versions always compatible with the elder
GodDragon
Explorer At Heart
Explorer At Heart
Posts: 795
Joined: Sun Jun 11, 2017 4:30 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by GodDragon »

smack wrote: Tue Apr 28, 2020 12:05 pm Seems that the newer Java versions always compatible with the elder
Yes indeed. That's the case quite often.
Triple Alfa
Explorer At Heart
Explorer At Heart
Posts: 175
Joined: Wed Dec 05, 2007 12:35 pm

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by Triple Alfa »

Okay, thank you. I'll try installing 14 then.
Triple Alfa
Explorer At Heart
Explorer At Heart
Posts: 175
Joined: Wed Dec 05, 2007 12:35 pm

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by Triple Alfa »

I'm having a serious issue with the Settings/Personality GUI. My Tease AI Java seems broken even after a fresh install.

When taking my first steps into making a personality I copied the programstart.js from the Mischevious personality and edited it to my own needs. Turning it into:

Code: Select all

let separator = java.io.File.separator;
addSettingsPanel("Personality Settings");
addSettingsPanel("Image Settings");
addSettingsPanel("Video Settings");
addSettingsPanel("Debug Settings");
run("Utils" + separator + "chatutils.js");
setUpChat();
run("Utils" + separator + "personalityutils.js");
setUpGUI();
I then edited the personalityutils.js's setUpGUI() function to add my own elements. Like so:

Code: Select all

function setUpGUI()
{
    /* if (getVar("apathylevel", null) == null) {
        setVar("apathylevel", 4);
    }
    registerVariable("apathylevel", "Apathy Level", "How mean/aggresive the dom will be. Can be a number between 1-10. WARNING: 8-10 will be very intense. Don't be afraid to start with a lower level like 3-6.");
    addSpinner("Personality Settings", "apathylevel", 1, 10); */

    /* if (getVar("orgasmchance", null) == null) {
        setVar("orgasmchance", 70);
    }
    registerVariable("orgasmChance", "Orgasm Chance", "The average percent chance the domme will allow an orgasm. NOTE: This isnt the exact percent chance. That will vary some with the domme's mood and apathy level.");
    addSpinner("Personality Settings", "orgasmChance", 1, 100); */

    /* if (getVar("ruinchance", null) == null) {
        setVar("ruinchance", 22);
    }
    registerVariable("ruinChance", "Ruin Chance", "The average percent chance the domme will ruin an orgasm. NOTE: This is the percentage an orgasm" +
        "will be ruined after the domme has decided you will cum. Basically, to have an orgasm ruined, first the dom would have to decide to let you cum. Furthermore, " +
        "if orgasm chance is 50% and orgasm ruined chance is 50%, 25% of the time you will get a ruined orgasm. This isnt the exact percent chance. That will vary some with the domme's mood and apathy level.");
    addSpinner("Personality Settings", "ruinChance", 1, 100); */

    /* if (getVar("minsessionlength", null) == null) {
        setVar("minsessionlength", 15);
    }
    registerVariable("minsessionlength", "Minimum Session Length", "The minimum time in minutes that a session will last. NOTE: Session length will vary between min and max length based on domme's mood " +
        "and apathy level. If either are left blank, the session will last the length as preferred tease duration.");
    addSpinner("Personality Settings", "minsessionlength", 1, 300); */

    if (getVar("maxsessionlength", null) == null) {
        setVar("maxsessionlength", 180);
    }
    registerVariable("maxsessionlength", "Maximum Session Length", "The maximum time in minutes that a session will last. Set this to the longest possible time you have for the session. " +
        "This does not increase the average session length! It only limits the domme if her intention was to go longer.");
    addSpinner("Personality Settings", "maxsessionlength", 30, 300);

    /* if (getVar("minstrokinglength", null) == null) {
        setVar("minstrokinglength", 2);
    }
    registerVariable("minstrokinglength", "Minimum Stroking Length", "The minimum time in minutes that a stroking cycle will last. NOTE: Stroking cycle length will vary between min and max length based on domme's mood " +
        "and apathy level.");
    addSpinner("Stroking Settings", "minstrokinglength", 1, 60);

    if (getVar("maxstrokinglength", null) == null) {
        setVar("maxstrokinglength", 5);
    }
    registerVariable("maxstrokinglength", "Maximum Stroking Length", "The maximum time in minutes that a stroking cycle will last. NOTE: Stroking cycle length will vary between min and max length based on domme's mood " +
        "and apathy level.");
    addSpinner("Stroking Settings", "maxstrokinglength", 1, 60);

    if (getVar("minholdinglength", null) == null) {
        setVar("minholdinglength", 5);
    }
    registerVariable("minholdinglength", "Minimum Edge Holding Length", "The minimum time in seconds that an edge holding cycle will last. NOTE: Edge holding cycle length will vary between min and max length based on domme's mood " +
        "and apathy level. The domme will choose closer to the minimum most of the time unless they are pissed so make the maximum your absolute max limit.");
    addSpinner("Stroking Settings", "minholdinglength", 5, 1200);

    if (getVar("maxholdinglength", null) == null) {
        setVar("maxholdinglength", 120);
    }
    registerVariable("maxholdinglength", "Maximum Edge Holding Length", "The maximum time in seconds that an edge holding cycle will last. NOTE: Edge holding cycle length will vary between min and max length based on domme's mood " +
        "and apathy level. The domme will choose closer to the minimum most of the time unless they are pissed so make the maximum your absolute max limit.");
    addSpinner("Stroking Settings", "maxholdinglength", 5, 1200);

    if (getVar("tauntfrequency", null) == null) {
        setVar("tauntfrequency", 3);
    }
    registerVariable("tauntfrequency", "Taunt Frequency", "The frequency of taunts (0-5) that the domme will say while you are stroking or edging. NOTE: Inputting 0 will disable taunts entirely");
    addSpinner("Stroking Settings", "tauntfrequency", 0, 5); */
	
	if (getVar("assImagesEnabled", null) == null) {
        setVar("assImagesEnabled", true);
    }
    registerVariable("assImagesEnabled", "Ass", "Should the domme display images from the 'Images\Amelie\Ass' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "assImagesEnabled")
	
	if (getVar("boobsImagesEnabled", null) == null) {
        setVar("boobsImagesEnabled", true);
    }
    registerVariable("boobsImagesEnabled", "Boobs", "Should the domme display images from the 'Images\Amelie\Boobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "boobsImagesEnabled")
	
	if (getVar("thighsImagesEnabled", null) == null) {
        setVar("thighsImagesEnabled", true);
    }
    registerVariable("thighsImagesEnabled", "Thighs", "Should the domme display images from the 'Images\Amelie\Thighs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "thighsImagesEnabled")
	
	if (getVar("feetImagesEnabled", null) == null) {
        setVar("feetImagesEnabled", true);
    }
    registerVariable("feetImagesEnabled", "Feet", "Should the domme display images from the 'Images\Amelie\Feet' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "feetImagesEnabled")
	
	if (getVar("femdomImagesEnabled", null) == null) {
        setVar("femdomImagesEnabled", true);
    }
    registerVariable("femdomImagesEnabled", "Femdom", "Should the domme display images from the 'Images\Amelie\Femdom' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "femdomImagesEnabled")
	
	if (getVar("ruinedOrgasmsImagesEnabled", null) == null) {
        setVar("ruinedOrgasmsImagesEnabled", true);
    }
    registerVariable("ruinedOrgasmsImagesEnabled", "Ruined Orgasms", "Should the domme display images from the 'Images\Amelie\Ruined Orgasms' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "ruinedOrgasmsImagesEnabled")
	
	if (getVar("cbtImagesEnabled", null) == null) {
        setVar("cbtImagesEnabled", true);
    }
    registerVariable("cbtImagesEnabled", "CBT", "Should the domme display images from the 'Images\Amelie\CBT' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "cbtImagesEnabled")
	
	if (getVar("povImagesEnabled", null) == null) {
        setVar("povImagesEnabled", true);
    }
    registerVariable("povImagesEnabled", "POV", "Should the domme display images from the 'Images\Amelie\POV' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "povImagesEnabled")
	
	if (getVar("futaImagesEnabled", null) == null) {
        setVar("futaImagesEnabled", true);
    }
    registerVariable("futaImagesEnabled", "Futa", "Should the domme display images from the 'Images\Amelie\Futa' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "futaImagesEnabled")
	
	if (getVar("trapsImagesEnabled", null) == null) {
        setVar("trapsImagesEnabled", true);
    }
    registerVariable("trapsImagesEnabled", "Traps", "Should the domme display images from the 'Images\Amelie\Traps' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "trapsImagesEnabled")
	
	if (getVar("handjobsImagesEnabled", null) == null) {
        setVar("handjobsImagesEnabled", true);
    }
    registerVariable("handjobsImagesEnabled", "Handjobs", "Should the domme display images from the 'Images\Amelie\Handjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "handjobsImagesEnabled")
	
	if (getVar("blowjobsImagesEnabled", null) == null) {
        setVar("blowjobsImagesEnabled", true);
    }
    registerVariable("blowjobsImagesEnabled", "Blowjobs", "Should the domme display images from the 'Images\Amelie\Blowjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "blowjobsImagesEnabled")
	
	if (getVar("assjobsImagesEnabled", null) == null) {
        setVar("assjobsImagesEnabled", true);
    }
    registerVariable("assjobsImagesEnabled", "Assjobs", "Should the domme display images from the 'Images\Amelie\Assjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "assjobsImagesEnabled")
	
	if (getVar("thighjobsImagesEnabled", null) == null) {
        setVar("thighjobsImagesEnabled", true);
    }
    registerVariable("thighjobsImagesEnabled", "Thighjobs", "Should the domme display images from the 'Images\Amelie\Thighjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "thighjobsImagesEnabled")
	
	if (getVar("boobjobsImagesEnabled", null) == null) {
        setVar("boobjobsImagesEnabled", true);
    }
    registerVariable("boobjobsImagesEnabled", "Boobjobs", "Should the domme display images from the 'Images\Amelie\Boobjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "boobjobsImagesEnabled")
	
	if (getVar("footjobsImagesEnabled", null) == null) {
        setVar("footjobsImagesEnabled", true);
    }
    registerVariable("footjobsImagesEnabled", "Footjobs", "Should the domme display images from the 'Images\Amelie\Footjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "footjobsImagesEnabled")
	
	if (getVar("fuckingImagesEnabled", null) == null) {
        setVar("fuckingImagesEnabled", true);
    }
    registerVariable("fuckingImagesEnabled", "Fucking", "Should the domme display images from the 'Images\Amelie\Fucking' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "fuckingImagesEnabled")
	
	if (getVar("analImagesEnabled", null) == null) {
        setVar("analImagesEnabled", true);
    }
    registerVariable("analImagesEnabled", "Anal", "Should the domme display images from the 'Images\Amelie\Anal' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "analImagesEnabled")
	
	if (getVar("otherImagesEnabled", null) == null) {
        setVar("otherImagesEnabled", true);
    }
    registerVariable("otherImagesEnabled", "Other", "Should the domme display images from the 'Images\Amelie\Other' folder? " + 
	"This is meant for images that do not fall under any other category. If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "otherImagesEnabled")
	
	if (getVar("analVideosEnabled", null) == null) {
        setVar("analVideosEnabled", true);
    }
    registerVariable("analVideosEnabled", "Anal", "Should the domme display images from the 'Videos\Amelie\Anal' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "analVideosEnabled")
	
	if (getVar("assjobsVideosEnabled", null) == null) {
        setVar("assjobsVideosEnabled", true);
    }
    registerVariable("assjobsVideosEnabled", "Assjobs", "Should the domme display images from the 'Videos\Amelie\Assjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "assjobsVideosEnabled")
	
	if (getVar("blowjobsVideosEnabled", null) == null) {
        setVar("blowjobsVideosEnabled", true);
    }
    registerVariable("blowjobsVideosEnabled", "Blowjobs", "Should the domme display images from the 'Videos\Amelie\Blowjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "blowjobsVideosEnabled")
	
	if (getVar("boobjobsVideosEnabled", null) == null) {
        setVar("boobjobsVideosEnabled", true);
    }
    registerVariable("boobjobsVideosEnabled", "Boobjobs", "Should the domme display images from the 'Videos\Amelie\Boobjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "boobjobsVideosEnabled")
	
	if (getVar("cbtVideosEnabled", null) == null) {
        setVar("cbtVideosEnabled", true);
    }
    registerVariable("cbtVideosEnabled", "CBT", "Should the domme display images from the 'Videos\Amelie\CBT' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "cbtVideosEnabled")
	
	if (getVar("footjobsVideosEnabled", null) == null) {
        setVar("footjobsVideosEnabled", true);
    }
    registerVariable("footjobsVideosEnabled", "Footjobs", "Should the domme display images from the 'Videos\Amelie\Footjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "footjobsVideosEnabled")
	
	if (getVar("fuckingVideosEnabled", null) == null) {
        setVar("fuckingVideosEnabled", true);
    }
    registerVariable("fuckingVideosEnabled", "Fucking", "Should the domme display images from the 'Videos\Amelie\Fucking' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "fuckingVideosEnabled")
	
	if (getVar("handjobsVideosEnabled", null) == null) {
        setVar("handjobsVideosEnabled", true);
    }
    registerVariable("handjobsVideosEnabled", "Handjobs", "Should the domme display images from the 'Videos\Amelie\Handjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "handjobsVideosEnabled")
	
	if (getVar("povVideosEnabled", null) == null) {
        setVar("povVideosEnabled", true);
    }
    registerVariable("povVideosEnabled", "POV", "Should the domme display images from the 'Videos\Amelie\POV' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "povVideosEnabled")
	
	if (getVar("ruinedOrgasmsVideosEnabled", null) == null) {
        setVar("ruinedOrgasmsVideosEnabled", true);
    }
    registerVariable("ruinedOrgasmsVideosEnabled", "Ruined Orgasms", "Should the domme display images from the 'Videos\Amelie\Ruined Orgasms' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "ruinedOrgasmsVideosEnabled")
	
	if (getVar("thighjobsVideosEnabled", null) == null) {
        setVar("thighjobsVideosEnabled", true);
    }
    registerVariable("thighjobsVideosEnabled", "Thighjobs", "Should the domme display images from the 'Videos\Amelie\Thighjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "thighjobsVideosEnabled")
}
Running TAJ like this had some strange results.
1) The Appearance tab in the settings menu did not have the default "Twilight" theme anymore.
2) The personality tab only contained the variables sub-tab. Even the tab from Mischevious was gone.

Following this I commented out the parts of programstart.js that loaded chatutils.js and personalityutils.js.
Now the theme was back and the Mischevious sub-tab loaded correctly, but my amelie sub-tab now contained the following:
- General Settings Tab containing:
Debug Mode
Rapid Testing
Ass

"Debug Mode" and "Rapid Testing" came from chatutils.js that should no longer be loaded and should have been in the "Debug Settings" tab, not general settings. "Ass" was one of my additions to personalityutils.js that again should no longer be loaded and should have been in the "Image Settings" tab, not general settings.

After this I decided to just delete the entire TAJ folder and start fresh. I renamed the programstart.js to test.js to make sure it didn't load on the new TAJ setup, but the same problems described in the above two paragraphs remained even with the new install and the programstart.js disabled.

One small thing of note is that the " 'Images\Amelie\Ass' " part of the description of the "Ass" setting is displayed as " 'ImagesAmelieAss' ". Not sure if that's in anyway relevant though.

I have no idea where to go from here, so any advice would be very much appreciated.
GodDragon
Explorer At Heart
Explorer At Heart
Posts: 795
Joined: Sun Jun 11, 2017 4:30 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by GodDragon »

Triple Alfa wrote: Wed Apr 29, 2020 10:57 pm I'm having a serious issue with the Settings/Personality GUI. My Tease AI Java seems broken even after a fresh install.

When taking my first steps into making a personality I copied the programstart.js from the Mischevious personality and edited it to my own needs. Turning it into:

Code: Select all

let separator = java.io.File.separator;
addSettingsPanel("Personality Settings");
addSettingsPanel("Image Settings");
addSettingsPanel("Video Settings");
addSettingsPanel("Debug Settings");
run("Utils" + separator + "chatutils.js");
setUpChat();
run("Utils" + separator + "personalityutils.js");
setUpGUI();
I then edited the personalityutils.js's setUpGUI() function to add my own elements. Like so:

Code: Select all

function setUpGUI()
{
    /* if (getVar("apathylevel", null) == null) {
        setVar("apathylevel", 4);
    }
    registerVariable("apathylevel", "Apathy Level", "How mean/aggresive the dom will be. Can be a number between 1-10. WARNING: 8-10 will be very intense. Don't be afraid to start with a lower level like 3-6.");
    addSpinner("Personality Settings", "apathylevel", 1, 10); */

    /* if (getVar("orgasmchance", null) == null) {
        setVar("orgasmchance", 70);
    }
    registerVariable("orgasmChance", "Orgasm Chance", "The average percent chance the domme will allow an orgasm. NOTE: This isnt the exact percent chance. That will vary some with the domme's mood and apathy level.");
    addSpinner("Personality Settings", "orgasmChance", 1, 100); */

    /* if (getVar("ruinchance", null) == null) {
        setVar("ruinchance", 22);
    }
    registerVariable("ruinChance", "Ruin Chance", "The average percent chance the domme will ruin an orgasm. NOTE: This is the percentage an orgasm" +
        "will be ruined after the domme has decided you will cum. Basically, to have an orgasm ruined, first the dom would have to decide to let you cum. Furthermore, " +
        "if orgasm chance is 50% and orgasm ruined chance is 50%, 25% of the time you will get a ruined orgasm. This isnt the exact percent chance. That will vary some with the domme's mood and apathy level.");
    addSpinner("Personality Settings", "ruinChance", 1, 100); */

    /* if (getVar("minsessionlength", null) == null) {
        setVar("minsessionlength", 15);
    }
    registerVariable("minsessionlength", "Minimum Session Length", "The minimum time in minutes that a session will last. NOTE: Session length will vary between min and max length based on domme's mood " +
        "and apathy level. If either are left blank, the session will last the length as preferred tease duration.");
    addSpinner("Personality Settings", "minsessionlength", 1, 300); */

    if (getVar("maxsessionlength", null) == null) {
        setVar("maxsessionlength", 180);
    }
    registerVariable("maxsessionlength", "Maximum Session Length", "The maximum time in minutes that a session will last. Set this to the longest possible time you have for the session. " +
        "This does not increase the average session length! It only limits the domme if her intention was to go longer.");
    addSpinner("Personality Settings", "maxsessionlength", 30, 300);

    /* if (getVar("minstrokinglength", null) == null) {
        setVar("minstrokinglength", 2);
    }
    registerVariable("minstrokinglength", "Minimum Stroking Length", "The minimum time in minutes that a stroking cycle will last. NOTE: Stroking cycle length will vary between min and max length based on domme's mood " +
        "and apathy level.");
    addSpinner("Stroking Settings", "minstrokinglength", 1, 60);

    if (getVar("maxstrokinglength", null) == null) {
        setVar("maxstrokinglength", 5);
    }
    registerVariable("maxstrokinglength", "Maximum Stroking Length", "The maximum time in minutes that a stroking cycle will last. NOTE: Stroking cycle length will vary between min and max length based on domme's mood " +
        "and apathy level.");
    addSpinner("Stroking Settings", "maxstrokinglength", 1, 60);

    if (getVar("minholdinglength", null) == null) {
        setVar("minholdinglength", 5);
    }
    registerVariable("minholdinglength", "Minimum Edge Holding Length", "The minimum time in seconds that an edge holding cycle will last. NOTE: Edge holding cycle length will vary between min and max length based on domme's mood " +
        "and apathy level. The domme will choose closer to the minimum most of the time unless they are pissed so make the maximum your absolute max limit.");
    addSpinner("Stroking Settings", "minholdinglength", 5, 1200);

    if (getVar("maxholdinglength", null) == null) {
        setVar("maxholdinglength", 120);
    }
    registerVariable("maxholdinglength", "Maximum Edge Holding Length", "The maximum time in seconds that an edge holding cycle will last. NOTE: Edge holding cycle length will vary between min and max length based on domme's mood " +
        "and apathy level. The domme will choose closer to the minimum most of the time unless they are pissed so make the maximum your absolute max limit.");
    addSpinner("Stroking Settings", "maxholdinglength", 5, 1200);

    if (getVar("tauntfrequency", null) == null) {
        setVar("tauntfrequency", 3);
    }
    registerVariable("tauntfrequency", "Taunt Frequency", "The frequency of taunts (0-5) that the domme will say while you are stroking or edging. NOTE: Inputting 0 will disable taunts entirely");
    addSpinner("Stroking Settings", "tauntfrequency", 0, 5); */
	
	if (getVar("assImagesEnabled", null) == null) {
        setVar("assImagesEnabled", true);
    }
    registerVariable("assImagesEnabled", "Ass", "Should the domme display images from the 'Images\Amelie\Ass' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "assImagesEnabled")
	
	if (getVar("boobsImagesEnabled", null) == null) {
        setVar("boobsImagesEnabled", true);
    }
    registerVariable("boobsImagesEnabled", "Boobs", "Should the domme display images from the 'Images\Amelie\Boobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "boobsImagesEnabled")
	
	if (getVar("thighsImagesEnabled", null) == null) {
        setVar("thighsImagesEnabled", true);
    }
    registerVariable("thighsImagesEnabled", "Thighs", "Should the domme display images from the 'Images\Amelie\Thighs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "thighsImagesEnabled")
	
	if (getVar("feetImagesEnabled", null) == null) {
        setVar("feetImagesEnabled", true);
    }
    registerVariable("feetImagesEnabled", "Feet", "Should the domme display images from the 'Images\Amelie\Feet' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "feetImagesEnabled")
	
	if (getVar("femdomImagesEnabled", null) == null) {
        setVar("femdomImagesEnabled", true);
    }
    registerVariable("femdomImagesEnabled", "Femdom", "Should the domme display images from the 'Images\Amelie\Femdom' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "femdomImagesEnabled")
	
	if (getVar("ruinedOrgasmsImagesEnabled", null) == null) {
        setVar("ruinedOrgasmsImagesEnabled", true);
    }
    registerVariable("ruinedOrgasmsImagesEnabled", "Ruined Orgasms", "Should the domme display images from the 'Images\Amelie\Ruined Orgasms' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "ruinedOrgasmsImagesEnabled")
	
	if (getVar("cbtImagesEnabled", null) == null) {
        setVar("cbtImagesEnabled", true);
    }
    registerVariable("cbtImagesEnabled", "CBT", "Should the domme display images from the 'Images\Amelie\CBT' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "cbtImagesEnabled")
	
	if (getVar("povImagesEnabled", null) == null) {
        setVar("povImagesEnabled", true);
    }
    registerVariable("povImagesEnabled", "POV", "Should the domme display images from the 'Images\Amelie\POV' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "povImagesEnabled")
	
	if (getVar("futaImagesEnabled", null) == null) {
        setVar("futaImagesEnabled", true);
    }
    registerVariable("futaImagesEnabled", "Futa", "Should the domme display images from the 'Images\Amelie\Futa' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "futaImagesEnabled")
	
	if (getVar("trapsImagesEnabled", null) == null) {
        setVar("trapsImagesEnabled", true);
    }
    registerVariable("trapsImagesEnabled", "Traps", "Should the domme display images from the 'Images\Amelie\Traps' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "trapsImagesEnabled")
	
	if (getVar("handjobsImagesEnabled", null) == null) {
        setVar("handjobsImagesEnabled", true);
    }
    registerVariable("handjobsImagesEnabled", "Handjobs", "Should the domme display images from the 'Images\Amelie\Handjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "handjobsImagesEnabled")
	
	if (getVar("blowjobsImagesEnabled", null) == null) {
        setVar("blowjobsImagesEnabled", true);
    }
    registerVariable("blowjobsImagesEnabled", "Blowjobs", "Should the domme display images from the 'Images\Amelie\Blowjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "blowjobsImagesEnabled")
	
	if (getVar("assjobsImagesEnabled", null) == null) {
        setVar("assjobsImagesEnabled", true);
    }
    registerVariable("assjobsImagesEnabled", "Assjobs", "Should the domme display images from the 'Images\Amelie\Assjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "assjobsImagesEnabled")
	
	if (getVar("thighjobsImagesEnabled", null) == null) {
        setVar("thighjobsImagesEnabled", true);
    }
    registerVariable("thighjobsImagesEnabled", "Thighjobs", "Should the domme display images from the 'Images\Amelie\Thighjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "thighjobsImagesEnabled")
	
	if (getVar("boobjobsImagesEnabled", null) == null) {
        setVar("boobjobsImagesEnabled", true);
    }
    registerVariable("boobjobsImagesEnabled", "Boobjobs", "Should the domme display images from the 'Images\Amelie\Boobjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "boobjobsImagesEnabled")
	
	if (getVar("footjobsImagesEnabled", null) == null) {
        setVar("footjobsImagesEnabled", true);
    }
    registerVariable("footjobsImagesEnabled", "Footjobs", "Should the domme display images from the 'Images\Amelie\Footjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "footjobsImagesEnabled")
	
	if (getVar("fuckingImagesEnabled", null) == null) {
        setVar("fuckingImagesEnabled", true);
    }
    registerVariable("fuckingImagesEnabled", "Fucking", "Should the domme display images from the 'Images\Amelie\Fucking' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "fuckingImagesEnabled")
	
	if (getVar("analImagesEnabled", null) == null) {
        setVar("analImagesEnabled", true);
    }
    registerVariable("analImagesEnabled", "Anal", "Should the domme display images from the 'Images\Amelie\Anal' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "analImagesEnabled")
	
	if (getVar("otherImagesEnabled", null) == null) {
        setVar("otherImagesEnabled", true);
    }
    registerVariable("otherImagesEnabled", "Other", "Should the domme display images from the 'Images\Amelie\Other' folder? " + 
	"This is meant for images that do not fall under any other category. If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "otherImagesEnabled")
	
	if (getVar("analVideosEnabled", null) == null) {
        setVar("analVideosEnabled", true);
    }
    registerVariable("analVideosEnabled", "Anal", "Should the domme display images from the 'Videos\Amelie\Anal' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "analVideosEnabled")
	
	if (getVar("assjobsVideosEnabled", null) == null) {
        setVar("assjobsVideosEnabled", true);
    }
    registerVariable("assjobsVideosEnabled", "Assjobs", "Should the domme display images from the 'Videos\Amelie\Assjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "assjobsVideosEnabled")
	
	if (getVar("blowjobsVideosEnabled", null) == null) {
        setVar("blowjobsVideosEnabled", true);
    }
    registerVariable("blowjobsVideosEnabled", "Blowjobs", "Should the domme display images from the 'Videos\Amelie\Blowjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "blowjobsVideosEnabled")
	
	if (getVar("boobjobsVideosEnabled", null) == null) {
        setVar("boobjobsVideosEnabled", true);
    }
    registerVariable("boobjobsVideosEnabled", "Boobjobs", "Should the domme display images from the 'Videos\Amelie\Boobjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "boobjobsVideosEnabled")
	
	if (getVar("cbtVideosEnabled", null) == null) {
        setVar("cbtVideosEnabled", true);
    }
    registerVariable("cbtVideosEnabled", "CBT", "Should the domme display images from the 'Videos\Amelie\CBT' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "cbtVideosEnabled")
	
	if (getVar("footjobsVideosEnabled", null) == null) {
        setVar("footjobsVideosEnabled", true);
    }
    registerVariable("footjobsVideosEnabled", "Footjobs", "Should the domme display images from the 'Videos\Amelie\Footjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "footjobsVideosEnabled")
	
	if (getVar("fuckingVideosEnabled", null) == null) {
        setVar("fuckingVideosEnabled", true);
    }
    registerVariable("fuckingVideosEnabled", "Fucking", "Should the domme display images from the 'Videos\Amelie\Fucking' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "fuckingVideosEnabled")
	
	if (getVar("handjobsVideosEnabled", null) == null) {
        setVar("handjobsVideosEnabled", true);
    }
    registerVariable("handjobsVideosEnabled", "Handjobs", "Should the domme display images from the 'Videos\Amelie\Handjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "handjobsVideosEnabled")
	
	if (getVar("povVideosEnabled", null) == null) {
        setVar("povVideosEnabled", true);
    }
    registerVariable("povVideosEnabled", "POV", "Should the domme display images from the 'Videos\Amelie\POV' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "povVideosEnabled")
	
	if (getVar("ruinedOrgasmsVideosEnabled", null) == null) {
        setVar("ruinedOrgasmsVideosEnabled", true);
    }
    registerVariable("ruinedOrgasmsVideosEnabled", "Ruined Orgasms", "Should the domme display images from the 'Videos\Amelie\Ruined Orgasms' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "ruinedOrgasmsVideosEnabled")
	
	if (getVar("thighjobsVideosEnabled", null) == null) {
        setVar("thighjobsVideosEnabled", true);
    }
    registerVariable("thighjobsVideosEnabled", "Thighjobs", "Should the domme display images from the 'Videos\Amelie\Thighjobs' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Video Settings", "thighjobsVideosEnabled")
}
Running TAJ like this had some strange results.
1) The Appearance tab in the settings menu did not have the default "Twilight" theme anymore.
2) The personality tab only contained the variables sub-tab. Even the tab from Mischevious was gone.

Following this I commented out the parts of programstart.js that loaded chatutils.js and personalityutils.js.
Now the theme was back and the Mischevious sub-tab loaded correctly, but my amelie sub-tab now contained the following:
- General Settings Tab containing:
Debug Mode
Rapid Testing
Ass

"Debug Mode" and "Rapid Testing" came from chatutils.js that should no longer be loaded and should have been in the "Debug Settings" tab, not general settings. "Ass" was one of my additions to personalityutils.js that again should no longer be loaded and should have been in the "Image Settings" tab, not general settings.

After this I decided to just delete the entire TAJ folder and start fresh. I renamed the programstart.js to test.js to make sure it didn't load on the new TAJ setup, but the same problems described in the above two paragraphs remained even with the new install and the programstart.js disabled.

One small thing of note is that the " 'Images\Amelie\Ass' " part of the description of the "Ass" setting is displayed as " 'ImagesAmelieAss' ". Not sure if that's in anyway relevant though.

I have no idea where to go from here, so any advice would be very much appreciated.
An extract from your log file of TAJ would be great to pin point the issue. Otherwise I could also try you personality if that is everything you got when it comes to code.
Btw. \ is a character used to escape things in strings and stuff, so if you want to use it in a string as a normal character you'll have to escape it self like "Hey I want to use \\ as a string" will result in Hey I want to use \ as a string
Triple Alfa
Explorer At Heart
Explorer At Heart
Posts: 175
Joined: Wed Dec 05, 2007 12:35 pm

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by Triple Alfa »

I've gotten it back in the state where the theme is gone and the Personality tab in Settings only shows the Variables sub-tab.
Here is the log after I ran it:

Code: Select all

04:35:50 pm INFO: Checking libraries for updates...
04:35:51 pm INFO: Library uber-EstimAPI-0.0.1-SNAPSHOT.jar is only local but keeping and not deleting.
04:35:51 pm INFO: Libraries checked and up-to-date.
04:35:51 pm INFO: Initialization done.
04:35:52 pm INFO: Launching TAJ 1.2.2
Warning: Nashorn engine is planned to be removed from a future JDK release
04:35:53 pm SEVERE: Latest loaded file was 'D:\Temp ICO\Teases\Tease AI Java\TeaseAI Java 1.2.2\Personalities\Amelie\Utils\personalityutils.js' and error was found in line 82
Error: ReferenceError: "addCheckbox" is not defined in <eval> at line number 82
javax.script.ScriptException: ReferenceError: "addCheckbox" is not defined in <eval> at line number 82
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:477)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:461)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:413)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:409)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:157)
	at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249)
	at me.goddragon.teaseai.api.scripts.ScriptHandler.runScript(ScriptHandler.java:191)
	at me.goddragon.teaseai.api.scripts.personality.Personality.onProgramStart(Personality.java:280)
	at me.goddragon.teaseai.api.scripts.personality.Personality.<init>(Personality.java:60)
	at me.goddragon.teaseai.api.scripts.personality.PersonalityManager.loadPersonalities(PersonalityManager.java:35)
	at me.goddragon.teaseai.TeaseAI$1.call(TeaseAI.java:125)
	at me.goddragon.teaseai.TeaseAI$1.call(TeaseAI.java:116)
	at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Task.java:1425)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: <eval>:82 ReferenceError: "addCheckbox" is not defined
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291)
	at jdk.scripting.nashorn/jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1616)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4$135$\^eval\_.:scopeCall-4(<eval>)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4$135$\^eval\_.setUpGUI(<eval>:82)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$\^eval\_/0x0000000800edb840.:program(<eval>:9)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:655)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:456)
	... 13 more
04:35:53 pm INFO: Personality 'Amelie' version 0.0.1 loaded.
04:35:53 pm INFO: Personality 'Default Personality' version 1.0 loaded.
04:35:57 pm SEVERE: Personality with name 'null' does not exist.
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
	at me.goddragon.teaseai.gui.settings.PersonalitySettings.addPersonalityGUIs(PersonalitySettings.java:97)
	at me.goddragon.teaseai.gui.settings.PersonalitySettings.initiate(PersonalitySettings.java:35)
	at me.goddragon.teaseai.gui.settings.SettingsController.initiate(SettingsController.java:272)
	at me.goddragon.teaseai.gui.settings.SettingsController.openGUI(SettingsController.java:307)
	at me.goddragon.teaseai.gui.main.MainGuiController$5.handle(MainGuiController.java:312)
	at me.goddragon.teaseai.gui.main.MainGuiController$5.handle(MainGuiController.java:309)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3564)
	at javafx.graphics/javafx.scene.Scene$ClickGenerator.access$8200(Scene.java:3492)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3860)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
	at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
	at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
	at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:832)
plication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:832)
Line 82 of personalityutils.js refers to the last line here:

Code: Select all

if (getVar("assImagesEnabled", null) == null) {
        setVar("assImagesEnabled", true);
    }
    registerVariable("assImagesEnabled", "Ass", "Should the domme display images from the 'Images\Amelie\Ass' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "assImagesEnabled");
I took that code straight from chatutils.js where the following is used:

Code: Select all

registerVariable("rapidtesting", "Rapid Testing", "Set this to true to turn on rapid testing mode.");
    addCheckBox("Debug Settings", "rapidtesting");
Also thank you for reminding me about the \\. It's been a while since I've programmed anything.
GodDragon
Explorer At Heart
Explorer At Heart
Posts: 795
Joined: Sun Jun 11, 2017 4:30 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: [Tease Program] Tease-AI Java (1.2.2)

Post by GodDragon »

Triple Alfa wrote: Thu Apr 30, 2020 2:49 pm I've gotten it back in the state where the theme is gone and the Personality tab in Settings only shows the Variables sub-tab.
Here is the log after I ran it:

Code: Select all

04:35:50 pm INFO: Checking libraries for updates...
04:35:51 pm INFO: Library uber-EstimAPI-0.0.1-SNAPSHOT.jar is only local but keeping and not deleting.
04:35:51 pm INFO: Libraries checked and up-to-date.
04:35:51 pm INFO: Initialization done.
04:35:52 pm INFO: Launching TAJ 1.2.2
Warning: Nashorn engine is planned to be removed from a future JDK release
04:35:53 pm SEVERE: Latest loaded file was 'D:\Temp ICO\Teases\Tease AI Java\TeaseAI Java 1.2.2\Personalities\Amelie\Utils\personalityutils.js' and error was found in line 82
Error: ReferenceError: "addCheckbox" is not defined in <eval> at line number 82
javax.script.ScriptException: ReferenceError: "addCheckbox" is not defined in <eval> at line number 82
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:477)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:461)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:413)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:409)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:157)
	at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249)
	at me.goddragon.teaseai.api.scripts.ScriptHandler.runScript(ScriptHandler.java:191)
	at me.goddragon.teaseai.api.scripts.personality.Personality.onProgramStart(Personality.java:280)
	at me.goddragon.teaseai.api.scripts.personality.Personality.<init>(Personality.java:60)
	at me.goddragon.teaseai.api.scripts.personality.PersonalityManager.loadPersonalities(PersonalityManager.java:35)
	at me.goddragon.teaseai.TeaseAI$1.call(TeaseAI.java:125)
	at me.goddragon.teaseai.TeaseAI$1.call(TeaseAI.java:116)
	at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Task.java:1425)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: <eval>:82 ReferenceError: "addCheckbox" is not defined
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291)
	at jdk.scripting.nashorn/jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1616)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4$135$\^eval\_.:scopeCall-4(<eval>)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4$135$\^eval\_.setUpGUI(<eval>:82)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$\^eval\_/0x0000000800edb840.:program(<eval>:9)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:655)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:456)
	... 13 more
04:35:53 pm INFO: Personality 'Amelie' version 0.0.1 loaded.
04:35:53 pm INFO: Personality 'Default Personality' version 1.0 loaded.
04:35:57 pm SEVERE: Personality with name 'null' does not exist.
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
	at me.goddragon.teaseai.gui.settings.PersonalitySettings.addPersonalityGUIs(PersonalitySettings.java:97)
	at me.goddragon.teaseai.gui.settings.PersonalitySettings.initiate(PersonalitySettings.java:35)
	at me.goddragon.teaseai.gui.settings.SettingsController.initiate(SettingsController.java:272)
	at me.goddragon.teaseai.gui.settings.SettingsController.openGUI(SettingsController.java:307)
	at me.goddragon.teaseai.gui.main.MainGuiController$5.handle(MainGuiController.java:312)
	at me.goddragon.teaseai.gui.main.MainGuiController$5.handle(MainGuiController.java:309)
	at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
	at javafx.graphics/javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3564)
	at javafx.graphics/javafx.scene.Scene$ClickGenerator.access$8200(Scene.java:3492)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3860)
	at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
	at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849)
	at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
	at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
	at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:832)
plication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:832)
Line 82 of personalityutils.js refers to the last line here:

Code: Select all

if (getVar("assImagesEnabled", null) == null) {
        setVar("assImagesEnabled", true);
    }
    registerVariable("assImagesEnabled", "Ass", "Should the domme display images from the 'Images\Amelie\Ass' folder? " + 
	"If enabled, make sure the folder is not empty!");
	addCheckbox("Image Settings", "assImagesEnabled");
I took that code straight from chatutils.js where the following is used:

Code: Select all

registerVariable("rapidtesting", "Rapid Testing", "Set this to true to turn on rapid testing mode.");
    addCheckBox("Debug Settings", "rapidtesting");
Also thank you for reminding me about the \\. It's been a while since I've programmed anything.
It's case sensitive. So it's addCheckBox and not addCheckbox :whistle:
Post Reply