/usr/share/psychtoolbox-3/PsychJava/AssignGetCharJava.m is in psychtoolbox-3-common 3.0.9+svn2579.dfsg1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | function gcobject = AssignGetCharJava
% AssignGetCharJava - Helper function for Java based GetChar.
%
% This routine is called during initialization from ListenChar,
% CharAvail, GetChar and FlushEvents. It tries as hard as possible
% instantiate a Java object of the GetCharJava class and returns it
% if successfull. Different versions of Matlab use different versions
% of the Java virtual machine. Matlab can only load versions of
% GetCharJava.class that were compiled with the same Java version as
% the one that Matlab uses. Therefore we provide multiple versions of
% the GetCharJava.class, each compiled against a different Java version.
% We try to instantiate the newest version. If that fails, we try the
% 2nd newest version, and so on. If all versions bundled with PTB failed
% to instantiate, the behaviour depends on the availability of an installed
% Java compiler. If a "javac" compiler is available, as on MacOS-X, we invoke
% it on the source code to built a customized version of GetCharJava for that
% machine. Otherwise we give up and fail.
% History:
% 4.10.2006 Written (MK).
% 26.05.2011 Add automatic invocation of PsychJavaTrouble() as the most
% likely temporary fix for problems (MK).
%
% Try to instantiate different versions of GetCharJava.class, starting with
% the one built against the most recent Java version, descending on failure:
psychlasterror('reset');
try
% Java version 1.5 -- MacOS-X 10.4.x and M$-Windows Matlab 7.1 and later.
gcobject = GetCharJava_1_5_0;
psychlasterror('reset');
return;
catch
% No op. Just fall through to next case.
end
psychlasterror('reset');
try
% Java version 1.4.2 -- MacOS-X 10.3.9 and M$-Windows Matlab 7.0.x
gcobject = GetCharJava_1_4_2_09;
psychlasterror('reset');
return;
catch
% No op. Just fall through to next case.
end
psychlasterror('reset');
% Using the bundled classes failed. Try to bind a previously built one:
try
% GetCharJava built from source on this machine via javac compiler.
gcobject = GetCharJava;
psychlasterror('reset');
return;
catch
% No op. Just fall through to next case.
end
% Check if this is actually a problem of missing PsychJava/ folder on the
% Matlab static classpath. Try to fix it by invocation of
% PsychJavaTrouble():
fprintf('\nWARNING: Failed to load GetCharJava Java class. Most likely your Matlab\n');
fprintf('WARNING: classpath.txt file is not up to date. I will try to auto-fix this for\n');
fprintf('WARNING: the current session by executing the PsychJavaTrouble() command.\n');
fprintf('WARNING: This may have bad side-effects, like clearing all your scripts variables\n');
fprintf('WARNING: and functions! If it works, please read ''help PsychJavaTrouble''\n');
fprintf('WARNING: for a proper and permanent fix to the problem.\n\n');
psychlasterror('reset');
try
PsychJavaTrouble;
fprintf('INFO: Problem may be fixed for this session. Let''s see...\n');
gcobject = GetCharJava;
psychlasterror('reset');
fprintf('INFO: Yep! Still, please fix the problem properly asap.\n');
return;
catch
% No op. Just fall through to next case.
end
% Using the bundled classes failed. Try to invoke the Java compiler on our source
% code to build our own version:
compilecmd = ['javac ' PsychtoolboxRoot 'PsychJava' filesep 'GetCharJava.java'];
fprintf('Could not create a GetCharJava object. This may be due to any of the\n');
fprintf('reasons mentioned in ''help PsychJavaTrouble''. Another reason could be \n');
fprintf('that i do not have a matching GetCharJava implementation for your version\n');
fprintf('of Matlab. Will try now to compile a customized GetCharJava using the javac compiler.\n');
fprintf('This may or may not work...\n');
fprintf('Compile command is: %s\n', compilecmd);
% Invoke compiler, if any:
if IsWin
rc = dos(compilecmd);
else
rc = system(compilecmd);
end
% Clear out java cache.
psychlasterror('reset');
try
clear java;
catch
fprintf('Warning: clear java failed.\n');
end
psychlasterror('reset');
% Retry binding:
try
% GetCharJava built from source on this machine via javac compiler.
gcobject = GetCharJava;
catch
% Failed again. We are out of luck.
fprintf('Failed to built customized GetCharJava! This may be due to lack of\n');
fprintf('an installed Java SDK on your system. Read ''help PsychJavaTrouble'' \n');
fprintf('for more info.\n\n');
error('Failed to built and initialize GetCharJava.');
end
psychlasterror('reset');
% Success!
fprintf('Building a GetCharJava file from source on your machine worked!\n');
fprintf('Please exit and restart Matlab to make the new GetCharJava functional.\n');
error('Please exit and restart Matlab.');
|