我有这行代码将NSString转换为NSData:
NSData *data = [NSData dataWithBytes:[message UTF8String] length:[message lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)
如何在Unicode而不是UTF8中执行此操作?我的消息可能包含西里尔字符或变音符号.
我的数百名用户中只有一个在启动Java桌面应用程序时遇到问题.只有三分之一的时间才开始.另外三分之二的时间在启动时抛出NullPointerException:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:394)
at javax.swing.JEditorPane.registerEditorKitForContentType(JEditorPane.java:1327)
at javax.swing.JEditorPane.registerEditorKitForContentType(JEditorPane.java:1309)
at javax.swing.JEditorPane.loadDefaultKitsIfNecessary(JEditorPane.java:1387)
at javax.swing.JEditorPane.getKitTypeRegistry(JEditorPane.java:1344)
at javax.swing.JEditorPane.getEditorKitClassNameForContentType(JEditorPane.java:1340)
at javax.swing.JTextPane.<init>(JTextPane.java:76)
at myapp.Launcher$1.run(Launcher.java:13)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:633)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Run Code Online (Sandbox Code Playgroud)
我已经按照堆栈跟踪找到原因
Thread.currentThread().getContextClassLoader()
Run Code Online (Sandbox Code Playgroud)
在JEditorPane中返回null.
谷歌搜索显示,这是一个零星的,非常罕见的,神秘的问题,影响了一些人.
我的问题是,作为一种解决办法,我能做些什么?如果我在创建EditorPane之前调用它,这可能会有效:
Thread.currentThread().setContextClassLoader(MyClass.class.getClassLoader());
Run Code Online (Sandbox Code Playgroud)
但我并不像我想的那样真正理解类加载器(并且我试图更好地理解它们).我觉得改变EDT中的contextClassLoader可能会产生不良影响.
任何想法我能做什么?
编辑:我与熟悉Java ClassLoaders的人有一些通信.这似乎是一个模糊的ClassLoader竞争条件.也就是说,Java中的一个错误.
我正在做一些故障排除,并希望添加一个检查,函数的参数是一个数字.我该怎么做呢?
像这样......
function fn(id) {
return // true iff id is a number else false
}
Run Code Online (Sandbox Code Playgroud)
更好的是,如果我可以检查参数是一个数字和一个有效的整数.
我正在用Java创建一个动画幻灯片过渡,它在我当前的MacBook Pro型号以及我的一年前的iMac上,在Java 6,7和8上都是不稳定的.
我该怎么做才能让这个动画在Mac OS X上对用户来说更流畅?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ScratchSpace {
public static void main(String[] args) {
AnimatedPanel panel = new AnimatedPanel();
JFrame frame = new JFrame();
frame.setContentPane(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
panel.animate();
}
public static class AnimatedPanel extends JPanel {
private float progress = 0.0f; // a number between 0.0 and 1.0
public AnimatedPanel() {
setPreferredSize(new Dimension(800, 600));
setOpaque(true);
}
public void animate() {
final int animationTime = 1000;
int framesPerSecond = 30; …Run Code Online (Sandbox Code Playgroud) 我正在尝试将HTML5画布导出为PNG文件,以便将其存储在用户的计算机上.
以下代码段正确保存图像.
document.location.href = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
Run Code Online (Sandbox Code Playgroud)
但是,在Mac OS X上使用Chrome时,它始终保存为"下载".在Safari中,它被称为"未知".Firefox给它一个gobbledygook名称.
我可以向浏览器建议使用的名称,例如"exportedImage.png"吗?
我想使用Java将图像转换为2色,黑色和白色.我正在使用以下代码转换为灰度:
ColorConvertOp op = new ColorConvertOp(
ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
BufferedImage grayImage = op.filter(image, null);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何修改它以转换为黑白.
使用Objective-C和Cocoa API,如何搜索"dog"的OSX系统字典定义并检索结果以便我可以显示它们?
当我在Windows 7上使用JComboBox时,四个角的每个角都有一个与父组件的背景颜色不匹配的像素.
在Windows 8中,这个问题不会发生(尽管这可能是因为在Windows 8中,JComboBox被渲染为完美的矩形).它也不会发生在OS X上.
我该怎么做才能使角落像素让父组件的背景颜色通过?
这是显示问题的图像:

这是我正在使用的一个独立的代码示例:
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
} catch (Exception e) {
e.printStackTrace();
}
JPanel contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
JComboBox<String> comboBox = new JComboBox<String>(new String[]{"One", "Two"});
contentPane.add(comboBox);
JFrame frame = new JFrame("JComboBox Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud) java ×5
swing ×3
cocoa ×2
javascript ×2
animation ×1
canvas ×1
classloader ×1
colors ×1
dictionary ×1
gd ×1
html5 ×1
jcombobox ×1
macos ×1
nsdata ×1
nsstring ×1
objective-c ×1
php ×1
swingx ×1
unicode ×1
xcode ×1